In the first build the TOOLSDIR does not exit yet which causes CC to default
to the sys.mk version. Once a TOOLSDIR is created during the build though,
this logic was changing CC to ${TOOLSDIR}/usr/bin/cc even though that file
did not exist. Thus CC went from 'cc' to '/usr/bin/cc' which forced a
rebuild of everything while using the same compiler. Check that TOOLSDIR is
not empty to avoid this. If there is actually a TOOLSDIR cc then it will be
used and properly rebuild.
Sponsored by: EMC / Isilon Storage Division
Filemon(4) will record paths as they are seen, not as fully resolved. make(1)
will take the .MAKE.META.IGNORE_PATHS values and resolve them. This creates
a discrepancy if CCACHE_DIR is a symlink. Fix this by ensuring it is
resolved for its actual usage.
Submitted by: sjg
r284708 addressed this slightly but seems to have put the make(showconfig)
guard in the wrong place. Rather than guard setting the default obj directory,
guard inclusion of auto.obj.mk. This avoids creating SRCTOP/obj and
SRCTOP/release/obj when running makeman.
Sponsored by: EMC / Isilon Storage Division
This avoids easily colliding multiple src trees with the same objects. Having
multiple checkouts in dir/ dir2/ dir3/ would all use obj/ without any unique
identifier inside of obj/. This pattern is more likely to be used due
to the non-META_MODE behavior working with it fine.
In environments where ../obj/ is wanted as the obj directory the value of
OBJROOT can be set to ${SRCTOP:H}/obj/ instead via src-env.conf (set by
SRC_ENV_CONF) or environment. For environment it must be single quoted or
escaped. This will be more likely for vendors who are building images or using
NFS for builds. In those cases MAKEOBJDIRPREFIX may already be utilized and
is supported.
Discussed with: imp
Sponsored by: EMC / Isilon Storage Division
The preferred way to modify the object directory root is to use OBJROOT.
However, setting OBJROOT to ${MAKEOBJDIRPREFIX}/${SRCTOP}/ effectively behaves
as expected.
The problem with this before was that setting OBJROOT to contain SRCTOP
resulted in a recursive replacement (/usr/obj/usr/obj/usr/src/). Anchoring to
the start of the path for replacing SRCCTOP in CURDIR resolves this by
avoiding replacing SRCTOP when CURDIR is within the OBJDIR.
Sponsored by: EMC / Isilon Storage Division
This would lead to the 2nd build (after the first with a missing OBJROOT) to
always rebuild everything as the 'command' would have changed due to the path
changing from having // to only /.
Sponsored by: EMC / Isilon Storage Division
MAKEOBJDIR is based on OBJTOP so cannot be expanded until OBJTOP is set.
Reported by: Nikolai Lifanov <lifanov@mail.lifanov.com>
Sponsored by: EMC / Isilon Storage Division
If MAKEOBJDIRPREFIX is set, use it for default OBJROOT.
If MAKEOBJDIR is empty or not a suitable value (no '/')
set a default that works.
Reviewed by: bdrewery
Off by default, build behaves normally.
WITH_META_MODE we get auto objdir creation, the ability to
start build from anywhere in the tree.
Still need to add real targets under targets/ to build packages.
Differential Revision: D2796
Reviewed by: brooks imp
By moving META_MODE bits from local.sys.mk, they are easier
to skip when MK_META_MODE=no
Update some filters to cope with sync from head.
If buildworld etc or WITHOUT_META_MODE disable all the META_MODE
related options.