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