diff options
Diffstat (limited to 'share/mk/bsd.compat.mk')
-rw-r--r-- | share/mk/bsd.compat.mk | 141 |
1 files changed, 95 insertions, 46 deletions
diff --git a/share/mk/bsd.compat.mk b/share/mk/bsd.compat.mk index f7b40ce47532..c41cfda5f01c 100644 --- a/share/mk/bsd.compat.mk +++ b/share/mk/bsd.compat.mk @@ -1,11 +1,14 @@ -# $FreeBSD$ .if !targets(__<${_this:T}>__) __<${_this:T}>__: -.if defined(_LIBCOMPAT) +.include <bsd.compat.pre.mk> + +.if defined(_LIBCOMPATS) COMPAT_ARCH?= ${TARGET_ARCH} -COMPAT_CPUTYPE?= ${CPUTYPE_${_LIBCOMPAT}} +.for _LIBCOMPAT in ${_ALL_LIBCOMPATS} +LIB${_LIBCOMPAT}CPUTYPE?= ${CPUTYPE_${_LIBCOMPAT}} +.endfor .if (defined(WANT_COMPILER_TYPE) && ${WANT_COMPILER_TYPE} == gcc) || \ (defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc) COMPAT_COMPILER_TYPE= gcc @@ -14,58 +17,71 @@ COMPAT_COMPILER_TYPE= clang .endif .else COMPAT_ARCH= ${MACHINE_ARCH} -COMPAT_CPUTYPE= ${CPUTYPE} -.include <bsd.compiler.mk> -COMPAT_COMPILER_TYPE=${COMPILER_TYPE} +.for _LIBCOMPAT in ${_ALL_LIBCOMPATS} +LIB${_LIBCOMPAT}CPUTYPE= ${CPUTYPE} +.endfor .endif # ------------------------------------------------------------------- # 32 bit world .if ${COMPAT_ARCH} == "amd64" -HAS_COMPAT=32 -.if empty(COMPAT_CPUTYPE) +HAS_COMPAT+= 32 +.if empty(LIB32CPUTYPE) LIB32CPUFLAGS= -march=i686 -mmmx -msse -msse2 .else -LIB32CPUFLAGS= -march=${COMPAT_CPUTYPE} -.endif -.if ${COMPAT_COMPILER_TYPE} == gcc -.else -LIB32CPUFLAGS+= -target x86_64-unknown-freebsd${OS_REVISION} +LIB32CPUFLAGS= -march=${LIB32CPUTYPE} .endif +LIB32CPUFLAGS.clang+= -target x86_64-unknown-freebsd${OS_REVISION} LIB32CPUFLAGS+= -m32 LIB32_MACHINE= i386 LIB32_MACHINE_ARCH= i386 LIB32WMAKEENV= MACHINE_CPU="i686 mmx sse sse2" LIB32WMAKEFLAGS= \ - AS="${XAS} --32" \ LD="${XLD} -m elf_i386_fbsd" .elif ${COMPAT_ARCH} == "powerpc64" -HAS_COMPAT=32 -.if empty(COMPAT_CPUTYPE) +HAS_COMPAT+= 32 +.if empty(LIB32CPUTYPE) LIB32CPUFLAGS= -mcpu=powerpc .else -LIB32CPUFLAGS= -mcpu=${COMPAT_CPUTYPE} +LIB32CPUFLAGS= -mcpu=${LIB32CPUTYPE} .endif -.if ${COMPAT_COMPILER_TYPE} == "gcc" -LIB32CPUFLAGS+= -m32 -.else -LIB32CPUFLAGS+= -target powerpc-unknown-freebsd${OS_REVISION} -.endif +LIB32CPUFLAGS.gcc+= -m32 +LIB32CPUFLAGS.clang+= -target powerpc-unknown-freebsd${OS_REVISION} LIB32_MACHINE= powerpc LIB32_MACHINE_ARCH= powerpc LIB32WMAKEFLAGS= \ LD="${XLD} -m elf32ppc_fbsd" + +.elif ${COMPAT_ARCH} == "aarch64" +HAS_COMPAT+= 32 +.if empty(LIB32CPUTYPE) +LIB32CPUFLAGS= -march=armv7 +.else +LIB32CPUFLAGS= -mcpu=${LIB32CPUTYPE} +.endif + +LIB32CPUFLAGS+= -m32 +LIB32CPUFLAGS.clang+= -target armv7-unknown-freebsd${OS_REVISION}-gnueabihf + +LIB32_MACHINE= arm +LIB32_MACHINE_ARCH= armv7 +LIB32WMAKEFLAGS= \ + LD="${XLD} -m armelf_fbsd" .endif LIB32WMAKEFLAGS+= NM="${XNM}" LIB32WMAKEFLAGS+= OBJCOPY="${XOBJCOPY}" -LIB32CFLAGS= -DCOMPAT_32BIT LIB32DTRACE= ${DTRACE} -32 -LIB32WMAKEFLAGS+= -DCOMPAT_32BIT +LIB32_MACHINE_ABI= ${MACHINE_ABI:N*64} long32 ptr32 +.if ${COMPAT_ARCH} == "amd64" +LIB32_MACHINE_ABI+= time32 +.else +LIB32_MACHINE_ABI+= time64 +.endif # ------------------------------------------------------------------- # In the program linking case, select LIBCOMPAT @@ -84,50 +100,83 @@ WANT_COMPAT:= ${NEED_COMPAT} .if defined(HAS_COMPAT) && defined(WANT_COMPAT) .if ${WANT_COMPAT} == "any" -_LIBCOMPAT:= ${HAS_COMPAT:[1]} +USE_COMPAT:= ${HAS_COMPAT:[1]} .else -_LIBCOMPAT:= ${WANT_COMPAT} +USE_COMPAT:= ${WANT_COMPAT} .endif + +_LIBCOMPATS= ${USE_COMPAT} .endif -# ------------------------------------------------------------------- -# Generic code for each type. -# Set defaults based on type. -libcompat= ${_LIBCOMPAT:tl} -_LIBCOMPAT_MAKEVARS= _OBJTOP TMP CPUFLAGS CFLAGS CXXFLAGS LDFLAGS \ - _MACHINE _MACHINE_ARCH \ - WMAKEENV WMAKEFLAGS WMAKE WORLDTMP +libcompats= ${_LIBCOMPATS:tl} + +# Update MACHINE and MACHINE_ARCH so they can be used in bsd.opts.mk via +# bsd.compiler.mk +.if defined(USE_COMPAT) +_LIBCOMPAT_MAKEVARS= _MACHINE _MACHINE_ARCH .for _var in ${_LIBCOMPAT_MAKEVARS} -.if !empty(LIB${_LIBCOMPAT}${_var}) -LIBCOMPAT${_var}?= ${LIB${_LIBCOMPAT}${_var}} +.if !empty(LIB${USE_COMPAT}${_var}) +LIBCOMPAT${_var}?= ${LIB${USE_COMPAT}${_var}} .endif .endfor +MACHINE= ${LIBCOMPAT_MACHINE} +MACHINE_ARCH= ${LIBCOMPAT_MACHINE_ARCH} +.endif + +.if !defined(COMPAT_COMPILER_TYPE) +.include <bsd.compiler.mk> +COMPAT_COMPILER_TYPE=${COMPILER_TYPE} +.endif + +# ------------------------------------------------------------------- +# Generic code for each type. +# Set defaults based on type. +.for _LIBCOMPAT _libcompat in ${_LIBCOMPATS:@v@${v} ${v:tl}@} WORLDTMP?= ${SYSROOT} # Shared flags -LIBCOMPAT_OBJTOP?= ${OBJTOP}/obj-lib${libcompat} +LIB${_LIBCOMPAT}_OBJTOP?= ${OBJTOP}/obj-lib${_libcompat} -LIBCOMPATCFLAGS+= ${LIBCOMPATCPUFLAGS} \ - --sysroot=${WORLDTMP} \ - ${BFLAGS} +LIB${_LIBCOMPAT}CFLAGS+= ${LIB${_LIBCOMPAT}CPUFLAGS} \ + ${LIB${_LIBCOMPAT}CPUFLAGS.${COMPAT_COMPILER_TYPE}} \ + -DCOMPAT_LIBCOMPAT=\"${_LIBCOMPAT}\" \ + -DCOMPAT_libcompat=\"${_libcompat}\" \ + -DCOMPAT_LIB${_LIBCOMPAT} \ + --sysroot=${WORLDTMP} \ + ${BFLAGS} -LIBCOMPATLDFLAGS+= -L${WORLDTMP}/usr/lib${libcompat} +LIB${_LIBCOMPAT}LDFLAGS+= -L${WORLDTMP}/usr/lib${_libcompat} -LIBCOMPATWMAKEENV+= MACHINE=${LIBCOMPAT_MACHINE} -LIBCOMPATWMAKEENV+= MACHINE_ARCH=${LIBCOMPAT_MACHINE_ARCH} +LIB${_LIBCOMPAT}WMAKEFLAGS+= COMPAT_LIBCOMPAT=${_LIBCOMPAT} \ + COMPAT_libcompat=${_libcompat} + +LIB${_LIBCOMPAT}WMAKEENV+= MACHINE=${LIB${_LIBCOMPAT}_MACHINE} +LIB${_LIBCOMPAT}WMAKEENV+= MACHINE_ARCH=${LIB${_LIBCOMPAT}_MACHINE_ARCH} # -B is needed to find /usr/lib32/crti.o for gcc. -LIBCOMPATCFLAGS+= -B${WORLDTMP}/usr/lib${libcompat} +LIB${_LIBCOMPAT}CFLAGS+= -B${WORLDTMP}/usr/lib${_libcompat} +.endfor + +.if defined(USE_COMPAT) +LIB${USE_COMPAT}CPUFLAGS+= ${LIB${USE_COMPAT}CPUFLAGS.${COMPAT_COMPILER_TYPE}} + +libcompat= ${USE_COMPAT:tl} + +_LIBCOMPAT_MAKEVARS= _OBJTOP TMP CPUFLAGS CFLAGS CXXFLAGS LDFLAGS \ + _MACHINE_ABI \ + WMAKEENV WMAKEFLAGS WMAKE WORLDTMP +.for _var in ${_LIBCOMPAT_MAKEVARS} +.if !empty(LIB${USE_COMPAT}${_var}) +LIBCOMPAT${_var}?= ${LIB${USE_COMPAT}${_var}} +.endif +.endfor -.if defined(WANT_COMPAT) LIBDIR_BASE:= /usr/lib${libcompat} LIBDATADIR:= /usr/lib${libcompat} _LIB_OBJTOP= ${LIBCOMPAT_OBJTOP} CFLAGS+= ${LIBCOMPATCFLAGS} LDFLAGS+= ${CFLAGS} ${LIBCOMPATLDFLAGS} -MACHINE= ${LIBCOMPAT_MACHINE} -MACHINE_ARCH= ${LIBCOMPAT_MACHINE_ARCH} .endif .endif |