-
Notifications
You must be signed in to change notification settings - Fork 60
/
Makefile.libcompat
156 lines (138 loc) · 5.31 KB
/
Makefile.libcompat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
.if !targets(__<${_this:T}>__)
__<${_this:T}>__:
# Makefile for the compatibility libraries.
# - 32-bit compat libraries on some 64-bit architectures
# - 64-bit compat on CHERI RISC-V and Morello.
# XXX: bsd.compat.mk stubbed out for cleandir
.if defined(_LIBCOMPATS) && !make(cleandir)
.include <bsd.compat.mk>
.for libcompatidx _LIBCOMPAT libcompat in ${_LIBCOMPATS:range:@i@${i} ${_LIBCOMPATS:[$i]} ${libcompats:[$i]}@}
# Yes, the flags are redundant.
LIB${_LIBCOMPAT}_COMPILERS= \
CC=${${XCC} ${LIB${_LIBCOMPAT}CFLAGS}:L:Q} \
CXX=${${XCXX} ${LIB${_LIBCOMPAT}CXXFLAGS} ${LIB${_LIBCOMPAT}CFLAGS}:L:Q} \
CPP=${${XCPP} ${LIB${_LIBCOMPAT}CFLAGS}:L:Q}
LIB${_LIBCOMPAT}WMAKEENV+= \
INSTALL="${INSTALL_CMD} -U" \
PATH=${TMPPATH} \
SYSROOT=${WORLDTMP} \
LIBDIR=/usr/lib${libcompat} \
SHLIBDIR=/usr/lib${libcompat} \
LIBDATADIR=/usr/lib${libcompat} \
DTRACE="${LIB${_LIBCOMPAT}DTRACE:U${DTRACE}}"
.if ${MK_META_MODE} != "no"
# Don't rebuild build-tools targets during normal build.
LIB${_LIBCOMPAT}WMAKEENV+= BUILD_TOOLS_META=.NOMETA
.endif
LIB${_LIBCOMPAT}WMAKEFLAGS+= \
${LIB${_LIBCOMPAT}_COMPILERS} \
DESTDIR=${WORLDTMP} \
-DNO_CPU_CFLAGS \
MK_BOOT=no \
MK_CTF=no \
MK_TESTS=no MK_TESTS_SUPPORT=${MK_TESTS} \
WORLDTMP_MTREE="${WORLDTMP_MTREE}"
# Avoid re-computing COMPILER_VERSION, etc. values:
# $CC is different in the libcompat case compared to the non-compat value.
# Since bsd.compiler.mk (and bsd.linker.mk) save the variables using a full
# hash of the compiler/link command, this means that the cached values for
# X_COMPILER_TYPE, etc. cannot be loaded.
# Instead set all the values, so that we can avoid including bsd.compiler.mk and
# bsd.linker.mk. This provides a noticeable speed-up as it avoids multiple
# processes from being spawned in each subdirectory.
.for _var in ${_TOOLCHAIN_METADATA_VARS}
LIB${_LIBCOMPAT}WMAKEFLAGS+= ${_var}="${X_${_var}}"
.endfor
LIB${_LIBCOMPAT}WMAKEFLAGS+=_NO_INCLUDE_LINKERMK=yes _NO_INCLUDE_COMPILERMK=yes
LIB${_LIBCOMPAT}WMAKE+= ${TIME_ENV} ${LIB${_LIBCOMPAT}WMAKEENV} ${MAKE} \
${LIB${_LIBCOMPAT}WMAKEFLAGS} \
OBJTOP=${LIB${_LIBCOMPAT}_OBJTOP} \
OBJROOT='$${OBJTOP}/' \
UNIVERSE_TOOLCHAIN_PATH=${UNIVERSE_TOOLCHAIN_PATH} \
MAKEOBJDIRPREFIX= \
MK_INCLUDES=no \
MK_MAN=no MK_HTML=no
LIB${_LIBCOMPAT}IMAKE+= ${LIB${_LIBCOMPAT}WMAKE:NINSTALL=*:NDESTDIR=*} \
${IMAKE_INSTALL} \
-DLIBRARIES_ONLY
# Shared logic
build${libcompat}: .PHONY
@echo
@echo "--------------------------------------------------------------"
@echo ">>> stage 4.3.${libcompatidx}: building lib${libcompat} shim libraries"
@echo "--------------------------------------------------------------"
${WORLDTMP_MTREE} -f ${.CURDIR}/etc/mtree/BSD.lib${libcompat}.dist \
-p ${WORLDTMP}/usr >/dev/null
.if ${MK_DEBUG_FILES} != "no"
${WORLDTMP_MTREE} -f ${.CURDIR}/etc/mtree/BSD.lib${libcompat}.dist \
-p ${WORLDTMP}/usr/lib/debug/usr >/dev/null
.endif
${_+_}cd ${.CURDIR}; \
WORLDTMP=${WORLDTMP} \
MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}" \
${MAKE} -f Makefile.inc1 \
DESTDIR= \
OBJTOP=${LIB${_LIBCOMPAT}_OBJTOP} \
OBJROOT='$${OBJTOP}/' \
UNIVERSE_TOOLCHAIN_PATH=${UNIVERSE_TOOLCHAIN_PATH} \
MAKEOBJDIRPREFIX= \
-DNO_LINT \
-DNO_CPU_CFLAGS \
MK_ASAN=no \
MK_CTF=no \
MK_RETPOLINE=no \
MK_SSP=no \
MK_UBSAN=no \
MK_WERROR=no \
_lc_build-tools
${_+_}cd ${.CURDIR}; \
${LIB${_LIBCOMPAT}WMAKE} -f Makefile.inc1 -DNO_FSCHG libraries
distribute${libcompat} install${libcompat}: .PHONY
${_+_}cd ${.CURDIR}; \
${LIB${_LIBCOMPAT}IMAKE} -f Makefile.inc1 _lc_${.TARGET:S/${libcompat}$//}
.if ${.TARGETS:Mlib${libcompat}buildenv}
.if ${.MAKEFLAGS:M-j}
.error The lib${libcompat}buildenv target is incompatible with -j
.endif
BUILDENV_DIR?= ${.CURDIR}
lib${libcompat}buildenv: .PHONY
@echo "Entering world for lib${libcompat} on ${TARGET_ARCH}:${TARGET}"
.if ${BUILDENV_SHELL:M*zsh*}
@echo For ZSH you must run: export CPUTYPE=${TARGET_CPUTYPE}
.endif
# Note: we have to remove TARGET and TARGET_ARCH from MAKEFLAGS since
# otherwise src.opts.mk will pick the wrong MK_FOO values.
@cd ${BUILDENV_DIR} && \
env ${LIB${_LIBCOMPAT}WMAKEENV} ${LIB${_LIBCOMPAT}_COMPILERS} BUILDENV=1 \
TARGET=${LIB${_LIBCOMPAT}_MACHINE} TARGET_ARCH=${LIB${_LIBCOMPAT}_MACHINE_ARCH} \
INSTALL="${INSTALL_CMD} ${INSTALLFLAGS}" \
MTREE_CMD="${MTREE_CMD} ${MTREEFLAGS}" \
"MAKEFLAGS=${MAKEFLAGS:NTARGET*}" ${BUILDENV_SHELL} || true
.endif
.endfor # libcompatidx _LIBCOMPAT libcompat
.endif # defined(_LIBCOMPATS)
# These depend on MK_*, which could vary between the native and compat
# architectures. Thus targets using them are run within a compat sub-make
# rather than the native make environment.
_LC_LIBDIRS.yes= lib
_LC_LIBDIRS.yes+= gnu/lib
_LC_LIBDIRS.${MK_CDDL:tl}+= cddl/lib
_LC_LIBDIRS.${MK_CRYPT:tl}+= secure/lib
_LC_LIBDIRS.${MK_KERBEROS:tl}+= kerberos5/lib
.if ${MK_FILE} != "no"
_libmagic= lib/libmagic
.endif
.if ${MK_PMC} != "no"
_jevents= lib/libpmc/pmu-events
.endif
_lc_build-tools:
.for _dir in lib/ncurses/tinfo ${_libmagic} ${_jevents}
.for _t in ${_obj} build-tools
${_+_}cd ${.CURDIR}/${_dir}; ${MAKE} DIRPRFX=${_dir}/ ${_t}
.endfor
.endfor
_lc_distribute _lc_install:
.for _dir in ${_LC_LIBDIRS.yes}
${_+_}cd ${.CURDIR}/${_dir}; ${MAKE} ${.TARGET:S/^_lc_//}
.endfor
.endif # !targets(__<${_this:T}>__)