1bbcf7eddSBrooks Davis# $FreeBSD$ 2bbcf7eddSBrooks Davis 3bbcf7eddSBrooks Davis.if !targets(__<${_this:T}>__) 4bbcf7eddSBrooks Davis__<${_this:T}>__: 5bbcf7eddSBrooks Davis 6c09aa214SBrooks Davis.if defined(_LIBCOMPAT) 7c09aa214SBrooks DavisCOMPAT_ARCH= ${TARGET_ARCH} 8c09aa214SBrooks DavisCOMPAT_CPUTYPE= ${TARGET_CPUTYPE} 9a4330302SBrooks Davis.if (defined(WANT_COMPILER_TYPE) && ${WANT_COMPILER_TYPE} == gcc) || \ 10a4330302SBrooks Davis (defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc) 11a4330302SBrooks DavisCOMPAT_COMPILER_TYPE= gcc 12a4330302SBrooks Davis.else 13a4330302SBrooks DavisCOMPAT_COMPILER_TYPE= clang 14a4330302SBrooks Davis.endif 15c09aa214SBrooks Davis.else 16c09aa214SBrooks DavisCOMPAT_ARCH= ${MACHINE_ARCH} 17c09aa214SBrooks DavisCOMPAT_CPUTYPE= ${CPUTYPE} 18a4330302SBrooks Davis.include <bsd.compiler.mk> 19a4330302SBrooks DavisCOMPAT_COMPILER_TYPE=${COMPILER_TYPE} 20c09aa214SBrooks Davis.endif 21c09aa214SBrooks Davis 22bbcf7eddSBrooks Davis# ------------------------------------------------------------------- 23bbcf7eddSBrooks Davis# 32 bit world 24c09aa214SBrooks Davis.if ${COMPAT_ARCH} == "amd64" 256b53d510SBrooks DavisHAS_COMPAT=32 26c09aa214SBrooks Davis.if empty(COMPAT_CPUTYPE) 27bbcf7eddSBrooks DavisLIB32CPUFLAGS= -march=i686 -mmmx -msse -msse2 28bbcf7eddSBrooks Davis.else 29c09aa214SBrooks DavisLIB32CPUFLAGS= -march=${COMPAT_CPUTYPE} 30bbcf7eddSBrooks Davis.endif 31a4330302SBrooks Davis.if ${COMPAT_COMPILER_TYPE} == gcc 32bbcf7eddSBrooks Davis.else 33bbcf7eddSBrooks DavisLIB32CPUFLAGS+= -target x86_64-unknown-freebsd13.0 34bbcf7eddSBrooks Davis.endif 35bbcf7eddSBrooks DavisLIB32CPUFLAGS+= -m32 36a4330302SBrooks DavisLIB32_MACHINE= i386 37a4330302SBrooks DavisLIB32_MACHINE_ARCH= i386 38a4330302SBrooks DavisLIB32WMAKEENV= MACHINE_CPU="i686 mmx sse sse2" 39bbcf7eddSBrooks DavisLIB32WMAKEFLAGS= \ 40bbcf7eddSBrooks Davis AS="${XAS} --32" \ 41bbcf7eddSBrooks Davis LD="${XLD} -m elf_i386_fbsd -L${LIBCOMPATTMP}/usr/lib32" 42bbcf7eddSBrooks Davis 43c09aa214SBrooks Davis.elif ${COMPAT_ARCH} == "powerpc64" 446b53d510SBrooks DavisHAS_COMPAT=32 45c09aa214SBrooks Davis.if empty(COMPAT_CPUTYPE) 46bbcf7eddSBrooks DavisLIB32CPUFLAGS= -mcpu=powerpc 47bbcf7eddSBrooks Davis.else 48c09aa214SBrooks DavisLIB32CPUFLAGS= -mcpu=${COMPAT_CPUTYPE} 49bbcf7eddSBrooks Davis.endif 50*b451cd45SJustin Hibbits 51*b451cd45SJustin Hibbits.if ${COMPAT_COMPILER_TYPE} == "gcc" 52bbcf7eddSBrooks DavisLIB32CPUFLAGS+= -m32 53*b451cd45SJustin Hibbits.else 54*b451cd45SJustin HibbitsLIB32CPUFLAGS+= -target powerpc-unknown-freebsd13.0 55*b451cd45SJustin Hibbits 56*b451cd45SJustin Hibbits# Use BFD to workaround ld.lld issues on PowerPC 32 bit 57*b451cd45SJustin HibbitsLIB32CPUFLAGS+= -fuse-ld=${LD_BFD} 58*b451cd45SJustin Hibbits.endif 59*b451cd45SJustin Hibbits 60a4330302SBrooks DavisLIB32_MACHINE= powerpc 61a4330302SBrooks DavisLIB32_MACHINE_ARCH= powerpc 62bbcf7eddSBrooks DavisLIB32WMAKEFLAGS= \ 63*b451cd45SJustin Hibbits LD="${LD_BFD} -m elf32ppc_fbsd" 64bbcf7eddSBrooks Davis 65c09aa214SBrooks Davis.elif ${COMPAT_ARCH:Mmips64*} != "" 666b53d510SBrooks DavisHAS_COMPAT=32 67a4330302SBrooks Davis.if ${COMPAT_COMPILER_TYPE} == gcc 68c09aa214SBrooks Davis.if empty(COMPAT_CPUTYPE) 69bbcf7eddSBrooks DavisLIB32CPUFLAGS= -march=mips3 70bbcf7eddSBrooks Davis.else 71c09aa214SBrooks DavisLIB32CPUFLAGS= -march=${COMPAT_CPUTYPE} 72bbcf7eddSBrooks Davis.endif 73bbcf7eddSBrooks Davis.else 74c09aa214SBrooks Davis.if ${COMPAT_ARCH:Mmips64el*} != "" 75bbcf7eddSBrooks DavisLIB32CPUFLAGS= -target mipsel-unknown-freebsd13.0 76bbcf7eddSBrooks Davis.else 77bbcf7eddSBrooks DavisLIB32CPUFLAGS= -target mips-unknown-freebsd13.0 78bbcf7eddSBrooks Davis.endif 79bbcf7eddSBrooks Davis.endif 80bbcf7eddSBrooks DavisLIB32CPUFLAGS+= -mabi=32 81a4330302SBrooks DavisLIB32_MACHINE= mips 82a4330302SBrooks DavisLIB32_MACHINE_ARCH= mips 83c09aa214SBrooks Davis.if ${COMPAT_ARCH:Mmips64el*} != "" 84a4330302SBrooks Davis_EMULATION= elf32ltsmip_fbsd 85bbcf7eddSBrooks Davis.else 86a4330302SBrooks Davis_EMULATION= elf32btsmip_fbsd 87bbcf7eddSBrooks Davis.endif 88a4330302SBrooks DavisLIB32WMAKEFLAGS= LD="${XLD} -m ${_EMULATION}" 89a4330302SBrooks DavisLIB32LDFLAGS= -Wl,-m${_EMULATION} 90bbcf7eddSBrooks Davis.endif 91bbcf7eddSBrooks Davis 92bbcf7eddSBrooks DavisLIB32WMAKEFLAGS+= NM="${XNM}" 93bbcf7eddSBrooks DavisLIB32WMAKEFLAGS+= OBJCOPY="${XOBJCOPY}" 94bbcf7eddSBrooks Davis 95bbcf7eddSBrooks DavisLIB32CFLAGS= -DCOMPAT_32BIT 96bbcf7eddSBrooks DavisLIB32DTRACE= ${DTRACE} -32 97bbcf7eddSBrooks DavisLIB32WMAKEFLAGS+= -DCOMPAT_32BIT 98bbcf7eddSBrooks Davis 99bbcf7eddSBrooks Davis# ------------------------------------------------------------------- 100bbcf7eddSBrooks Davis# soft-fp world 101c09aa214SBrooks Davis.if ${COMPAT_ARCH:Marmv[67]*} != "" 1026b53d510SBrooks DavisHAS_COMPAT=SOFT 103bbcf7eddSBrooks DavisLIBSOFTCFLAGS= -DCOMPAT_SOFTFP 104bbcf7eddSBrooks DavisLIBSOFTCPUFLAGS= -mfloat-abi=softfp 105a4330302SBrooks DavisLIBSOFT_MACHINE= arm 106a4330302SBrooks DavisLIBSOFT_MACHINE_ARCH= ${COMPAT_ARCH} 107a4330302SBrooks DavisLIBSOFTWMAKEENV= CPUTYPE=soft 108bbcf7eddSBrooks DavisLIBSOFTWMAKEFLAGS= -DCOMPAT_SOFTFP 109bbcf7eddSBrooks Davis.endif 110bbcf7eddSBrooks Davis 1116b53d510SBrooks Davis# ------------------------------------------------------------------- 1126b53d510SBrooks Davis# In the program linking case, select LIBCOMPAT 1136b53d510SBrooks Davis.if defined(NEED_COMPAT) 1146b53d510SBrooks Davis.ifndef HAS_COMPAT 11597671666SBrooks Davis.warning NEED_COMPAT defined, but no LIBCOMPAT is available (COMPAT_ARCH == ${COMPAT_ARCH} 1166b53d510SBrooks Davis.elif !${HAS_COMPAT:M${NEED_COMPAT}} && ${NEED_COMPAT} != "any" 1176b53d510SBrooks Davis.error NEED_COMPAT (${NEED_COMPAT}) defined, but not in HAS_COMPAT ($HAS_COMPAT) 1186b53d510SBrooks Davis.elif ${NEED_COMPAT} == "any" 1196b53d510SBrooks Davis.endif 1206b53d510SBrooks Davis.ifdef WANT_COMPAT 1216b53d510SBrooks Davis.error Both WANT_COMPAT and NEED_COMPAT defined 1226b53d510SBrooks Davis.endif 1236b53d510SBrooks DavisWANT_COMPAT:= ${NEED_COMPAT} 1246b53d510SBrooks Davis.endif 1256b53d510SBrooks Davis 1266b53d510SBrooks Davis.if defined(HAS_COMPAT) && defined(WANT_COMPAT) 1276b53d510SBrooks Davis.if ${WANT_COMPAT} == "any" 1286b53d510SBrooks Davis_LIBCOMPAT:= ${HAS_COMPAT:[1]} 1296b53d510SBrooks Davis.else 1306b53d510SBrooks Davis_LIBCOMPAT:= ${WANT_COMPAT} 1316b53d510SBrooks Davis.endif 1326b53d510SBrooks Davis.endif 1336b53d510SBrooks Davis 134bbcf7eddSBrooks Davis 135bbcf7eddSBrooks Davis# ------------------------------------------------------------------- 136bbcf7eddSBrooks Davis# Generic code for each type. 137bbcf7eddSBrooks Davis# Set defaults based on type. 138ad2dd70bSBrooks Davislibcompat= ${_LIBCOMPAT:tl} 139a4330302SBrooks Davis_LIBCOMPAT_MAKEVARS= _OBJTOP TMP CPUFLAGS CFLAGS CXXFLAGS LDFLAGS \ 140a4330302SBrooks Davis _MACHINE _MACHINE_ARCH WMAKEENV WMAKEFLAGS WMAKE 141bbcf7eddSBrooks Davis.for _var in ${_LIBCOMPAT_MAKEVARS} 142ad2dd70bSBrooks Davis.if !empty(LIB${_LIBCOMPAT}${_var}) 143ad2dd70bSBrooks DavisLIBCOMPAT${_var}?= ${LIB${_LIBCOMPAT}${_var}} 144bbcf7eddSBrooks Davis.endif 145bbcf7eddSBrooks Davis.endfor 146bbcf7eddSBrooks Davis 147bbcf7eddSBrooks Davis# Shared flags 148bbcf7eddSBrooks DavisLIBCOMPAT_OBJTOP?= ${OBJTOP}/obj-lib${libcompat} 149bbcf7eddSBrooks DavisLIBCOMPATTMP?= ${LIBCOMPAT_OBJTOP}/tmp 150bbcf7eddSBrooks Davis 151bbcf7eddSBrooks DavisLIBCOMPATCFLAGS+= ${LIBCOMPATCPUFLAGS} \ 152bbcf7eddSBrooks Davis -L${LIBCOMPATTMP}/usr/lib${libcompat} \ 153bbcf7eddSBrooks Davis --sysroot=${LIBCOMPATTMP} \ 154bbcf7eddSBrooks Davis ${BFLAGS} 155bbcf7eddSBrooks Davis 156a4330302SBrooks DavisLIBCOMPATWMAKEENV+= MACHINE=${LIBCOMPAT_MACHINE} 157a4330302SBrooks DavisLIBCOMPATWMAKEENV+= MACHINE_ARCH=${LIBCOMPAT_MACHINE_ARCH} 158a4330302SBrooks Davis 159bbcf7eddSBrooks Davis# -B is needed to find /usr/lib32/crti.o for GCC and /usr/libsoft/crti.o for 160bbcf7eddSBrooks Davis# Clang/GCC. 161bbcf7eddSBrooks DavisLIBCOMPATCFLAGS+= -B${LIBCOMPATTMP}/usr/lib${libcompat} 162bbcf7eddSBrooks Davis 1636b53d510SBrooks Davis.if defined(WANT_COMPAT) 1646b53d510SBrooks DavisLIBDIR_BASE:= /usr/lib${libcompat} 1656b53d510SBrooks Davis_LIB_OBJTOP= ${LIBCOMPAT_OBJTOP} 1666b53d510SBrooks DavisCFLAGS+= ${LIBCOMPATCFLAGS} 167a4330302SBrooks DavisLDFLAGS+= ${CFLAGS} ${LIBCOMPATLDFLAGS} 168a4330302SBrooks DavisMACHINE= ${LIBCOMPAT_MACHINE} 169a4330302SBrooks DavisMACHINE_ARCH= ${LIBCOMPAT_MACHINE_ARCH} 1706b53d510SBrooks Davis.endif 1716b53d510SBrooks Davis 172bbcf7eddSBrooks Davis.endif 173