Fix native powerpc64 build of lib32 with in-tree GCC.
- This was broken by r300350 and r300885. - Add some comments around the external GCC logic since it is spread out and in need of some cleanup. - The problem was that X_COMPILER_TYPE is always defined from CC->XCC's default, so if /usr/bin/cc is GCC (as it is on native powerpc64) then X_COMPILER_TYPE was getting GCC and triggering the external logic in Makefile.libcompat. It was intended to always provide -isystem with GCC since --sysroot is used into the lib32 sysroot which won't modify the header path without the -isystem. The use of the libc++/std=c++11 override was only intended to be used for external compilers though (more accurately GCC 4.8+ but that's a separate assumption to cleanup). Apply the same logic from Makefile.inc1 to Makefile.libcompat to only add the libc++ override when needed for external compilers. Pointyhat to: bdrewery Tested with: native ppc64 (swills), universe, ppc64 xtoolchain, amd64 xtoolchain, sparc64 cross-build of ppc64 (host GCC 4.2) Reported by: andreast, swills Approved by: re (gjb) Sponsored by: EMC / Isilon Storage Division
This commit is contained in:
+4
-1
@@ -543,9 +543,12 @@ TARGET_ABI= gnueabi
|
|||||||
.endif
|
.endif
|
||||||
.endif
|
.endif
|
||||||
.if defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc
|
.if defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc
|
||||||
# GCC requires -isystem and -L when using a cross-compiler.
|
# 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
|
XCFLAGS+= -isystem ${WORLDTMP}/usr/include -L${WORLDTMP}/usr/lib
|
||||||
# Force using libc++ for external GCC.
|
# Force using libc++ for external GCC.
|
||||||
|
# XXX: This should be checking MK_GNUCXX == no
|
||||||
XCXXFLAGS+= -isystem ${WORLDTMP}/usr/include/c++/v1 -std=c++11 \
|
XCXXFLAGS+= -isystem ${WORLDTMP}/usr/include/c++/v1 -std=c++11 \
|
||||||
-nostdinc++ -L${WORLDTMP}/../lib/libc++
|
-nostdinc++ -L${WORLDTMP}/../lib/libc++
|
||||||
.else
|
.else
|
||||||
|
|||||||
+9
-1
@@ -72,13 +72,21 @@ LIBCOMPATCFLAGS+= ${LIBCOMPATCPUFLAGS} \
|
|||||||
# -B is needed to find /usr/lib32/crti.o for GCC and /usr/libsoft/crti.o for
|
# -B is needed to find /usr/lib32/crti.o for GCC and /usr/libsoft/crti.o for
|
||||||
# Clang/GCC.
|
# Clang/GCC.
|
||||||
LIBCOMPATCFLAGS+= -B${LIBCOMPATTMP}/usr/lib${libcompat}
|
LIBCOMPATCFLAGS+= -B${LIBCOMPATTMP}/usr/lib${libcompat}
|
||||||
|
|
||||||
.if defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc
|
.if defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc
|
||||||
# GCC requires -isystem when using a cross-compiler.
|
# 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
|
||||||
|
# sysroot path which --sysroot does not actually do for headers.
|
||||||
LIBCOMPATCFLAGS+= -isystem ${LIBCOMPATTMP}/usr/include
|
LIBCOMPATCFLAGS+= -isystem ${LIBCOMPATTMP}/usr/include
|
||||||
# Force using libc++ for external GCC.
|
# Force using libc++ for external GCC.
|
||||||
|
# XXX: This should be checking MK_GNUCXX == no
|
||||||
|
.if ${MK_CROSS_COMPILER} == "no" || \
|
||||||
|
(${MK_CLANG_BOOTSTRAP} == "no" && ${MK_GCC_BOOTSTRAP} == "no")
|
||||||
LIBCOMPATCXXFLAGS+= -isystem ${LIBCOMPATTMP}/usr/include/c++/v1 -std=c++11 \
|
LIBCOMPATCXXFLAGS+= -isystem ${LIBCOMPATTMP}/usr/include/c++/v1 -std=c++11 \
|
||||||
-nostdinc++ -L${LIBCOMPAT_OBJTREE}${.CURDIR}/lib/libc++
|
-nostdinc++ -L${LIBCOMPAT_OBJTREE}${.CURDIR}/lib/libc++
|
||||||
.endif
|
.endif
|
||||||
|
.endif
|
||||||
|
|
||||||
# Yes, the flags are redundant.
|
# Yes, the flags are redundant.
|
||||||
LIBCOMPATWMAKEENV+= MAKEOBJDIRPREFIX=${LIBCOMPAT_OBJTREE} \
|
LIBCOMPATWMAKEENV+= MAKEOBJDIRPREFIX=${LIBCOMPAT_OBJTREE} \
|
||||||
|
|||||||
@@ -419,6 +419,9 @@ MK_LLDB:= no
|
|||||||
# gcc 4.8 and newer supports libc++, so suppress gnuc++ in that case.
|
# gcc 4.8 and newer supports libc++, so suppress gnuc++ in that case.
|
||||||
# while in theory we could build it with that, we don't want to do
|
# while in theory we could build it with that, we don't want to do
|
||||||
# that since it creates too much confusion for too little gain.
|
# that since it creates too much confusion for too little gain.
|
||||||
|
# XXX: This is incomplete and needs X_COMPILER_TYPE/VERSION checks too
|
||||||
|
# to prevent Makefile.inc1 from bootstrapping unneeded dependencies
|
||||||
|
# and to support 'make delete-old' when supplying an external toolchain.
|
||||||
.if ${COMPILER_TYPE} == "gcc" && ${COMPILER_VERSION} >= 40800
|
.if ${COMPILER_TYPE} == "gcc" && ${COMPILER_VERSION} >= 40800
|
||||||
MK_GNUCXX:=no
|
MK_GNUCXX:=no
|
||||||
MK_GCC:=no
|
MK_GCC:=no
|
||||||
|
|||||||
Reference in New Issue
Block a user