1bbcf7eddSBrooks Davis# $FreeBSD$ 2bbcf7eddSBrooks Davis 3bbcf7eddSBrooks Davis.if !targets(__<${_this:T}>__) 4bbcf7eddSBrooks Davis__<${_this:T}>__: 5bbcf7eddSBrooks Davis 6*c09aa214SBrooks Davis.if defined(_LIBCOMPAT) 7*c09aa214SBrooks DavisCOMPAT_ARCH= ${TARGET_ARCH} 8*c09aa214SBrooks DavisCOMPAT_CPUTYPE= ${TARGET_CPUTYPE} 9*c09aa214SBrooks Davis.else 10*c09aa214SBrooks DavisCOMPAT_ARCH= ${MACHINE_ARCH} 11*c09aa214SBrooks DavisCOMPAT_CPUTYPE= ${CPUTYPE} 12*c09aa214SBrooks Davis.endif 13*c09aa214SBrooks Davis 14bbcf7eddSBrooks Davis# ------------------------------------------------------------------- 15bbcf7eddSBrooks Davis# 32 bit world 16*c09aa214SBrooks Davis.if ${COMPAT_ARCH} == "amd64" 176b53d510SBrooks DavisHAS_COMPAT=32 18*c09aa214SBrooks Davis.if empty(COMPAT_CPUTYPE) 19bbcf7eddSBrooks DavisLIB32CPUFLAGS= -march=i686 -mmmx -msse -msse2 20bbcf7eddSBrooks Davis.else 21*c09aa214SBrooks DavisLIB32CPUFLAGS= -march=${COMPAT_CPUTYPE} 22bbcf7eddSBrooks Davis.endif 236b53d510SBrooks Davis.if (defined(WANT_COMPILER_TYPE) && ${WANT_COMPILER_TYPE} == gcc) || \ 24bbcf7eddSBrooks Davis (defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc) 25bbcf7eddSBrooks Davis.else 26bbcf7eddSBrooks DavisLIB32CPUFLAGS+= -target x86_64-unknown-freebsd13.0 27bbcf7eddSBrooks Davis.endif 28bbcf7eddSBrooks DavisLIB32CPUFLAGS+= -m32 29bbcf7eddSBrooks DavisLIB32WMAKEENV= MACHINE=i386 MACHINE_ARCH=i386 \ 30bbcf7eddSBrooks Davis MACHINE_CPU="i686 mmx sse sse2" 31bbcf7eddSBrooks DavisLIB32WMAKEFLAGS= \ 32bbcf7eddSBrooks Davis AS="${XAS} --32" \ 33bbcf7eddSBrooks Davis LD="${XLD} -m elf_i386_fbsd -L${LIBCOMPATTMP}/usr/lib32" 34bbcf7eddSBrooks Davis 35*c09aa214SBrooks Davis.elif ${COMPAT_ARCH} == "powerpc64" 366b53d510SBrooks DavisHAS_COMPAT=32 37*c09aa214SBrooks Davis.if empty(COMPAT_CPUTYPE) 38bbcf7eddSBrooks DavisLIB32CPUFLAGS= -mcpu=powerpc 39bbcf7eddSBrooks Davis.else 40*c09aa214SBrooks DavisLIB32CPUFLAGS= -mcpu=${COMPAT_CPUTYPE} 41bbcf7eddSBrooks Davis.endif 42bbcf7eddSBrooks DavisLIB32CPUFLAGS+= -m32 43bbcf7eddSBrooks DavisLIB32WMAKEENV= MACHINE=powerpc MACHINE_ARCH=powerpc 44bbcf7eddSBrooks DavisLIB32WMAKEFLAGS= \ 45bbcf7eddSBrooks Davis LD="${XLD} -m elf32ppc_fbsd" 46bbcf7eddSBrooks Davis 47*c09aa214SBrooks Davis.elif ${COMPAT_ARCH:Mmips64*} != "" 486b53d510SBrooks DavisHAS_COMPAT=32 495626bc0aSBrooks Davis.if (defined(WANT_COMPILER_TYPE) && ${WANT_COMPILER_TYPE} == gcc) || \ 50bbcf7eddSBrooks Davis (defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc) 51*c09aa214SBrooks Davis.if empty(COMPAT_CPUTYPE) 52bbcf7eddSBrooks DavisLIB32CPUFLAGS= -march=mips3 53bbcf7eddSBrooks Davis.else 54*c09aa214SBrooks DavisLIB32CPUFLAGS= -march=${COMPAT_CPUTYPE} 55bbcf7eddSBrooks Davis.endif 56bbcf7eddSBrooks Davis.else 57*c09aa214SBrooks Davis.if ${COMPAT_ARCH:Mmips64el*} != "" 58bbcf7eddSBrooks DavisLIB32CPUFLAGS= -target mipsel-unknown-freebsd13.0 59bbcf7eddSBrooks Davis.else 60bbcf7eddSBrooks DavisLIB32CPUFLAGS= -target mips-unknown-freebsd13.0 61bbcf7eddSBrooks Davis.endif 62bbcf7eddSBrooks Davis.endif 63bbcf7eddSBrooks DavisLIB32CPUFLAGS+= -mabi=32 64bbcf7eddSBrooks DavisLIB32WMAKEENV= MACHINE=mips MACHINE_ARCH=mips 65*c09aa214SBrooks Davis.if ${COMPAT_ARCH:Mmips64el*} != "" 66bbcf7eddSBrooks DavisLIB32WMAKEFLAGS= LD="${XLD} -m elf32ltsmip_fbsd" 67bbcf7eddSBrooks Davis.else 68bbcf7eddSBrooks DavisLIB32WMAKEFLAGS= LD="${XLD} -m elf32btsmip_fbsd" 69bbcf7eddSBrooks Davis.endif 70bbcf7eddSBrooks Davis.endif 71bbcf7eddSBrooks Davis 72bbcf7eddSBrooks DavisLIB32WMAKEFLAGS+= NM="${XNM}" 73bbcf7eddSBrooks DavisLIB32WMAKEFLAGS+= OBJCOPY="${XOBJCOPY}" 74bbcf7eddSBrooks Davis 75bbcf7eddSBrooks DavisLIB32CFLAGS= -DCOMPAT_32BIT 76bbcf7eddSBrooks DavisLIB32DTRACE= ${DTRACE} -32 77bbcf7eddSBrooks DavisLIB32WMAKEFLAGS+= -DCOMPAT_32BIT 78bbcf7eddSBrooks Davis 79bbcf7eddSBrooks Davis# ------------------------------------------------------------------- 80bbcf7eddSBrooks Davis# soft-fp world 81*c09aa214SBrooks Davis.if ${COMPAT_ARCH:Marmv[67]*} != "" 826b53d510SBrooks DavisHAS_COMPAT=SOFT 83bbcf7eddSBrooks DavisLIBSOFTCFLAGS= -DCOMPAT_SOFTFP 84bbcf7eddSBrooks DavisLIBSOFTCPUFLAGS= -mfloat-abi=softfp 85*c09aa214SBrooks DavisLIBSOFTWMAKEENV= CPUTYPE=soft MACHINE=arm MACHINE_ARCH=${COMPAT_ARCH} 86bbcf7eddSBrooks DavisLIBSOFTWMAKEFLAGS= -DCOMPAT_SOFTFP 87bbcf7eddSBrooks Davis.endif 88bbcf7eddSBrooks Davis 896b53d510SBrooks Davis# ------------------------------------------------------------------- 906b53d510SBrooks Davis# In the program linking case, select LIBCOMPAT 916b53d510SBrooks Davis.if defined(NEED_COMPAT) 926b53d510SBrooks Davis.ifndef HAS_COMPAT 936b53d510SBrooks Davis.error NEED_COMPAT defined, but no LIBCOMPAT is available 946b53d510SBrooks Davis.elif !${HAS_COMPAT:M${NEED_COMPAT}} && ${NEED_COMPAT} != "any" 956b53d510SBrooks Davis.error NEED_COMPAT (${NEED_COMPAT}) defined, but not in HAS_COMPAT ($HAS_COMPAT) 966b53d510SBrooks Davis.elif ${NEED_COMPAT} == "any" 976b53d510SBrooks Davis.endif 986b53d510SBrooks Davis.ifdef WANT_COMPAT 996b53d510SBrooks Davis.error Both WANT_COMPAT and NEED_COMPAT defined 1006b53d510SBrooks Davis.endif 1016b53d510SBrooks DavisWANT_COMPAT:= ${NEED_COMPAT} 1026b53d510SBrooks Davis.endif 1036b53d510SBrooks Davis 1046b53d510SBrooks Davis.if defined(HAS_COMPAT) && defined(WANT_COMPAT) 1056b53d510SBrooks Davis.if ${WANT_COMPAT} == "any" 1066b53d510SBrooks Davis_LIBCOMPAT:= ${HAS_COMPAT:[1]} 1076b53d510SBrooks Davis.else 1086b53d510SBrooks Davis_LIBCOMPAT:= ${WANT_COMPAT} 1096b53d510SBrooks Davis.endif 1106b53d510SBrooks Davis.endif 1116b53d510SBrooks Davis 112bbcf7eddSBrooks Davis 113bbcf7eddSBrooks Davis# ------------------------------------------------------------------- 114bbcf7eddSBrooks Davis# Generic code for each type. 115bbcf7eddSBrooks Davis# Set defaults based on type. 116ad2dd70bSBrooks Davislibcompat= ${_LIBCOMPAT:tl} 117bbcf7eddSBrooks Davis_LIBCOMPAT_MAKEVARS= _OBJTOP TMP CPUFLAGS CFLAGS CXXFLAGS WMAKEENV \ 118bbcf7eddSBrooks Davis WMAKEFLAGS WMAKE 119bbcf7eddSBrooks Davis.for _var in ${_LIBCOMPAT_MAKEVARS} 120ad2dd70bSBrooks Davis.if !empty(LIB${_LIBCOMPAT}${_var}) 121ad2dd70bSBrooks DavisLIBCOMPAT${_var}?= ${LIB${_LIBCOMPAT}${_var}} 122bbcf7eddSBrooks Davis.endif 123bbcf7eddSBrooks Davis.endfor 124bbcf7eddSBrooks Davis 125bbcf7eddSBrooks Davis# Shared flags 126bbcf7eddSBrooks DavisLIBCOMPAT_OBJTOP?= ${OBJTOP}/obj-lib${libcompat} 127bbcf7eddSBrooks DavisLIBCOMPATTMP?= ${LIBCOMPAT_OBJTOP}/tmp 128bbcf7eddSBrooks Davis 129bbcf7eddSBrooks DavisLIBCOMPATCFLAGS+= ${LIBCOMPATCPUFLAGS} \ 130bbcf7eddSBrooks Davis -L${LIBCOMPATTMP}/usr/lib${libcompat} \ 131bbcf7eddSBrooks Davis --sysroot=${LIBCOMPATTMP} \ 132bbcf7eddSBrooks Davis ${BFLAGS} 133bbcf7eddSBrooks Davis 134bbcf7eddSBrooks Davis# -B is needed to find /usr/lib32/crti.o for GCC and /usr/libsoft/crti.o for 135bbcf7eddSBrooks Davis# Clang/GCC. 136bbcf7eddSBrooks DavisLIBCOMPATCFLAGS+= -B${LIBCOMPATTMP}/usr/lib${libcompat} 137bbcf7eddSBrooks Davis 1386b53d510SBrooks Davis.if defined(WANT_COMPAT) 1396b53d510SBrooks DavisLIBDIR_BASE:= /usr/lib${libcompat} 1406b53d510SBrooks Davis_LIB_OBJTOP= ${LIBCOMPAT_OBJTOP} 1416b53d510SBrooks DavisCFLAGS+= ${LIBCOMPATCFLAGS} 1426b53d510SBrooks Davis.endif 1436b53d510SBrooks Davis 144bbcf7eddSBrooks Davis.endif 145