1 2.if !targets(__<${_this:T}>__) 3__<${_this:T}>__: .NOTMAIN 4 5.include <bsd.compat.pre.mk> 6 7.if defined(_LIBCOMPATS) 8COMPAT_ARCH?= ${TARGET_ARCH} 9.for _LIBCOMPAT in ${_ALL_LIBCOMPATS} 10LIB${_LIBCOMPAT}CPUTYPE?= ${CPUTYPE_${_LIBCOMPAT}} 11.endfor 12.if (defined(WANT_COMPILER_TYPE) && ${WANT_COMPILER_TYPE} == gcc) || \ 13 (defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc) 14COMPAT_COMPILER_TYPE= gcc 15.else 16COMPAT_COMPILER_TYPE= clang 17.endif 18.else 19COMPAT_ARCH= ${MACHINE_ARCH} 20.for _LIBCOMPAT in ${_ALL_LIBCOMPATS} 21LIB${_LIBCOMPAT}CPUTYPE= ${CPUTYPE} 22.endfor 23.endif 24 25# ------------------------------------------------------------------- 26# 32 bit world 27.if ${COMPAT_ARCH} == "amd64" 28HAS_COMPAT+= 32 29.if empty(LIB32CPUTYPE) 30LIB32CPUFLAGS= -march=i686 -mmmx -msse -msse2 31.else 32LIB32CPUFLAGS= -march=${LIB32CPUTYPE} 33.endif 34LIB32CPUFLAGS.clang+= -target x86_64-unknown-freebsd${OS_REVISION} 35LIB32CPUFLAGS+= -m32 36LIB32_MACHINE= i386 37LIB32_MACHINE_ARCH= i386 38LIB32WMAKEENV= MACHINE_CPU="i686 mmx sse sse2" 39LIB32WMAKEFLAGS= \ 40 LD="${XLD} -m elf_i386_fbsd" 41 42.elif ${COMPAT_ARCH} == "powerpc64" 43HAS_COMPAT+= 32 44.if empty(LIB32CPUTYPE) 45LIB32CPUFLAGS= -mcpu=powerpc 46.else 47LIB32CPUFLAGS= -mcpu=${LIB32CPUTYPE} 48.endif 49 50LIB32CPUFLAGS.gcc+= -m32 51LIB32CPUFLAGS.clang+= -target powerpc-unknown-freebsd${OS_REVISION} 52 53LIB32_MACHINE= powerpc 54LIB32_MACHINE_ARCH= powerpc 55LIB32WMAKEFLAGS= \ 56 LD="${XLD} -m elf32ppc_fbsd" 57 58.elif ${COMPAT_ARCH} == "aarch64" 59HAS_COMPAT+= 32 60.if empty(LIB32CPUTYPE) 61LIB32CPUFLAGS= -march=armv7 62.else 63LIB32CPUFLAGS= -mcpu=${LIB32CPUTYPE} 64.endif 65 66LIB32CPUFLAGS+= -m32 67LIB32CPUFLAGS.clang+= -target armv7-unknown-freebsd${OS_REVISION}-gnueabihf 68 69LIB32_MACHINE= arm 70LIB32_MACHINE_ARCH= armv7 71LIB32WMAKEFLAGS= \ 72 LD="${XLD} -m armelf_fbsd" 73.endif 74 75LIB32WMAKEFLAGS+= NM="${XNM}" 76LIB32WMAKEFLAGS+= OBJCOPY="${XOBJCOPY}" 77LIB32WMAKEFLAGS+= STRIPBIN="${XSTRIPBIN}" 78 79LIB32DTRACE= ${DTRACE} -32 80LIB32_MACHINE_ABI= ${MACHINE_ABI:N*64} long32 ptr32 81.if ${COMPAT_ARCH} == "amd64" 82LIB32_MACHINE_ABI+= time32 83.else 84LIB32_MACHINE_ABI+= time64 85.endif 86 87# ------------------------------------------------------------------- 88# In the program linking case, select LIBCOMPAT 89.if defined(NEED_COMPAT) 90.ifndef HAS_COMPAT 91.warning NEED_COMPAT defined, but no LIBCOMPAT is available (COMPAT_ARCH == ${COMPAT_ARCH}) 92.elif !${HAS_COMPAT:M${NEED_COMPAT}} && ${NEED_COMPAT} != "any" 93.error NEED_COMPAT (${NEED_COMPAT}) defined, but not in HAS_COMPAT (${HAS_COMPAT}) 94.elif ${NEED_COMPAT} == "any" 95.endif 96.ifdef WANT_COMPAT 97.error Both WANT_COMPAT and NEED_COMPAT defined 98.endif 99WANT_COMPAT:= ${NEED_COMPAT} 100.endif 101 102.if defined(HAS_COMPAT) && defined(WANT_COMPAT) 103.if ${WANT_COMPAT} == "any" 104USE_COMPAT:= ${HAS_COMPAT:[1]} 105.else 106USE_COMPAT:= ${WANT_COMPAT} 107.endif 108 109_LIBCOMPATS= ${USE_COMPAT} 110.endif 111 112libcompats= ${_LIBCOMPATS:tl} 113 114# Update MACHINE and MACHINE_ARCH so they can be used in bsd.opts.mk via 115# bsd.compiler.mk 116.if defined(USE_COMPAT) 117_LIBCOMPAT_MAKEVARS= _MACHINE _MACHINE_ARCH 118.for _var in ${_LIBCOMPAT_MAKEVARS} 119.if !empty(LIB${USE_COMPAT}${_var}) 120LIBCOMPAT${_var}?= ${LIB${USE_COMPAT}${_var}} 121.endif 122.endfor 123 124MACHINE= ${LIBCOMPAT_MACHINE} 125MACHINE_ARCH= ${LIBCOMPAT_MACHINE_ARCH} 126.endif 127 128.if !defined(COMPAT_COMPILER_TYPE) 129.include <bsd.compiler.mk> 130COMPAT_COMPILER_TYPE=${COMPILER_TYPE} 131.endif 132 133# ------------------------------------------------------------------- 134# Generic code for each type. 135# Set defaults based on type. 136.for _LIBCOMPAT _libcompat in ${_LIBCOMPATS:@v@${v} ${v:tl}@} 137WORLDTMP?= ${SYSROOT} 138 139# Shared flags 140LIB${_LIBCOMPAT}_OBJTOP?= ${OBJTOP}/obj-lib${_libcompat} 141 142LIB${_LIBCOMPAT}CFLAGS+= ${LIB${_LIBCOMPAT}CPUFLAGS} \ 143 ${LIB${_LIBCOMPAT}CPUFLAGS.${COMPAT_COMPILER_TYPE}} \ 144 -DCOMPAT_LIBCOMPAT=\"${_LIBCOMPAT}\" \ 145 -DCOMPAT_libcompat=\"${_libcompat}\" \ 146 -DCOMPAT_LIB${_LIBCOMPAT} \ 147 --sysroot=${WORLDTMP} \ 148 ${BFLAGS} 149 150LIB${_LIBCOMPAT}LDFLAGS+= -L${WORLDTMP}/usr/lib${_libcompat} 151 152LIB${_LIBCOMPAT}WMAKEFLAGS+= COMPAT_LIBCOMPAT=${_LIBCOMPAT} \ 153 COMPAT_libcompat=${_libcompat} 154 155LIB${_LIBCOMPAT}WMAKEENV+= MACHINE=${LIB${_LIBCOMPAT}_MACHINE} 156LIB${_LIBCOMPAT}WMAKEENV+= MACHINE_ARCH=${LIB${_LIBCOMPAT}_MACHINE_ARCH} 157 158# -B is needed to find /usr/lib32/crti.o for gcc. 159LIB${_LIBCOMPAT}CFLAGS+= -B${WORLDTMP}/usr/lib${_libcompat} 160.endfor 161 162.if defined(USE_COMPAT) 163LIB${USE_COMPAT}CPUFLAGS+= ${LIB${USE_COMPAT}CPUFLAGS.${COMPAT_COMPILER_TYPE}} 164 165libcompat= ${USE_COMPAT:tl} 166 167_LIBCOMPAT_MAKEVARS= _OBJTOP TMP CPUFLAGS CFLAGS CXXFLAGS LDFLAGS \ 168 _MACHINE_ABI \ 169 WMAKEENV WMAKEFLAGS WMAKE WORLDTMP 170.for _var in ${_LIBCOMPAT_MAKEVARS} 171.if !empty(LIB${USE_COMPAT}${_var}) 172LIBCOMPAT${_var}?= ${LIB${USE_COMPAT}${_var}} 173.endif 174.endfor 175 176LIBDIR_BASE:= /usr/lib${libcompat} 177LIBDATADIR:= /usr/lib${libcompat} 178_LIB_OBJTOP= ${LIBCOMPAT_OBJTOP} 179CFLAGS+= ${LIBCOMPATCFLAGS} 180LDFLAGS+= ${CFLAGS} ${LIBCOMPATLDFLAGS} 181.endif 182 183.endif 184