Fix in-tree GCC builds after r304681.
There were a few issues. - In-tree GCC won't have X_COMPILER_TYPE defined but will have WANT_COMPILER_TYPE==gcc set from the SYSTEM_COMPILER logic that can be used. Make the clang check specific to clang as well to ensure -target doesn't leak into a GCC build. - When using a cross-compiler GCC (with a default sysroot or arch) and also passing --sysroot, it basically forgets all internal paths for libraries. We've already worked around this quite a bit for the external toolchains. Now for the in-tree bootstrap cross-compiler GCC, also pass in the needed -B${WORLDTMP}/usr/lib to find the crt object files, but also -isystem and -L to fix the paths. This creates quite a spammy build log, but it is clear and still achieves the goals and stays consistent between internal and external build flags. Reducing the spam by using the '=' prefix feature will help and be done later. MFC after: 3 days X-MFC-With: r304681 Reported by: bz Pointyhat to: bdrewery Sponsored by: EMC / Isilon Storage Division
This commit is contained in:
parent
de7b37e618
commit
4d611b2b2d
@ -572,18 +572,23 @@ TARGET_ABI= gnueabihf
|
||||
TARGET_ABI= gnueabi
|
||||
.endif
|
||||
.endif
|
||||
.if defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc
|
||||
.if ${WANT_COMPILER_TYPE} == gcc || \
|
||||
(defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc)
|
||||
# GCC requires -isystem and -L when using a cross-compiler. --sysroot
|
||||
# won't set header path and -L is used to ensure the base library path
|
||||
# is added before the port PREFIX library path.
|
||||
XCFLAGS+= -isystem ${WORLDTMP}/usr/include -L${WORLDTMP}/usr/lib
|
||||
# GCC requires -B to find /usr/lib/crti.o when using a cross-compiler
|
||||
# combined with --sysroot.
|
||||
XCFLAGS+= -B${WORLDTMP}/usr/lib
|
||||
# Force using libc++ for external GCC.
|
||||
# XXX: This should be checking MK_GNUCXX == no
|
||||
.if ${X_COMPILER_VERSION} >= 40800
|
||||
XCXXFLAGS+= -isystem ${WORLDTMP}/usr/include/c++/v1 -std=c++11 \
|
||||
-nostdinc++ -L${WORLDTMP}/../lib/libc++
|
||||
.endif
|
||||
.else
|
||||
.elif ${WANT_COMPILER_TYPE} == clang || \
|
||||
(defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == clang)
|
||||
TARGET_ABI?= unknown
|
||||
TARGET_TRIPLE?= ${TARGET_ARCH:C/amd64/x86_64/}-${TARGET_ABI}-freebsd12.0
|
||||
XCFLAGS+= -target ${TARGET_TRIPLE}
|
||||
|
@ -73,7 +73,8 @@ LIBCOMPATCFLAGS+= ${LIBCOMPATCPUFLAGS} \
|
||||
# Clang/GCC.
|
||||
LIBCOMPATCFLAGS+= -B${LIBCOMPATTMP}/usr/lib${libcompat}
|
||||
|
||||
.if defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc
|
||||
.if ${WANT_COMPILER_TYPE} == gcc || \
|
||||
(defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc)
|
||||
# GCC requires -isystem when using a cross-compiler and --sysroot. Note that
|
||||
# Makefile.inc1 only applies this with an external compiler but libcompat
|
||||
# always does since even in-tree GCC 4.2 needs this to override the built-in
|
||||
|
Loading…
Reference in New Issue
Block a user