1# $FreeBSD$ 2 3.if !targets(__<${_this:T}>__) 4__<${_this:T}>__: 5 6.if defined(_LIBCOMPAT) 7COMPAT_ARCH= ${TARGET_ARCH} 8COMPAT_CPUTYPE= ${TARGET_CPUTYPE} 9.else 10COMPAT_ARCH= ${MACHINE_ARCH} 11COMPAT_CPUTYPE= ${CPUTYPE} 12.endif 13 14# ------------------------------------------------------------------- 15# 32 bit world 16.if ${COMPAT_ARCH} == "amd64" 17HAS_COMPAT=32 18.if empty(COMPAT_CPUTYPE) 19LIB32CPUFLAGS= -march=i686 -mmmx -msse -msse2 20.else 21LIB32CPUFLAGS= -march=${COMPAT_CPUTYPE} 22.endif 23.if (defined(WANT_COMPILER_TYPE) && ${WANT_COMPILER_TYPE} == gcc) || \ 24 (defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc) 25.else 26LIB32CPUFLAGS+= -target x86_64-unknown-freebsd13.0 27.endif 28LIB32CPUFLAGS+= -m32 29LIB32_MACHINE= i386 30LIB32_MACHINE_ARCH= i386 31LIB32WMAKEENV= MACHINE_CPU="i686 mmx sse sse2" 32LIB32WMAKEFLAGS= \ 33 AS="${XAS} --32" \ 34 LD="${XLD} -m elf_i386_fbsd -L${LIBCOMPATTMP}/usr/lib32" 35 36.elif ${COMPAT_ARCH} == "powerpc64" 37HAS_COMPAT=32 38.if empty(COMPAT_CPUTYPE) 39LIB32CPUFLAGS= -mcpu=powerpc 40.else 41LIB32CPUFLAGS= -mcpu=${COMPAT_CPUTYPE} 42.endif 43LIB32CPUFLAGS+= -m32 44LIB32_MACHINE= powerpc 45LIB32_MACHINE_ARCH= powerpc 46LIB32WMAKEFLAGS= \ 47 LD="${XLD} -m elf32ppc_fbsd" 48 49.elif ${COMPAT_ARCH:Mmips64*} != "" 50HAS_COMPAT=32 51.if (defined(WANT_COMPILER_TYPE) && ${WANT_COMPILER_TYPE} == gcc) || \ 52 (defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc) 53.if empty(COMPAT_CPUTYPE) 54LIB32CPUFLAGS= -march=mips3 55.else 56LIB32CPUFLAGS= -march=${COMPAT_CPUTYPE} 57.endif 58.else 59.if ${COMPAT_ARCH:Mmips64el*} != "" 60LIB32CPUFLAGS= -target mipsel-unknown-freebsd13.0 61.else 62LIB32CPUFLAGS= -target mips-unknown-freebsd13.0 63.endif 64.endif 65LIB32CPUFLAGS+= -mabi=32 66LIB32_MACHINE= mips 67LIB32_MACHINE_ARCH= mips 68.if ${COMPAT_ARCH:Mmips64el*} != "" 69LIB32WMAKEFLAGS= LD="${XLD} -m elf32ltsmip_fbsd" 70.else 71LIB32WMAKEFLAGS= LD="${XLD} -m elf32btsmip_fbsd" 72.endif 73.endif 74 75LIB32WMAKEFLAGS+= NM="${XNM}" 76LIB32WMAKEFLAGS+= OBJCOPY="${XOBJCOPY}" 77 78LIB32CFLAGS= -DCOMPAT_32BIT 79LIB32DTRACE= ${DTRACE} -32 80LIB32WMAKEFLAGS+= -DCOMPAT_32BIT 81 82# ------------------------------------------------------------------- 83# soft-fp world 84.if ${COMPAT_ARCH:Marmv[67]*} != "" 85HAS_COMPAT=SOFT 86LIBSOFTCFLAGS= -DCOMPAT_SOFTFP 87LIBSOFTCPUFLAGS= -mfloat-abi=softfp 88LIBSOFT_MACHINE= arm 89LIBSOFT_MACHINE_ARCH= ${COMPAT_ARCH} 90LIBSOFTWMAKEENV= CPUTYPE=soft 91LIBSOFTWMAKEFLAGS= -DCOMPAT_SOFTFP 92.endif 93 94# ------------------------------------------------------------------- 95# In the program linking case, select LIBCOMPAT 96.if defined(NEED_COMPAT) 97.ifndef HAS_COMPAT 98.error NEED_COMPAT defined, but no LIBCOMPAT is available 99.elif !${HAS_COMPAT:M${NEED_COMPAT}} && ${NEED_COMPAT} != "any" 100.error NEED_COMPAT (${NEED_COMPAT}) defined, but not in HAS_COMPAT ($HAS_COMPAT) 101.elif ${NEED_COMPAT} == "any" 102.endif 103.ifdef WANT_COMPAT 104.error Both WANT_COMPAT and NEED_COMPAT defined 105.endif 106WANT_COMPAT:= ${NEED_COMPAT} 107.endif 108 109.if defined(HAS_COMPAT) && defined(WANT_COMPAT) 110.if ${WANT_COMPAT} == "any" 111_LIBCOMPAT:= ${HAS_COMPAT:[1]} 112.else 113_LIBCOMPAT:= ${WANT_COMPAT} 114.endif 115.endif 116 117 118# ------------------------------------------------------------------- 119# Generic code for each type. 120# Set defaults based on type. 121libcompat= ${_LIBCOMPAT:tl} 122_LIBCOMPAT_MAKEVARS= _OBJTOP TMP CPUFLAGS CFLAGS CXXFLAGS \ 123 _MACHINE _MACHINE_ARCH WMAKEENV WMAKEFLAGS WMAKE 124.for _var in ${_LIBCOMPAT_MAKEVARS} 125.if !empty(LIB${_LIBCOMPAT}${_var}) 126LIBCOMPAT${_var}?= ${LIB${_LIBCOMPAT}${_var}} 127.endif 128.endfor 129 130# Shared flags 131LIBCOMPAT_OBJTOP?= ${OBJTOP}/obj-lib${libcompat} 132LIBCOMPATTMP?= ${LIBCOMPAT_OBJTOP}/tmp 133 134LIBCOMPATCFLAGS+= ${LIBCOMPATCPUFLAGS} \ 135 -L${LIBCOMPATTMP}/usr/lib${libcompat} \ 136 --sysroot=${LIBCOMPATTMP} \ 137 ${BFLAGS} 138 139LIBCOMPATWMAKEENV+= MACHINE=${LIBCOMPAT_MACHINE} 140LIBCOMPATWMAKEENV+= MACHINE_ARCH=${LIBCOMPAT_MACHINE_ARCH} 141 142# -B is needed to find /usr/lib32/crti.o for GCC and /usr/libsoft/crti.o for 143# Clang/GCC. 144LIBCOMPATCFLAGS+= -B${LIBCOMPATTMP}/usr/lib${libcompat} 145 146.if defined(WANT_COMPAT) 147LIBDIR_BASE:= /usr/lib${libcompat} 148_LIB_OBJTOP= ${LIBCOMPAT_OBJTOP} 149CFLAGS+= ${LIBCOMPATCFLAGS} 150MACHINE= ${LIBCOMPAT_MACHINE} 151MACHINE_ARCH= ${LIBCOMPAT_MACHINE_ARCH} 152.endif 153 154.endif 155