diff options
author | Brooks Davis <brooks@FreeBSD.org> | 2019-11-07 22:58:10 +0000 |
---|---|---|
committer | Brooks Davis <brooks@FreeBSD.org> | 2019-11-07 22:58:10 +0000 |
commit | a4330302f22d45d4158204b2d5d7c6738100f3a5 (patch) | |
tree | 9cb152bfad3e48051a626a02a237af9104e6929c /share/mk | |
parent | 273b2e4c55f5de86ed5d2fea0a00677f944cbd9d (diff) | |
download | src-a4330302f22d45d4158204b2d5d7c6738100f3a5.tar.gz src-a4330302f22d45d4158204b2d5d7c6738100f3a5.zip |
libcompat: build 32-bit rtld and ldd as part of "everything"
Alter bsd.compat.mk to set MACHINE and MACHINE_ARCH when included
directly so MD paths in Makefiles work. In the process centralize
setting them in LIBCOMPATWMAKEENV.
Alter .PATH and CFLAGS settings in work when the Makefile is included.
While here only support LIB32 on supported platforms rather than always
enabling it and requiring users of MK_LIB32 to filter based
TARGET/MACHINE_ARCH.
The net effect of this change is to make Makefile.libcompat only build
compatability libraries.
Changes relative to r354449:
Correct detection of the compiler type when bsd.compat.mk is used
outside Makefile.libcompat. Previously it always matched the clang
case.
Set LDFLAGS including the linker emulation for mips where -m32 seems to
be insufficent.
Reviewed by: imp, kib (origional version in r354449)
Obtained from: CheriBSD (conceptually)
Sponsored by: DARPA, AFRL
Differential Revision: https://reviews.freebsd.org/D22251
Notes
Notes:
svn path=/head/; revision=354491
Diffstat (limited to 'share/mk')
-rw-r--r-- | share/mk/bsd.compat.mk | 45 | ||||
-rw-r--r-- | share/mk/src.opts.mk | 8 |
2 files changed, 39 insertions, 14 deletions
diff --git a/share/mk/bsd.compat.mk b/share/mk/bsd.compat.mk index 4d6c8aac56f1..c50cd79c306c 100644 --- a/share/mk/bsd.compat.mk +++ b/share/mk/bsd.compat.mk @@ -6,9 +6,17 @@ __<${_this:T}>__: .if defined(_LIBCOMPAT) COMPAT_ARCH= ${TARGET_ARCH} COMPAT_CPUTYPE= ${TARGET_CPUTYPE} +.if (defined(WANT_COMPILER_TYPE) && ${WANT_COMPILER_TYPE} == gcc) || \ + (defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc) +COMPAT_COMPILER_TYPE= gcc +.else +COMPAT_COMPILER_TYPE= clang +.endif .else COMPAT_ARCH= ${MACHINE_ARCH} COMPAT_CPUTYPE= ${CPUTYPE} +.include <bsd.compiler.mk> +COMPAT_COMPILER_TYPE=${COMPILER_TYPE} .endif # ------------------------------------------------------------------- @@ -20,14 +28,14 @@ LIB32CPUFLAGS= -march=i686 -mmmx -msse -msse2 .else LIB32CPUFLAGS= -march=${COMPAT_CPUTYPE} .endif -.if (defined(WANT_COMPILER_TYPE) && ${WANT_COMPILER_TYPE} == gcc) || \ - (defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc) +.if ${COMPAT_COMPILER_TYPE} == gcc .else LIB32CPUFLAGS+= -target x86_64-unknown-freebsd13.0 .endif LIB32CPUFLAGS+= -m32 -LIB32WMAKEENV= MACHINE=i386 MACHINE_ARCH=i386 \ - MACHINE_CPU="i686 mmx sse sse2" +LIB32_MACHINE= i386 +LIB32_MACHINE_ARCH= i386 +LIB32WMAKEENV= MACHINE_CPU="i686 mmx sse sse2" LIB32WMAKEFLAGS= \ AS="${XAS} --32" \ LD="${XLD} -m elf_i386_fbsd -L${LIBCOMPATTMP}/usr/lib32" @@ -40,14 +48,14 @@ LIB32CPUFLAGS= -mcpu=powerpc LIB32CPUFLAGS= -mcpu=${COMPAT_CPUTYPE} .endif LIB32CPUFLAGS+= -m32 -LIB32WMAKEENV= MACHINE=powerpc MACHINE_ARCH=powerpc +LIB32_MACHINE= powerpc +LIB32_MACHINE_ARCH= powerpc LIB32WMAKEFLAGS= \ LD="${XLD} -m elf32ppc_fbsd" .elif ${COMPAT_ARCH:Mmips64*} != "" HAS_COMPAT=32 -.if (defined(WANT_COMPILER_TYPE) && ${WANT_COMPILER_TYPE} == gcc) || \ - (defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc) +.if ${COMPAT_COMPILER_TYPE} == gcc .if empty(COMPAT_CPUTYPE) LIB32CPUFLAGS= -march=mips3 .else @@ -61,12 +69,15 @@ LIB32CPUFLAGS= -target mips-unknown-freebsd13.0 .endif .endif LIB32CPUFLAGS+= -mabi=32 -LIB32WMAKEENV= MACHINE=mips MACHINE_ARCH=mips +LIB32_MACHINE= mips +LIB32_MACHINE_ARCH= mips .if ${COMPAT_ARCH:Mmips64el*} != "" -LIB32WMAKEFLAGS= LD="${XLD} -m elf32ltsmip_fbsd" +_EMULATION= elf32ltsmip_fbsd .else -LIB32WMAKEFLAGS= LD="${XLD} -m elf32btsmip_fbsd" +_EMULATION= elf32btsmip_fbsd .endif +LIB32WMAKEFLAGS= LD="${XLD} -m ${_EMULATION}" +LIB32LDFLAGS= -Wl,-m${_EMULATION} .endif LIB32WMAKEFLAGS+= NM="${XNM}" @@ -82,7 +93,9 @@ LIB32WMAKEFLAGS+= -DCOMPAT_32BIT HAS_COMPAT=SOFT LIBSOFTCFLAGS= -DCOMPAT_SOFTFP LIBSOFTCPUFLAGS= -mfloat-abi=softfp -LIBSOFTWMAKEENV= CPUTYPE=soft MACHINE=arm MACHINE_ARCH=${COMPAT_ARCH} +LIBSOFT_MACHINE= arm +LIBSOFT_MACHINE_ARCH= ${COMPAT_ARCH} +LIBSOFTWMAKEENV= CPUTYPE=soft LIBSOFTWMAKEFLAGS= -DCOMPAT_SOFTFP .endif @@ -114,8 +127,8 @@ _LIBCOMPAT:= ${WANT_COMPAT} # Generic code for each type. # Set defaults based on type. libcompat= ${_LIBCOMPAT:tl} -_LIBCOMPAT_MAKEVARS= _OBJTOP TMP CPUFLAGS CFLAGS CXXFLAGS WMAKEENV \ - WMAKEFLAGS WMAKE +_LIBCOMPAT_MAKEVARS= _OBJTOP TMP CPUFLAGS CFLAGS CXXFLAGS LDFLAGS \ + _MACHINE _MACHINE_ARCH WMAKEENV WMAKEFLAGS WMAKE .for _var in ${_LIBCOMPAT_MAKEVARS} .if !empty(LIB${_LIBCOMPAT}${_var}) LIBCOMPAT${_var}?= ${LIB${_LIBCOMPAT}${_var}} @@ -131,6 +144,9 @@ LIBCOMPATCFLAGS+= ${LIBCOMPATCPUFLAGS} \ --sysroot=${LIBCOMPATTMP} \ ${BFLAGS} +LIBCOMPATWMAKEENV+= MACHINE=${LIBCOMPAT_MACHINE} +LIBCOMPATWMAKEENV+= MACHINE_ARCH=${LIBCOMPAT_MACHINE_ARCH} + # -B is needed to find /usr/lib32/crti.o for GCC and /usr/libsoft/crti.o for # Clang/GCC. LIBCOMPATCFLAGS+= -B${LIBCOMPATTMP}/usr/lib${libcompat} @@ -139,6 +155,9 @@ LIBCOMPATCFLAGS+= -B${LIBCOMPATTMP}/usr/lib${libcompat} LIBDIR_BASE:= /usr/lib${libcompat} _LIB_OBJTOP= ${LIBCOMPAT_OBJTOP} CFLAGS+= ${LIBCOMPATCFLAGS} +LDFLAGS+= ${CFLAGS} ${LIBCOMPATLDFLAGS} +MACHINE= ${LIBCOMPAT_MACHINE} +MACHINE_ARCH= ${LIBCOMPAT_MACHINE_ARCH} .endif .endif diff --git a/share/mk/src.opts.mk b/share/mk/src.opts.mk index 171676dd52d3..d1558df0f6c4 100644 --- a/share/mk/src.opts.mk +++ b/share/mk/src.opts.mk @@ -126,7 +126,6 @@ __DEFAULT_YES_OPTIONS = \ LDNS \ LDNS_UTILS \ LEGACY_CONSOLE \ - LIB32 \ LIBPTHREAD \ LIBTHR \ LLVM_COV \ @@ -358,6 +357,13 @@ __DEFAULT_NO_OPTIONS+=GDB_LIBEXEC .else __DEFAULT_YES_OPTIONS+=GDB_LIBEXEC .endif +# LIB32 is supported on amd64, mips64, and powerpc64 +.if (${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH:Mmips64*} || \ + ${MACHINE_ARCH} == "powerpc64") +__DEFAULT_YES_OPTIONS+=LIB32 +.else +BROKEN_OPTIONS+=LIB32 +.endif # Only doing soft float API stuff on armv6 and armv7 .if ${__T} != "armv6" && ${__T} != "armv7" BROKEN_OPTIONS+=LIBSOFT |