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