Makefile.cross revision 1.89
1# $OpenBSD: Makefile.cross,v 1.89 2016/12/18 17:03:08 patrick Exp $
2
3cross-tools:	cross-includes cross-binutils cross-gcc cross-lib
4cross-distrib:	cross-tools cross-bin cross-share cross-sys cross-etc-root-var
5# cross-gnu \
6
7# Have to compute TARGET_ARCH directly in the Makefile, for .if tests involving
8# this variable to work.
9.if	(${TARGET} == "arm64")
10TARGET_ARCH=	aarch64
11.elif	(${TARGET} == "armv7")
12TARGET_ARCH=	arm
13.elif	(${TARGET} == "luna88k")
14TARGET_ARCH=	m88k
15.elif	(${TARGET} == "sgi" || ${TARGET} == "octeon")
16TARGET_ARCH=	mips64
17.elif	(${TARGET} == "loongson")
18TARGET_ARCH=	mips64el
19TARGET_CPU=	mips64
20.elif	(${TARGET} == "macppc" || ${TARGET} == "socppc")
21TARGET_ARCH=	powerpc
22.elif	(${TARGET} == "landisk")
23TARGET_ARCH=	sh
24.else
25TARGET_ARCH=	${TARGET}
26.endif
27TARGET_CPU?=	${TARGET_ARCH}
28
29# List of LP64 archs
30# XXX move to bsd.*.mk?
31LP64_ARCH = aarch64 amd64 alpha mips64 sparc64
32
33TARGET_IS_LP64 =
34MACHINE_IS_LP64 =
35.for _ in ${LP64_ARCH}
36. if !empty(TARGET_ARCH:M$_)
37    TARGET_IS_LP64 = yes
38. endif
39. if !empty(MACHINE_ARCH:M$_)
40    MACHINE_IS_LP64 = yes
41. endif
42.endfor
43
44#CROSSCPPFLAGS?=	-nostdinc -I${CROSSDIR}/usr/include
45#CROSSLDFLAGS?=	-nostdlib -L${CROSSDIR}/usr/lib -static
46CROSSCFLAGS?=	${CROSSCPPFLAGS} -O2 ${PIPE} ${DEBUG}
47CROSSCXXFLAGS?=	${CROSSCPPFLAGS}
48#LDSTATIC?=	-static
49
50CROSSDIR=	${DESTDIR}/usr/cross/${TARGET}
51CROSSENV=	AR=${CROSSDIR}/usr/${TARGET_CANON}/bin/ar \
52		AS=${CROSSDIR}/usr/${TARGET_CANON}/bin/as \
53		CC=${CROSSDIR}/usr/${TARGET_CANON}/bin/cc \
54		CPP=${CROSSDIR}/usr/${TARGET_CANON}/bin/cpp \
55		CXX=${CROSSDIR}/usr/${TARGET_CANON}/bin/c++ \
56		LD=${CROSSDIR}/usr/${TARGET_CANON}/bin/ld \
57		OBJCOPY=${CROSSDIR}/usr/${TARGET_CANON}/bin/objcopy \
58		LORDER=/usr/bin/lorder RANLIB=${CROSSDIR}/usr/${TARGET_CANON}/bin/ranlib \
59		STRIP=${CROSSDIR}/usr/${TARGET_CANON}/bin/strip \
60		HOSTCC=\"${CC}\" HOSTCXX=\"${CXX}\" NOMAN= \
61		HOSTCFLAGS=\"${CFLAGS}\" HOSTCXXFLAGS=\"${CXXFLAGS}\" \
62		HOSTLDFLAGS=\"${LDFLAGS}\" \
63		CFLAGS=\"${CROSSCFLAGS}\" CPPFLAGS=\"${CROSSCPPFLAGS}\" \
64		CXXFLAGS=\"${CROSSCXXFLAGS}\" \
65		LDFLAGS=\"${CROSSLDFLAGS}\"
66CROSSADDPATH=:${CROSSDIR}/usr/${TARGET_CANON}/bin
67CROSSPATH=	/usr/bin:/bin:/usr/sbin:/sbin${CROSSADDPATH}
68CROSSLANGS?=	c c++
69
70TARGET_CANON=`cat ${CROSSDIR}/TARGET_CANON`
71
72CROSSDIRS=	${CROSSDIR}/.dirs_done
73CROSSOBJ=	${CROSSDIR}/.obj_done
74CROSSINCLUDES=	${CROSSDIR}/.includes_done
75CROSSBINUTILS=	${CROSSDIR}/.binutils_done
76CROSSGCC=	${CROSSDIR}/.gcc_done
77#NO_CROSS=	isakmpd keynote ssh
78
79.include <bsd.own.mk>
80
81.for _arch in ${TARGET_ARCH}
82.if !empty(CLANG_ARCH:M${_arch})
83COMPILER_VERSION=clang
84.elif !empty(GCC3_ARCH:M${_arch})
85COMPILER_VERSION=gcc3
86.else
87COMPILER_VERSION=gcc4
88.endif
89
90.if !empty(PIE_ARCH:M${_arch})
91NOPIE_FLAGS=-fno-pie
92NOPIE_LDFLAGS=-nopie
93PIE_DEFAULT=${DEFAULT_PIE_DEF}
94.else
95NOPIE_FLAGS=
96PIE_DEFAULT=
97.endif
98
99BINUTILS=	ar as gasp ld nm objcopy objdump ranlib readelf size \
100		strings strip
101BINUTILS_DIR=gnu/usr.bin/binutils-2.17
102.endfor
103
104# no libcrypto.... these won't build
105#NO_CROSS+=	dc passwd ppp tcpdump telnet ftp sasyncd vnconfig
106		
107# explicit cross-compile
108NO_CROSS+=microcode
109NO_CROSS+=groff binutils binutils-2.17 perl texinfo gcc cvs
110NO_CROSS+=nsd
111NO_CROSS+=bind
112NO_CROSS+=unbound
113
114cross-dirs:	${CROSSDIRS}
115cross-obj:	${CROSSOBJ}
116cross-includes:	${CROSSINCLUDES}
117cross-binutils:	${CROSSBINUTILS}
118cross-gcc:	${CROSSGCC}
119
120cross-env:
121	@echo ${CROSSENV} MACHINE=${TARGET} \
122	    MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \
123	    MACHINE_CPU=`cat ${CROSSDIR}/TARGET_CPU` \
124	    BSDOBJDIR=${CROSSDIR}/usr/obj \
125	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET}
126
127${CROSSDIRS}:
128.if ${TARGET_ARCH} == "arm" &&  ${MACHINE_IS_LP64} == "yes"
129	# this config is allowed
130.elif ${TARGET_IS_LP64} != ${MACHINE_IS_LP64}
131	@echo "host and target have different size longs"
132	@echo "cross compiler generates bad code; aborting"; exit 1
133.endif
134	@-mkdir -p ${CROSSDIR}
135	@echo ${TARGET_ARCH} > ${CROSSDIR}/TARGET_ARCH
136	@echo TARGET_ARCH is `cat ${CROSSDIR}/TARGET_ARCH`
137	@echo ${TARGET_CPU} > ${CROSSDIR}/TARGET_CPU
138	@echo TARGET_CPU is `cat ${CROSSDIR}/TARGET_CPU`
139	@eval `grep '^osr=' sys/conf/newvers.sh`; \
140	   echo ${TARGET_ARCH}-unknown-openbsd$$osr > \
141	   ${CROSSDIR}/TARGET_CANON
142	@-mkdir -p ${CROSSDIR}
143	@-mkdir -p ${CROSSDIR}/usr/${TARGET_CANON}
144	@ln -sf ${CROSSDIR}/usr/include \
145	    ${CROSSDIR}/usr/${TARGET_CANON}/include
146	@ln -sf ${CROSSDIR}/usr/lib \
147	    ${CROSSDIR}/usr/${TARGET_CANON}/lib
148	@-mkdir -p ${CROSSDIR}/usr/${TARGET_CANON}/bin
149	@(cd ${.CURDIR}/etc && DESTDIR=${CROSSDIR} ${MAKE} distrib-dirs)
150	@touch ${CROSSDIRS}
151
152${CROSSOBJ}:	${CROSSDIRS}
153	@-mkdir -p ${CROSSDIR}/usr/obj
154	@(cd ${.CURDIR} && \
155	    BSDOBJDIR=${CROSSDIR}/usr/obj \
156	    COMPILER_VERSION=${COMPILER_VERSION} \
157	    MACHINE=${TARGET} \
158	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU} \
159	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
160	    ${MAKE} obj)
161	@touch ${CROSSOBJ}
162
163${CROSSINCLUDES}:	${CROSSOBJ}
164	@-mkdir -p ${CROSSDIR}/usr/include
165	@(cd ${.CURDIR}/include && \
166	    COMPILER_VERSION=${COMPILER_VERSION} \
167	    MACHINE=${TARGET} \
168	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU} \
169	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
170	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
171	    ${MAKE} prereq && \
172	    COMPILER_VERSION=${COMPILER_VERSION} \
173	    MACHINE=${TARGET} \
174	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU} \
175	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
176	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
177	    ${MAKE} DESTDIR=${CROSSDIR} includes)
178	@touch ${CROSSINCLUDES}
179
180${CROSSBINUTILS}:	${CROSSINCLUDES}
181.if ${TARGET_ARCH} != "aarch64"
182	(cd ${.CURDIR}/${BINUTILS_DIR}; \
183	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
184	    PIE_DEFAULT=${PIE_DEFAULT} \
185	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
186	    PATH=${CROSSPATH} \
187	    ${MAKE} -f Makefile.bsd-wrapper depend && \
188	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
189	    PIE_DEFAULT=${PIE_DEFAULT} \
190	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
191	    ${MAKE} -f Makefile.bsd-wrapper all && \
192	    DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
193	    COMPILER_VERSION=${COMPILER_VERSION} \
194	    PIE_DEFAULT=${PIE_DEFAULT} \
195	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
196	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
197	    ${MAKE} -f Makefile.bsd-wrapper install)
198	@for cmd in ${BINUTILS}; do \
199	 if [ -e ${CROSSDIR}/usr/bin/${TARGET_CANON}-$$cmd ] ; then \
200	    cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-$$cmd \
201	        ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-$$cmd ; \
202	    ln -sf ${TARGET_CANON}-$$cmd \
203		${CROSSDIR}/usr/${TARGET_CANON}/bin/$$cmd ;\
204	   if [ -e ${CROSSDIR}/usr/bin/$$cmd ] ; then \
205	    rm -f ${CROSSDIR}/usr/bin/$$cmd ;\
206	   fi ;\
207	 elif [ -e ${CROSSDIR}/usr/bin/$$cmd ] ; then \
208	    cp -f ${CROSSDIR}/usr/bin/$$cmd \
209	        ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-$$cmd ; \
210	    ln -sf ${TARGET_CANON}-$$cmd \
211		${CROSSDIR}/usr/${TARGET_CANON}/bin/$$cmd ;\
212	    mv ${CROSSDIR}/usr/bin/$$cmd \
213		${CROSSDIR}/usr/bin/${TARGET_CANON}-$$cmd ;\
214	 fi ;\
215	done
216.endif
217	@touch ${CROSSBINUTILS}
218
219
220${CROSSGCC}:		${CROSSBINUTILS}
221.if ${COMPILER_VERSION:L} == "clang"
222	(cd ${.CURDIR}/gnu/usr.bin/clang; \
223	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
224	    MACHINE_ARCH=${TARGET_ARCH} \
225	    ${MAKE} obj)
226	(cd ${.CURDIR}/gnu/usr.bin/clang; \
227	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
228	    MACHINE_ARCH=${TARGET_ARCH} \
229	    ${MAKE} depend)
230	(cd ${.CURDIR}/gnu/usr.bin/clang; \
231	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
232	    MACHINE_ARCH=${TARGET_ARCH} \
233	    ${MAKE} all)
234	(cd ${.CURDIR}/gnu/usr.bin/clang; \
235	    DESTDIR=${CROSSDIR} \
236	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
237	    MACHINE_ARCH=${TARGET_ARCH} \
238	    ${MAKE} install)
239	mv ${CROSSDIR}/usr/bin/clang ${CROSSDIR}/usr/bin/${TARGET_CANON}-clang
240	mv ${CROSSDIR}/usr/bin/clang++ ${CROSSDIR}/usr/bin/${TARGET_CANON}-clang++
241	cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-clang ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc
242	cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-clang++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-c++
243	ln -sf ${TARGET_CANON}-cc ${CROSSDIR}/usr/${TARGET_CANON}/bin/cc
244	ln -sf ${TARGET_CANON}-c++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/c++
245.elif ${COMPILER_VERSION:L} == "gcc3"
246	(cd ${.CURDIR}/gnu/usr.bin/gcc; \
247	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
248	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
249	    CROSSDIR=${CROSSDIR} \
250	    PATH=${CROSSPATH} ${MAKE} -f Makefile.bsd-wrapper depend && \
251	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
252	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
253	    CROSSDIR=${CROSSDIR} \
254	    ${MAKE} -f Makefile.bsd-wrapper all && \
255	    env CROSSDIR=${CROSSDIR} DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
256	    PATH=${CROSSPATH} ${MAKE} -f Makefile.bsd-wrapper install)
257	cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-g++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-c++
258	cp -f ${CROSSDIR}/usr/bin/gcc ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc
259	cp -f ${CROSSDIR}/usr/libexec/cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp
260	rm -f ${CROSSDIR}/usr/bin/gcc  ${CROSSDIR}/usr/bin/cc ${CROSSDIR}/usr/libexec/cpp 
261	ln -sf ${TARGET_CANON}-cc ${CROSSDIR}/usr/${TARGET_CANON}/bin/cc
262	ln -sf ${TARGET_CANON}-c++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/c++
263	rm -f ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
264	sed -e 's#/usr/libexec/cpp#${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp#' \
265	    -e 's/@GNUC@/-D__GNUC__/' \
266	    -e 's#/usr/include#${CROSSDIR}/usr/include#' \
267	    -e 's/@dollaropt@//' \
268	    ${.CURDIR}/usr.bin/cpp/cpp.sh > ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
269	chmod ${BINMODE} ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
270	chown ${BINOWN}:${BINGRP} ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
271	ln -sf ${TARGET_CANON}-cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/cpp
272.else
273	(cd ${.CURDIR}/gnu/usr.bin/cc; \
274	    PIE_DEFAULT=${PIE_DEFAULT} \
275	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
276	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
277	    CROSSDIR=${CROSSDIR} \
278	    MACHINE=${TARGET} \
279	    PATH=${CROSSPATH} ${MAKE} depend  )
280	(cd ${.CURDIR}/gnu/usr.bin/cc; \
281	    PIE_DEFAULT=${PIE_DEFAULT} \
282	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
283	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
284	    CROSSDIR=${CROSSDIR} \
285	    MACHINE=${TARGET} \
286	    ${MAKE} all )
287	(cd ${.CURDIR}/gnu/usr.bin/cc; \
288	    env CROSSDIR=${CROSSDIR} DESTDIR=${CROSSDIR} \
289	    PIE_DEFAULT=${PIE_DEFAULT} \
290	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
291	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
292	    MACHINE=${TARGET} \
293	    PATH=${CROSSPATH} ${MAKE} install)
294	cp -f ${CROSSDIR}/usr/bin/g++  ${CROSSDIR}/usr/bin/${TARGET_CANON}-g++ 
295	cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-g++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-c++
296	cp -f ${CROSSDIR}/usr/libexec/cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp
297	cp -f ${CROSSDIR}/usr/bin/gcc ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc
298	ln -sf ${TARGET_CANON}-cc ${CROSSDIR}/usr/${TARGET_CANON}/bin/cc
299
300	cp -f ${CROSSDIR}/usr/bin/gcc ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc
301	rm -f ${CROSSDIR}/usr/bin/gcc  ${CROSSDIR}/usr/bin/g++  ${CROSSDIR}/usr/bin/cc ${CROSSDIR}/usr/libexec/cpp 
302	# fix links
303	rm -f ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
304	sed -e 's#/usr/libexec/cpp#${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp#' \
305	    -e 's/@GNUC@//' \
306	    -e 's#/usr/include#${CROSSDIR}/usr/include#' \
307	    -e 's/@dollaropt@//' \
308	    ${.CURDIR}/usr.bin/cpp/cpp.sh > ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
309	chmod ${BINMODE} ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
310	chown ${BINOWN}:${BINGRP} ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
311	ln -sf ${TARGET_CANON}-cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/cpp
312.endif
313	@touch ${CROSSGCC}
314
315# XXX MAKEOBJDIR maybe should be obj.${TARGET} here, revisit later
316cross-lib:	${CROSSGCC}
317	MACHINE=${TARGET} \
318	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU} \
319	    BSDOBJDIR=${CROSSDIR}/usr/obj; \
320	export MACHINE MACHINE_ARCH MACHINE_CPU BSDOBJDIR; \
321	(cd ${.CURDIR}/lib; \
322	    for lib in csu libc; do \
323	    (cd $$lib; \
324	        eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
325		    ${MAKE} depend all ;\
326	        eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} DESTDIR=${CROSSDIR} \
327		    ${MAKE} install); \
328	    done; \
329	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
330	        SKIPDIR=\"${NO_CROSS}\" \
331	        ${MAKE} depend all ; \
332	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} DESTDIR=${CROSSDIR} \
333	        SKIPDIR=\"${NO_CROSS}\" \
334	        ${MAKE} install)
335
336cross-bin:	${CROSSOBJ}
337	MACHINE=${TARGET} \
338	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
339	export MACHINE MACHINE_ARCH MACHINE_CPU; \
340	for i in libexec bin sbin usr.bin usr.sbin; do \
341	(cd ${.CURDIR}/$$i; \
342	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
343	        SKIPDIR=\"${BINUTILS} ${NO_CROSS}\" \
344	        ${MAKE} depend all ; \
345	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} DESTDIR=${CROSSDIR} \
346	        SKIPDIR=\"${BINUTILS} ${NO_CROSS}\" \
347	        ${MAKE} install); \
348	done
349
350cross-gnu:	${CROSSOBJ}
351	MACHINE=${TARGET} \
352	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
353	export MACHINE MACHINE_ARCH MACHINE_CPU; \
354	for i in gnu/lib gnu/usr.sbin gnu/usr.bin ; do \
355	(cd ${.CURDIR}/$$i; \
356	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
357	        SKIPDIR=\"${NO_CROSS}\" \
358	        ${MAKE} depend all ; \
359	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} DESTDIR=${CROSSDIR} \
360	        SKIPDIR=\"${NO_CROSS}\" \
361	        ${MAKE} install); \
362	done
363
364cross-share:   ${CROSSOBJ}
365	MACHINE=${TARGET} \
366	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
367	export MACHINE MACHINE_ARCH MACHINE_CPU; \
368	for i in share; do \
369	    (cd ${.CURDIR}/$$i; \
370	        eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
371		SKIPDIR=\"${NO_CROSS}\" \
372		DESTDIR=${CROSSDIR} \
373		${MAKE} depend all install); \
374	done
375
376cross-sys:   ${CROSSOBJ}
377	MACHINE=${TARGET} \
378	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
379	export MACHINE MACHINE_ARCH MACHINE_CPU; \
380	for i in sys; do \
381	    (cd ${.CURDIR}/$$i; \
382	        eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
383		SKIPDIR=\"${NO_CROSS}\" \
384		DESTDIR=${CROSSDIR} \
385		${MAKE} depend all install); \
386	done
387
388cross-etc-root-var:	${CROSSOBJ}
389	(cd ${.CURDIR}/etc && \
390	    MACHINE=${TARGET} \
391	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU} \
392	    DESTDIR=${CROSSDIR} \
393	    ${MAKE} distribution-etc-root-var)
394
395cross-depend:
396	@(cd ${.CURDIR} && \
397	    BSDOBJDIR=${CROSSDIR}/usr/obj \
398	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
399	    SKIPDIR="${NO_CROSS}" \
400	    ${MAKE} depend)
401
402cross-clean:
403	@(cd ${.CURDIR} && \
404	    BSDOBJDIR=${CROSSDIR}/usr/obj \
405	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
406	    SKIPDIR="${NO_CROSS}" \
407	    ${MAKE} clean)
408
409cross-cleandir:
410	@(cd ${.CURDIR} && \
411	    BSDOBJDIR=${CROSSDIR}/usr/obj \
412	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
413	    SKIPDIR="${NO_CROSS}" \
414	    ${MAKE} cleandir)
415