3 .if !targets(__<${_this:T}>__)
6 .if defined(_LIBCOMPAT)
7 COMPAT_ARCH?= ${TARGET_ARCH}
8 COMPAT_CPUTYPE?= ${CPUTYPE_${_LIBCOMPAT}}
9 .if (defined(WANT_COMPILER_TYPE) && ${WANT_COMPILER_TYPE} == gcc) || \
10 (defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc)
11 COMPAT_COMPILER_TYPE= gcc
13 COMPAT_COMPILER_TYPE= clang
16 COMPAT_ARCH= ${MACHINE_ARCH}
17 COMPAT_CPUTYPE= ${CPUTYPE}
18 .include <bsd.compiler.mk>
19 COMPAT_COMPILER_TYPE=${COMPILER_TYPE}
22 # -------------------------------------------------------------------
24 .if ${COMPAT_ARCH} == "amd64"
26 .if empty(COMPAT_CPUTYPE)
27 LIB32CPUFLAGS= -march=i686 -mmmx -msse -msse2
29 LIB32CPUFLAGS= -march=${COMPAT_CPUTYPE}
31 .if ${COMPAT_COMPILER_TYPE} == gcc
33 LIB32CPUFLAGS+= -target x86_64-unknown-freebsd14.0
37 LIB32_MACHINE_ARCH= i386
38 LIB32WMAKEENV= MACHINE_CPU="i686 mmx sse sse2"
41 LD="${XLD} -m elf_i386_fbsd"
43 .elif ${COMPAT_ARCH} == "powerpc64"
45 .if empty(COMPAT_CPUTYPE)
46 LIB32CPUFLAGS= -mcpu=powerpc
48 LIB32CPUFLAGS= -mcpu=${COMPAT_CPUTYPE}
51 .if ${COMPAT_COMPILER_TYPE} == "gcc"
54 LIB32CPUFLAGS+= -target powerpc-unknown-freebsd14.0
57 LIB32_MACHINE= powerpc
58 LIB32_MACHINE_ARCH= powerpc
60 LD="${XLD} -m elf32ppc_fbsd"
63 LIB32WMAKEFLAGS+= NM="${XNM}"
64 LIB32WMAKEFLAGS+= OBJCOPY="${XOBJCOPY}"
66 LIB32CFLAGS= -DCOMPAT_32BIT
67 LIB32DTRACE= ${DTRACE} -32
68 LIB32WMAKEFLAGS+= -DCOMPAT_32BIT
70 # -------------------------------------------------------------------
71 # In the program linking case, select LIBCOMPAT
72 .if defined(NEED_COMPAT)
74 .warning NEED_COMPAT defined, but no LIBCOMPAT is available (COMPAT_ARCH == ${COMPAT_ARCH})
75 .elif !${HAS_COMPAT:M${NEED_COMPAT}} && ${NEED_COMPAT} != "any"
76 .error NEED_COMPAT (${NEED_COMPAT}) defined, but not in HAS_COMPAT (${HAS_COMPAT})
77 .elif ${NEED_COMPAT} == "any"
80 .error Both WANT_COMPAT and NEED_COMPAT defined
82 WANT_COMPAT:= ${NEED_COMPAT}
85 .if defined(HAS_COMPAT) && defined(WANT_COMPAT)
86 .if ${WANT_COMPAT} == "any"
87 _LIBCOMPAT:= ${HAS_COMPAT:[1]}
89 _LIBCOMPAT:= ${WANT_COMPAT}
93 # -------------------------------------------------------------------
94 # Generic code for each type.
95 # Set defaults based on type.
96 libcompat= ${_LIBCOMPAT:tl}
97 _LIBCOMPAT_MAKEVARS= _OBJTOP TMP CPUFLAGS CFLAGS CXXFLAGS LDFLAGS \
98 _MACHINE _MACHINE_ARCH WMAKEENV WMAKEFLAGS WMAKE
99 .for _var in ${_LIBCOMPAT_MAKEVARS}
100 .if !empty(LIB${_LIBCOMPAT}${_var})
101 LIBCOMPAT${_var}?= ${LIB${_LIBCOMPAT}${_var}}
106 LIBCOMPAT_OBJTOP?= ${OBJTOP}/obj-lib${libcompat}
107 LIBCOMPATTMP?= ${LIBCOMPAT_OBJTOP}/tmp
109 LIBCOMPATCFLAGS+= ${LIBCOMPATCPUFLAGS} \
110 --sysroot=${LIBCOMPATTMP} \
113 LIBCOMPATLDFLAGS+= -L${LIBCOMPATTMP}/usr/lib${libcompat}
115 LIBCOMPATWMAKEENV+= MACHINE=${LIBCOMPAT_MACHINE}
116 LIBCOMPATWMAKEENV+= MACHINE_ARCH=${LIBCOMPAT_MACHINE_ARCH}
118 # -B is needed to find /usr/lib32/crti.o for gcc.
119 LIBCOMPATCFLAGS+= -B${LIBCOMPATTMP}/usr/lib${libcompat}
121 .if defined(WANT_COMPAT)
122 LIBDIR_BASE:= /usr/lib${libcompat}
123 _LIB_OBJTOP= ${LIBCOMPAT_OBJTOP}
124 LIBDESTDIR:= ${LIBCOMPATTMP}
125 SYSROOT:= ${LIBCOMPATTMP}
126 CFLAGS+= ${LIBCOMPATCFLAGS}
127 LDFLAGS+= ${CFLAGS} ${LIBCOMPATLDFLAGS}
128 MACHINE= ${LIBCOMPAT_MACHINE}
129 MACHINE_ARCH= ${LIBCOMPAT_MACHINE_ARCH}