aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryan Drewery <bdrewery@FreeBSD.org>2017-11-10 19:53:07 +0000
committerBryan Drewery <bdrewery@FreeBSD.org>2017-11-10 19:53:07 +0000
commit9cde684d499b1c180322bee158393c81c0f1dd4a (patch)
tree2073c0e884026f24f916aa8e67f41d6253e3e135
parent2f1b9408057b9f79704d12e04ecd2692c84f82e6 (diff)
downloadsrc-9cde684d499b1c180322bee158393c81c0f1dd4a.tar.gz
src-9cde684d499b1c180322bee158393c81c0f1dd4a.zip
native-xtools: Fix for GCC archs.
- This also adds in a _cleanobj step as needed. - This redirects TARGET/TARGET_ARCH to NXB_TARGET/NXB_TARGET_ARCH in Makefile.inc1 as the main build needs to be for MACHINE rather than TARGET. First build the toolchain and then use that as an external toolchain to build the needed directories and NXB_TARGET-toolchain, all as MACHINE files though via TARGET_TRIPLE=MACHINE_TRIPLE. The NXBDIRS is evaluated in the 'everything' submake as it needs to be based on TARGET's src.opts.mk values, such as MK_GCC=yes when building on a MK_CLANG=yes MACHINE. This can likely be changed to a specific _native-xtools-everything target later and the funky late evaluation of SUBDIR_OVERRIDE removed. X-MFC-With: r325001 Pointyhat to: bdrewery MFC after: 2 months Sponsored by: Dell EMC Isilon
Notes
Notes: svn path=/head/; revision=325673
-rw-r--r--Makefile9
-rw-r--r--Makefile.inc151
2 files changed, 49 insertions, 11 deletions
diff --git a/Makefile b/Makefile
index 7bd234bd65d5..310adbd27c2e 100644
--- a/Makefile
+++ b/Makefile
@@ -290,6 +290,15 @@ ${XTGTS}: _assert_target
_TARGET?= ${MACHINE}
_TARGET_ARCH?= ${MACHINE_ARCH}
+.if make(native-xtools*)
+NXB_TARGET:= ${_TARGET}
+NXB_TARGET_ARCH:= ${_TARGET_ARCH}
+_TARGET= ${MACHINE}
+_TARGET_ARCH= ${MACHINE_ARCH}
+_MAKE+= NXB_TARGET=${NXB_TARGET} \
+ NXB_TARGET_ARCH=${NXB_TARGET_ARCH}
+.endif
+
.if make(print-dir)
.SILENT:
.endif
diff --git a/Makefile.inc1 b/Makefile.inc1
index 45b8fe174394..8bc825d4606b 100644
--- a/Makefile.inc1
+++ b/Makefile.inc1
@@ -2110,7 +2110,7 @@ cross-tools: .MAKE .PHONY
# to pickup.
#
NXBOBJROOT= ${OBJROOT}${MACHINE}.${MACHINE_ARCH}/nxb/
-NXBOBJTOP= ${NXBOBJROOT}${TARGET}.${TARGET_ARCH}
+NXBOBJTOP= ${NXBOBJROOT}${NXB_TARGET}.${NXB_TARGET_ARCH}
NXTP?= /nxb-bin
.if ${NXTP:N/*}
.error NXTP variable should be an absolute path
@@ -2180,20 +2180,27 @@ NXBDIRS+= \
usr.bin/yacc \
usr.sbin/chown
+SUBDIR_DEPEND_usr.bin/clang= lib/clang
.if ${MK_CLANG} != "no"
NXBDIRS+= lib/clang
-SUBDIR_DEPEND_usr.bin/clang= lib/clang
NXBDIRS+= usr.bin/clang
-.elif ${MK_GCC} != "no"
+.endif
+.if ${MK_GCC} != "no"
NXBDIRS+= gnu/usr.bin/cc
.endif
.if ${MK_BINUTILS} != "no"
NXBDIRS+= gnu/usr.bin/binutils
.endif
+# XXX: native-xtools passes along ${NXBDIRS} in SUBDIR_OVERRIDE that needs
+# to be evaluated after NXBDIRS is set.
+.if make(install) && !empty(SUBDIR_OVERRIDE)
+SUBDIR= ${SUBDIR_OVERRIDE}
+.endif
NXBMAKEARGS+= \
OBJTOP=${NXBOBJTOP:Q} \
OBJROOT=${NXBOBJROOT:Q} \
+ MAKEOBJDIRPREFIX= \
-DNO_SHARED \
-DNO_CPU_CFLAGS \
-DNO_PIC \
@@ -2216,7 +2223,10 @@ NXBMAKEARGS+= \
MK_WARNS=no \
MK_ZFS=no
-
+.if make(native-xtools*) && \
+ (!defined(NXB_TARGET) || !defined(NXB_TARGET_ARCH))
+.error Missing NXB_TARGET / NXB_TARGET_ARCH
+.endif
# For 'toolchain' we want to produce native binaries that themselves generate
# native binaries.
NXBTMAKE= ${NXBMAKEENV} ${MAKE} ${NXBMAKEARGS:N-DNO_PIC:N-DNO_SHARED} \
@@ -2224,11 +2234,32 @@ NXBTMAKE= ${NXBMAKEENV} ${MAKE} ${NXBMAKEARGS:N-DNO_PIC:N-DNO_SHARED} \
# For 'everything' we want to produce native binaries (hence -target to
# be MACHINE) that themselves generate TARGET.TARGET_ARCH binaries.
# TARGET/TARGET_ARCH are still passed along from user.
-NXBMAKE= ${NXBMAKEENV} ${MAKE} ${NXBMAKEARGS} \
+#
+# Use the toolchain we create as an external toolchain.
+.if ${USING_SYSTEM_COMPILER} == "yes" || ${XCC:N${CCACHE_BIN}:M/*}
+NXBMAKE+= XCC="${XCC}" \
+ XCXX="${XCXX}" \
+ XCPP="${XCPP}"
+.else
+NXBMAKE+= XCC="${NXBOBJTOP}/tmp/usr/bin/cc" \
+ XCXX="${NXBOBJTOP}/tmp/usr/bin/c++" \
+ XCPP="${NXBOBJTOP}/tmp/usr/bin/cpp"
+.endif
+NXBMAKE+= ${NXBMAKEENV} ${MAKE} -f Makefile.inc1 ${NXBMAKEARGS} \
+ TARGET=${NXB_TARGET} TARGET_ARCH=${NXB_TARGET_ARCH} \
TARGET_TRIPLE=${MACHINE_TRIPLE:Q}
+# NXBDIRS is improperly based on MACHINE rather than NXB_TARGET. Need to
+# invoke a sub-make to reevaluate MK_GCC, etc, for NXBDIRS.
+NXBMAKE+= SUBDIR_OVERRIDE='$${NXBDIRS:M*}'
+# Need to avoid the -isystem logic when using clang as an external toolchain
+# even if the TARGET being built for wants GCC.
+NXBMAKE+= WANT_COMPILER_TYPE='$${X_COMPILER_TYPE}'
native-xtools: .PHONY
+ ${_+_}cd ${.CURDIR}; ${NXBTMAKE} _cleanobj
# Build the bootstrap/host/cross tools that produce native binaries
- ${_+_}cd ${.CURDIR}; ${NXBTMAKE} kernel-toolchain
+ # Pass along MK_GCC=yes to ensure GCC-needed build tools are built.
+ # We don't quite know what the NXB_TARGET wants so just build it.
+ ${_+_}cd ${.CURDIR}; ${NXBTMAKE} kernel-toolchain MK_GCC=yes
# Populate includes/libraries sysroot that produce native binaries.
# This is split out from 'toolchain' above mostly so that target LLVM
# libraries have a proper LLVM_DEFAULT_TARGET_TRIPLE without
@@ -2238,10 +2269,9 @@ native-xtools: .PHONY
${_+_}cd ${.CURDIR}; ${NXBTMAKE} _includes MK_CLANG=no MK_GCC=no
${_+_}cd ${.CURDIR}; ${NXBTMAKE} _libraries MK_CLANG=no MK_GCC=no
.if !defined(NO_OBJWALK)
- ${_+_}cd ${.CURDIR}; ${NXBMAKE} SUBDIR_OVERRIDE="${NXBDIRS:M*}" _obj
+ ${_+_}cd ${.CURDIR}; ${NXBMAKE} _obj
.endif
- ${_+_}cd ${.CURDIR}; ${NXBMAKE} SUBDIR_OVERRIDE="${NXBDIRS:M*}" \
- everything
+ ${_+_}cd ${.CURDIR}; ${NXBMAKE} everything
@echo ">> native-xtools done. Use 'make native-xtools-install' to install to a given DESTDIR"
native-xtools-install: .PHONY
@@ -2250,9 +2280,8 @@ native-xtools-install: .PHONY
-p ${NXBDESTDIR}/usr >/dev/null
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
-p ${NXBDESTDIR}/usr/include >/dev/null
- ${_+_}cd ${.CURDIR}; ${NXBMAKE} -f Makefile.inc1 \
+ ${_+_}cd ${.CURDIR}; ${NXBMAKE} \
DESTDIR=${NXBDESTDIR} \
- SUBDIR_OVERRIDE="${NXBDIRS:M*}" \
-DNO_ROOT \
install