]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - share/mk/bsd.compat.mk
Import libxo-1.3.0:
[FreeBSD/FreeBSD.git] / share / mk / bsd.compat.mk
1 # $FreeBSD$
2
3 .if !targets(__<${_this:T}>__)
4 __<${_this:T}>__:
5
6 .if defined(_LIBCOMPAT)
7 COMPAT_ARCH=    ${TARGET_ARCH}
8 COMPAT_CPUTYPE= ${TARGET_CPUTYPE}
9 .else
10 COMPAT_ARCH=    ${MACHINE_ARCH}
11 COMPAT_CPUTYPE= ${CPUTYPE}
12 .endif
13
14 # -------------------------------------------------------------------
15 # 32 bit world
16 .if ${COMPAT_ARCH} == "amd64"
17 HAS_COMPAT=32
18 .if empty(COMPAT_CPUTYPE)
19 LIB32CPUFLAGS=  -march=i686 -mmmx -msse -msse2
20 .else
21 LIB32CPUFLAGS=  -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
26 LIB32CPUFLAGS+= -target x86_64-unknown-freebsd13.0
27 .endif
28 LIB32CPUFLAGS+= -m32
29 LIB32WMAKEENV=  MACHINE=i386 MACHINE_ARCH=i386 \
30                 MACHINE_CPU="i686 mmx sse sse2"
31 LIB32WMAKEFLAGS=        \
32                 AS="${XAS} --32" \
33                 LD="${XLD} -m elf_i386_fbsd -L${LIBCOMPATTMP}/usr/lib32"
34
35 .elif ${COMPAT_ARCH} == "powerpc64"
36 HAS_COMPAT=32
37 .if empty(COMPAT_CPUTYPE)
38 LIB32CPUFLAGS=  -mcpu=powerpc
39 .else
40 LIB32CPUFLAGS=  -mcpu=${COMPAT_CPUTYPE}
41 .endif
42 LIB32CPUFLAGS+= -m32
43 LIB32WMAKEENV=  MACHINE=powerpc MACHINE_ARCH=powerpc
44 LIB32WMAKEFLAGS=        \
45                 LD="${XLD} -m elf32ppc_fbsd"
46
47 .elif ${COMPAT_ARCH:Mmips64*} != ""
48 HAS_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)
52 LIB32CPUFLAGS=  -march=mips3
53 .else
54 LIB32CPUFLAGS=  -march=${COMPAT_CPUTYPE}
55 .endif
56 .else
57 .if ${COMPAT_ARCH:Mmips64el*} != ""
58 LIB32CPUFLAGS=  -target mipsel-unknown-freebsd13.0
59 .else
60 LIB32CPUFLAGS=  -target mips-unknown-freebsd13.0
61 .endif
62 .endif
63 LIB32CPUFLAGS+= -mabi=32
64 LIB32WMAKEENV=  MACHINE=mips MACHINE_ARCH=mips
65 .if ${COMPAT_ARCH:Mmips64el*} != ""
66 LIB32WMAKEFLAGS= LD="${XLD} -m elf32ltsmip_fbsd"
67 .else
68 LIB32WMAKEFLAGS= LD="${XLD} -m elf32btsmip_fbsd"
69 .endif
70 .endif
71
72 LIB32WMAKEFLAGS+= NM="${XNM}"
73 LIB32WMAKEFLAGS+= OBJCOPY="${XOBJCOPY}"
74
75 LIB32CFLAGS=    -DCOMPAT_32BIT
76 LIB32DTRACE=    ${DTRACE} -32
77 LIB32WMAKEFLAGS+=       -DCOMPAT_32BIT
78
79 # -------------------------------------------------------------------
80 # soft-fp world
81 .if ${COMPAT_ARCH:Marmv[67]*} != ""
82 HAS_COMPAT=SOFT
83 LIBSOFTCFLAGS=        -DCOMPAT_SOFTFP
84 LIBSOFTCPUFLAGS= -mfloat-abi=softfp
85 LIBSOFTWMAKEENV= CPUTYPE=soft MACHINE=arm MACHINE_ARCH=${COMPAT_ARCH}
86 LIBSOFTWMAKEFLAGS=        -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
101 WANT_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.
116 libcompat=      ${_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})
121 LIBCOMPAT${_var}?=      ${LIB${_LIBCOMPAT}${_var}}
122 .endif
123 .endfor
124
125 # Shared flags
126 LIBCOMPAT_OBJTOP?=      ${OBJTOP}/obj-lib${libcompat}
127 LIBCOMPATTMP?=          ${LIBCOMPAT_OBJTOP}/tmp
128
129 LIBCOMPATCFLAGS+=       ${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.
136 LIBCOMPATCFLAGS+=       -B${LIBCOMPATTMP}/usr/lib${libcompat}
137
138 .if defined(WANT_COMPAT)
139 LIBDIR_BASE:=   /usr/lib${libcompat}
140 _LIB_OBJTOP=    ${LIBCOMPAT_OBJTOP}
141 CFLAGS+=        ${LIBCOMPATCFLAGS}
142 .endif
143
144 .endif