aboutsummaryrefslogtreecommitdiff
path: root/Makefile.inc1
diff options
context:
space:
mode:
authorBryan Drewery <bdrewery@FreeBSD.org>2017-11-01 21:22:05 +0000
committerBryan Drewery <bdrewery@FreeBSD.org>2017-11-01 21:22:05 +0000
commitdfa099890c456aed9b7924373d4dc2f013856c04 (patch)
treecd861b9d8d01f2b83ede657ac533cd19ee9409a8 /Makefile.inc1
parent648176e095097c5c2642a5627542423e277a5f8e (diff)
downloadsrc-dfa099890c456aed9b7924373d4dc2f013856c04.tar.gz
src-dfa099890c456aed9b7924373d4dc2f013856c04.zip
Add option UNIFIED_OBJDIR, on by default, which moves the default build OBJDIR.
This changes the build OBJDIR from the older style of /usr/obj/<srcdir> for native builds, and /usr/obj/<target>.<target_arch>/<srcdir> for cross builds to a new simpler format of /usr/obj/<srcdir>/<target>.<target_arch>. This new format is used regardless of cross or native build. It allows easier management of multiple source tree object directories. The UNIFIED_OBJDIR option will be removed and its feature made permanent for the 12.0 release. Relnotes: yes (don't note UNIFIED_OBJDIR option since it will be removed) Prior work: D3711 D874 Reviewed by: gjb, sjg Discussed at: https://lists.freebsd.org/pipermail/freebsd-arch/2016-May/017805.html Discussed with: emaste Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D12840
Notes
Notes: svn path=/head/; revision=325288
Diffstat (limited to 'Makefile.inc1')
-rw-r--r--Makefile.inc186
1 files changed, 39 insertions, 47 deletions
diff --git a/Makefile.inc1 b/Makefile.inc1
index ea30d6d90d40..5d33ac280b0f 100644
--- a/Makefile.inc1
+++ b/Makefile.inc1
@@ -78,18 +78,11 @@ MK_CLANG_BOOTSTRAP= no
MK_GCC_BOOTSTRAP= no
.endif
-MAKEOBJDIRPREFIX?= /usr/obj
-.if ${MACHINE} == ${TARGET} && ${MACHINE_ARCH} == ${TARGET_ARCH} && !defined(CROSS_BUILD_TESTING)
-OBJTREE= ${MAKEOBJDIRPREFIX}
-.else
-OBJTREE= ${MAKEOBJDIRPREFIX}/${TARGET}.${TARGET_ARCH}
-.endif
-
# Pull in compiler metadata from buildworld/toolchain if possible to avoid
# running CC from bsd.compiler.mk.
.if make(installworld) || make(install) || make(distributeworld) || \
make(stageworld)
-.-include "${OBJTREE}${.CURDIR}/compiler-metadata.mk"
+.-include "${OBJTOP}/compiler-metadata.mk"
.endif
# Pull in COMPILER_TYPE and COMPILER_FREEBSD_VERSION early.
@@ -450,7 +443,7 @@ BUILD_ARCH!= uname -p
.error To cross-build, set TARGET_ARCH.
.endif
.endif
-WORLDTMP= ${OBJTREE}${.CURDIR}/tmp
+WORLDTMP?= ${OBJTOP}/tmp
BPATH= ${CCACHE_WRAPPER_PATH_PFX}${WORLDTMP}/legacy/usr/sbin:${WORLDTMP}/legacy/usr/bin:${WORLDTMP}/legacy/bin
XPATH= ${WORLDTMP}/usr/sbin:${WORLDTMP}/usr/bin
STRICTTMPPATH= ${BPATH}:${XPATH}
@@ -508,7 +501,7 @@ MINIMUM_SUPPORTED_OSREL?= 900044
MINIMUM_SUPPORTED_REL?= 9.1
# Common environment for world related stages
-CROSSENV+= MAKEOBJDIRPREFIX=${OBJTREE} \
+CROSSENV+= \
MACHINE_ARCH=${TARGET_ARCH} \
MACHINE=${TARGET} \
CPUTYPE=${TARGET_CPUTYPE}
@@ -543,7 +536,7 @@ BMAKE= MAKEOBJDIRPREFIX=${WORLDTMP} \
${BSARGS}
# build-tools stage
-TMAKE= MAKEOBJDIRPREFIX=${OBJTREE} \
+TMAKE= \
${BMAKEENV} ${MAKE} ${WORLD_FLAGS} -f Makefile.inc1 \
TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
DESTDIR= \
@@ -670,10 +663,10 @@ LIBCOMPAT= SOFT
META_MODE_BAD_ABI_VERS+= 1200031
.if !defined(OBJDIR_HOST_OSRELDATE)
-.if exists(${OBJTREE}${.CURDIR}/host-osreldate.h)
+.if exists(${OBJTOP}/host-osreldate.h)
OBJDIR_HOST_OSRELDATE!= \
awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \
- ${OBJTREE}${.CURDIR}/host-osreldate.h
+ ${OBJTOP}/host-osreldate.h
.elif exists(${WORLDTMP}/usr/include/osreldate.h)
OBJDIR_HOST_OSRELDATE= 0
.endif
@@ -778,36 +771,36 @@ _cleanobj_fast_depend_hack: .PHONY
# 20160829 r305012 ptrace
# 20170624 r320278 fstat fstatat fstatfs getdirentries getfsstat statfs
.for f in fstat fstatat fstatfs getdirentries getfsstat ptrace statfs
-.if exists(${OBJTREE}${.CURDIR}/lib/libc/.depend.${f}.o)
+.if exists(${OBJTOP}/lib/libc/.depend.${f}.o)
@if egrep -qw '${f}\.[sS]' \
- ${OBJTREE}${.CURDIR}/lib/libc/.depend.${f}.o; then \
+ ${OBJTOP}/lib/libc/.depend.${f}.o; then \
echo Removing stale dependencies for ${f} syscall wrappers; \
- rm -f ${OBJTREE}${.CURDIR}/lib/libc/.depend.${f}.* \
- ${LIBCOMPAT:D${LIBCOMPAT_OBJTREE}${.CURDIR}/lib/libc/.depend.${f}.*}; \
+ rm -f ${OBJTOP}/lib/libc/.depend.${f}.* \
+ ${LIBCOMPAT:D${LIBCOMPAT_OBJTOP}/lib/libc/.depend.${f}.*}; \
fi
.endif
.endfor
# 20170607 remove stale dependencies for utimens* wrappers removed in r319663
.for f in futimens utimensat
-.if exists(${OBJTREE}${.CURDIR}/lib/libc/.depend.${f}.o)
+.if exists(${OBJTOP}/lib/libc/.depend.${f}.o)
@if egrep -q '/${f}.c' \
- ${OBJTREE}${.CURDIR}/lib/libc/.depend.${f}.o; then \
+ ${OBJTOP}/lib/libc/.depend.${f}.o; then \
echo Removing stale dependencies for ${f} syscall wrappers; \
- rm -f ${OBJTREE}${.CURDIR}/lib/libc/.depend.${f}.* \
- ${LIBCOMPAT:D${LIBCOMPAT_OBJTREE}${.CURDIR}/lib/libc/.depend.${f}.*}; \
+ rm -f ${OBJTOP}/lib/libc/.depend.${f}.* \
+ ${LIBCOMPAT:D${LIBCOMPAT_OBJTOP}/lib/libc/.depend.${f}.*}; \
fi
.endif
.endfor
# 20170523 remove stale generated asm files for functions which are no longer
# syscalls after r302092 (pipe) and r318736 (others)
.for f in getdents lstat mknod pipe stat
-.if exists(${OBJTREE}${.CURDIR}/lib/libc/${f}.s) || \
- exists(${OBJTREE}${.CURDIR}/lib/libc/${f}.S)
+.if exists(${OBJTOP}/lib/libc/${f}.s) || \
+ exists(${OBJTOP}/lib/libc/${f}.S)
@echo Removing stale generated ${f} syscall files
- @rm -f ${OBJTREE}${.CURDIR}/lib/libc/${f}.* \
- ${OBJTREE}${.CURDIR}/lib/libc/.depend.${f}.* \
- ${LIBCOMPAT:D${LIBCOMPAT_OBJTREE}${.CURDIR}/lib/libc/${f}.*} \
- ${LIBCOMPAT:D${LIBCOMPAT_OBJTREE}${.CURDIR}/lib/libc/.depend.${f}.*}
+ @rm -f ${OBJTOP}/lib/libc/${f}.* \
+ ${OBJTOP}/lib/libc/.depend.${f}.* \
+ ${LIBCOMPAT:D${LIBCOMPAT_OBJTOP}/lib/libc/${f}.*} \
+ ${LIBCOMPAT:D${LIBCOMPAT_OBJTOP}/lib/libc/.depend.${f}.*}
.endif
.endfor
@@ -899,7 +892,7 @@ _cross-tools:
@echo "--------------------------------------------------------------"
@echo ">>> stage 3: cross tools"
@echo "--------------------------------------------------------------"
- @rm -f ${OBJTREE}${.CURDIR}/compiler-metadata.mk
+ @rm -f ${OBJTOP}/compiler-metadata.mk
${_+_}cd ${.CURDIR}; ${XMAKE} cross-tools
${_+_}cd ${.CURDIR}; ${XMAKE} kernel-tools
_build-metadata:
@@ -1071,7 +1064,7 @@ __installcheck_UGID: .PHONY
(empty(DESTDIR) || ${DESTDIR} == "/") && empty(BYPASS_INSTALLCHECK_SH)
_installcheck_world: __installcheck_sh_check
__installcheck_sh_check: .PHONY
- @if [ "`${OBJTREE}${.CURDIR}/rescue/rescue/rescue sh -c 'echo OK'`" != \
+ @if [ "`${OBJTOP}/rescue/rescue/rescue sh -c 'echo OK'`" != \
OK ]; then \
echo "rescue/sh check failed, installation aborted" >&2; \
false; \
@@ -1333,7 +1326,7 @@ INSTKERNNAME?= kernel
KERNSRCDIR?= ${.CURDIR}/sys
KRNLCONFDIR= ${KERNSRCDIR}/${TARGET}/conf
-KRNLOBJDIR= ${OBJTREE}${KERNSRCDIR}
+KRNLOBJDIR= ${OBJTOP}${KERNSRCDIR:C,^${.CURDIR},,}
KERNCONFDIR?= ${KRNLCONFDIR}
BUILDKERNELS=
@@ -1541,9 +1534,9 @@ stagekernel: .PHONY
${_+_}${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} distributekernel
PORTSDIR?= /usr/ports
-WSTAGEDIR?= ${MAKEOBJDIRPREFIX}${.CURDIR}/${TARGET}.${TARGET_ARCH}/worldstage
-KSTAGEDIR?= ${MAKEOBJDIRPREFIX}${.CURDIR}/${TARGET}.${TARGET_ARCH}/kernelstage
-REPODIR?= ${MAKEOBJDIRPREFIX}${.CURDIR}/repo
+WSTAGEDIR?= ${OBJTOP}/worldstage
+KSTAGEDIR?= ${OBJTOP}/kernelstage
+REPODIR?= ${OBJROOT}repo
PKGSIGNKEY?= # empty
.ORDER: stage-packages create-packages
@@ -1806,10 +1799,10 @@ legacy: .PHONY
${_+_}@${ECHODIR} "===> ${_tool} (obj,includes,all,install)"; \
cd ${.CURDIR}/${_tool}; \
if [ -z "${NO_OBJ}" ]; then ${MAKE} DIRPRFX=${_tool}/ obj; fi; \
- ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy includes; \
+ ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${WORLDTMP}/legacy includes; \
${MAKE} DIRPRFX=${_tool}/ MK_INCLUDES=no all; \
${MAKE} DIRPRFX=${_tool}/ MK_INCLUDES=no \
- DESTDIR=${MAKEOBJDIRPREFIX}/legacy install
+ DESTDIR=${WORLDTMP}/legacy install
.endfor
#
@@ -1953,7 +1946,7 @@ ${_bt}-${_tool}: .PHONY .MAKE
cd ${.CURDIR}/${_tool}; \
if [ -z "${NO_OBJ}" ]; then ${MAKE} DIRPRFX=${_tool}/ obj; fi; \
${MAKE} DIRPRFX=${_tool}/ all; \
- ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install
+ ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${WORLDTMP}/legacy install
bootstrap-tools: ${_bt}-${_tool}
.endfor
@@ -2011,9 +2004,9 @@ build-tools: build-tools_${_tool}
# kernel-tools: Build kernel-building tools
#
kernel-tools: .PHONY
- mkdir -p ${MAKEOBJDIRPREFIX}/usr
+ mkdir -p ${WORLDTMP}/usr
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \
- -p ${MAKEOBJDIRPREFIX}/usr >/dev/null
+ -p ${WORLDTMP}/usr >/dev/null
#
# cross-tools: All the tools needed to build the rest of the system after
@@ -2089,7 +2082,7 @@ cross-tools: .MAKE .PHONY
cd ${.CURDIR}/${_tool}; \
if [ -z "${NO_OBJ}" ]; then ${MAKE} DIRPRFX=${_tool}/ obj; fi; \
${MAKE} DIRPRFX=${_tool}/ all; \
- ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX} install
+ ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${WORLDTMP} install
.endfor
#
@@ -2100,7 +2093,8 @@ cross-tools: .MAKE .PHONY
# already built. It then installs the static tools to NXBDESTDIR for Poudriere
# to pickup.
#
-NXBOBJDIR= ${MAKEOBJDIRPREFIX}/nxb/${TARGET}.${TARGET_ARCH}
+NXBOBJROOT= ${OBJROOT}nxb/
+NXBOBJTOP= ${NXBOBJROOT}${TARGET}.${TARGET_ARCH}
NXTP?= /nxb-bin
.if ${NXTP:N/*}
.error NXTP variable should be an absolute path
@@ -2181,11 +2175,9 @@ NXBDIRS+= gnu/usr.bin/cc
NXBDIRS+= gnu/usr.bin/binutils
.endif
-NXBMAKEENV+= \
- MAKEOBJDIRPREFIX=${NXBOBJDIR:Q}
-
NXBMAKEARGS+= \
- OBJTREE=${NXBOBJDIR:Q} \
+ OBJTOP=${NXBOBJTOP:Q} \
+ OBJROOT=${NXBOBJROOT:Q} \
-DNO_SHARED \
-DNO_CPU_CFLAGS \
-DNO_PIC \
@@ -2759,7 +2751,7 @@ builddtb: .PHONY
# in this makefile. We don't do a cleandir walk if MK_AUTO_OBJ is yes
# since it is not possible for files to land in the wrong place.
#
-BW_CANONICALOBJDIR:=${OBJTREE}${.CURDIR}
+BW_CANONICALOBJDIR:=${OBJTOP}
cleanworld: .PHONY
.if exists(${BW_CANONICALOBJDIR}/)
-rm -rf ${BW_CANONICALOBJDIR}/*
@@ -2791,7 +2783,7 @@ XDTP?=/usr/${XDDIR}
.error XDTP variable should be an absolute path
.endif
-CDBENV=MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/${XDDIR} \
+CDBENV=MAKEOBJDIRPREFIX=${OBJTOP}/${XDDIR} \
INSTALL="sh ${.CURDIR}/tools/install.sh"
CDENV= ${CDBENV} \
TOOLS_PREFIX=${XDTP}
@@ -2816,7 +2808,7 @@ CD2ENV=${CDENV} CC="${CC} ${CD2CFLAGS}" CXX="${CXX} ${CD2CXXFLAGS} ${CD2CFLAGS}"
CPP="${CPP} ${CD2CFLAGS}" \
MACHINE=${TARGET} MACHINE_ARCH=${TARGET_ARCH}
-CDTMP= ${MAKEOBJDIRPREFIX}/${XDDIR}/${.CURDIR}/tmp
+CDTMP= ${OBJTOP}/${XDDIR}/tmp
CDMAKE=${CDENV} PATH=${CDTMP}/usr/bin:${PATH} ${MAKE} ${NOFUN}
CD2MAKE=${CD2ENV} PATH=${CDTMP}/usr/bin:${XDDESTDIR}/usr/bin:${PATH} ${MAKE} ${NOFUN}
.if ${MK_META_MODE} != "no"