Makefile.cross revision 1.77
1# $OpenBSD: Makefile.cross,v 1.77 2015/06/01 17:36:17 miod 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} == "armish" || ${TARGET} == "armv7" || \
10	 ${TARGET} == "zaurus")
11TARGET_ARCH=	arm
12.elif	(${TARGET} == "aviion" || ${TARGET} == "luna88k")
13TARGET_ARCH=	m88k
14.elif	(${TARGET} == "sgi" || ${TARGET} == "octeon")
15TARGET_ARCH=	mips64
16.elif	(${TARGET} == "loongson")
17TARGET_ARCH=	mips64el
18TARGET_CPU=	mips64
19.elif	(${TARGET} == "solbourne")
20TARGET_ARCH=	sparc
21.elif	(${TARGET} == "macppc" || ${TARGET} == "socppc")
22TARGET_ARCH=	powerpc
23.elif	(${TARGET} == "landisk")
24TARGET_ARCH=	sh
25.else
26TARGET_ARCH=	${TARGET}
27.endif
28TARGET_CPU?=	${TARGET_ARCH}
29
30# List of LP64 archs
31# XXX move to bsd.*.mk?
32LP64_ARCH = amd64 alpha hppa64 ia64 mips64 sparc64 vax64
33
34TARGET_IS_LP64 =
35MACHINE_IS_LP64 =
36.for _ in ${LP64_ARCH}
37. if !empty(TARGET_ARCH:M$_)
38    TARGET_IS_LP64 = yes
39. endif
40. if !empty(MACHINE_ARCH:M$_)
41    MACHINE_IS_LP64 = yes
42. endif
43.endfor
44
45#CROSSCPPFLAGS?=	-nostdinc -I${CROSSDIR}/usr/include
46#CROSSLDFLAGS?=	-nostdlib -L${CROSSDIR}/usr/lib -static
47CROSSCFLAGS?=	${CROSSCPPFLAGS} -O2 ${PIPE} ${DEBUG}
48CROSSCXXFLAGS?=	${CROSSCPPFLAGS}
49#LDSTATIC?=	-static
50
51CROSSDIR=	${DESTDIR}/usr/cross/${TARGET}
52CROSSENV=	AR=${CROSSDIR}/usr/${TARGET_CANON}/bin/ar \
53		AS=${CROSSDIR}/usr/${TARGET_CANON}/bin/as \
54		CC=${CROSSDIR}/usr/${TARGET_CANON}/bin/cc \
55		CPP=${CROSSDIR}/usr/${TARGET_CANON}/bin/cpp \
56		CXX=${CROSSDIR}/usr/${TARGET_CANON}/bin/c++ \
57		LD=${CROSSDIR}/usr/${TARGET_CANON}/bin/ld \
58		OBJCOPY=${CROSSDIR}/usr/${TARGET_CANON}/bin/objcopy \
59		LORDER=/usr/bin/lorder RANLIB=${CROSSDIR}/usr/${TARGET_CANON}/bin/ranlib \
60		STRIP=${CROSSDIR}/usr/${TARGET_CANON}/bin/strip \
61		HOSTCC=\"${CC}\" HOSTCXX=\"${CXX}\" NOMAN= \
62		HOSTCFLAGS=\"${CFLAGS}\" HOSTCXXFLAGS=\"${CXXFLAGS}\" \
63		HOSTLDFLAGS=\"${LDFLAGS}\" \
64		CFLAGS=\"${CROSSCFLAGS}\" CPPFLAGS=\"${CROSSCPPFLAGS}\" \
65		CXXFLAGS=\"${CROSSCXXFLAGS}\" \
66		LDFLAGS=\"${CROSSLDFLAGS}\"
67CROSSADDPATH=:${CROSSDIR}/usr/${TARGET_CANON}/bin
68CROSSPATH=	/usr/bin:/bin:/usr/sbin:/sbin${CROSSADDPATH}
69CROSSLANGS?=	c c++
70
71TARGET_CANON=`cat ${CROSSDIR}/TARGET_CANON`
72
73CROSSDIRS=	${CROSSDIR}/.dirs_done
74CROSSOBJ=	${CROSSDIR}/.obj_done
75CROSSINCLUDES=	${CROSSDIR}/.includes_done
76CROSSBINUTILS=	${CROSSDIR}/.binutils_done
77CROSSGCC=	${CROSSDIR}/.gcc_done
78#NO_CROSS=	isakmpd keynote ssh
79
80.include <bsd.own.mk>
81
82.for _arch in ${TARGET_ARCH}
83.if !empty(GCC3_ARCH:M${_arch})
84COMPILER_VERSION=gcc3
85.else
86COMPILER_VERSION=gcc4
87.endif
88
89.if !empty(PIE_ARCH:M${_arch})
90NOPIE_FLAGS=-fno-pie
91NOPIE_LDFLAGS=-nopie
92PIE_DEFAULT=${DEFAULT_PIE_DEF}
93.else
94NOPIE_FLAGS=
95PIE_DEFAULT=
96.endif
97
98BINUTILS=	ar as gasp ld nm objcopy objdump ranlib readelf size \
99		strings strip
100BINUTILS_DIR=gnu/usr.bin/binutils-2.17
101.endfor
102
103# no libcrypto.... these won't build
104#NO_CROSS+=	dc passwd ppp tcpdump telnet ftp sasyncd vnconfig
105		
106# explicit cross-compile
107NO_CROSS+=microcode
108NO_CROSS+=groff binutils binutils-2.17 perl texinfo gcc cvs
109NO_CROSS+=nsd
110NO_CROSS+=sqlite3
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	(cd ${.CURDIR}/${BINUTILS_DIR}; \
182	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
183	    PIE_DEFAULT=${PIE_DEFAULT} \
184	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
185	    PATH=${CROSSPATH} \
186	    ${MAKE} -f Makefile.bsd-wrapper depend && \
187	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
188	    PIE_DEFAULT=${PIE_DEFAULT} \
189	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
190	    ${MAKE} -f Makefile.bsd-wrapper all && \
191	    DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
192	    COMPILER_VERSION=${COMPILER_VERSION} \
193	    PIE_DEFAULT=${PIE_DEFAULT} \
194	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
195	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
196	    ${MAKE} -f Makefile.bsd-wrapper install)
197	@for cmd in ${BINUTILS}; do \
198	 if [ -e ${CROSSDIR}/usr/bin/${TARGET_CANON}-$$cmd ] ; then \
199	    cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-$$cmd \
200	        ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-$$cmd ; \
201	    ln -sf ${TARGET_CANON}-$$cmd \
202		${CROSSDIR}/usr/${TARGET_CANON}/bin/$$cmd ;\
203	   if [ -e ${CROSSDIR}/usr/bin/$$cmd ] ; then \
204	    rm -f ${CROSSDIR}/usr/bin/$$cmd ;\
205	   fi ;\
206	 elif [ -e ${CROSSDIR}/usr/bin/$$cmd ] ; then \
207	    cp -f ${CROSSDIR}/usr/bin/$$cmd \
208	        ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-$$cmd ; \
209	    ln -sf ${TARGET_CANON}-$$cmd \
210		${CROSSDIR}/usr/${TARGET_CANON}/bin/$$cmd ;\
211	    mv ${CROSSDIR}/usr/bin/$$cmd \
212		${CROSSDIR}/usr/bin/${TARGET_CANON}-$$cmd ;\
213	 fi ;\
214	done
215	@touch ${CROSSBINUTILS}
216
217
218${CROSSGCC}:		${CROSSBINUTILS}
219.if ${COMPILER_VERSION:L} == "gcc3"
220	(cd ${.CURDIR}/gnu/usr.bin/gcc; \
221	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
222	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
223	    CROSSDIR=${CROSSDIR} \
224	    PATH=${CROSSPATH} ${MAKE} -f Makefile.bsd-wrapper depend && \
225	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
226	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
227	    CROSSDIR=${CROSSDIR} \
228	    ${MAKE} -f Makefile.bsd-wrapper all && \
229	    env CROSSDIR=${CROSSDIR} DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
230	    PATH=${CROSSPATH} ${MAKE} -f Makefile.bsd-wrapper install)
231	cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-g++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-c++
232	cp -f ${CROSSDIR}/usr/bin/gcc ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc
233	cp -f ${CROSSDIR}/usr/libexec/cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp
234	rm -f ${CROSSDIR}/usr/bin/gcc  ${CROSSDIR}/usr/bin/cc ${CROSSDIR}/usr/libexec/cpp 
235	ln -sf ${TARGET_CANON}-cc ${CROSSDIR}/usr/${TARGET_CANON}/bin/cc
236	ln -sf ${TARGET_CANON}-c++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/c++
237	rm -f ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
238	sed -e 's#/usr/libexec/cpp#${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp#' \
239	    -e 's/@GNUC@/-D__GNUC__/' \
240	    -e 's#/usr/include#${CROSSDIR}/usr/include#' \
241	    -e 's/@dollaropt@//' \
242	    ${.CURDIR}/usr.bin/cpp/cpp.sh > ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
243	chmod ${BINMODE} ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
244	chown ${BINOWN}:${BINGRP} ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
245	ln -sf ${TARGET_CANON}-cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/cpp
246.else
247	(cd ${.CURDIR}/gnu/usr.bin/cc; \
248	    PIE_DEFAULT=${PIE_DEFAULT} \
249	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
250	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
251	    CROSSDIR=${CROSSDIR} \
252	    MACHINE=${TARGET} \
253	    PATH=${CROSSPATH} ${MAKE} depend  )
254	(cd ${.CURDIR}/gnu/usr.bin/cc; \
255	    PIE_DEFAULT=${PIE_DEFAULT} \
256	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
257	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
258	    CROSSDIR=${CROSSDIR} \
259	    MACHINE=${TARGET} \
260	    ${MAKE} all )
261	(cd ${.CURDIR}/gnu/usr.bin/cc; \
262	    env CROSSDIR=${CROSSDIR} DESTDIR=${CROSSDIR} \
263	    PIE_DEFAULT=${PIE_DEFAULT} \
264	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
265	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
266	    MACHINE=${TARGET} \
267	    PATH=${CROSSPATH} ${MAKE} install)
268	cp -f ${CROSSDIR}/usr/bin/g++  ${CROSSDIR}/usr/bin/${TARGET_CANON}-g++ 
269	cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-g++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-c++
270	cp -f ${CROSSDIR}/usr/libexec/cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp
271	cp -f ${CROSSDIR}/usr/bin/gcc ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc
272	ln -sf ${TARGET_CANON}-cc ${CROSSDIR}/usr/${TARGET_CANON}/bin/cc
273
274	cp -f ${CROSSDIR}/usr/bin/gcc ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc
275	rm -f ${CROSSDIR}/usr/bin/gcc  ${CROSSDIR}/usr/bin/g++  ${CROSSDIR}/usr/bin/cc ${CROSSDIR}/usr/libexec/cpp 
276	# fix links
277	rm -f ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
278	sed -e 's#/usr/libexec/cpp#${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp#' \
279	    -e 's/@GNUC@//' \
280	    -e 's#/usr/include#${CROSSDIR}/usr/include#' \
281	    -e 's/@dollaropt@//' \
282	    ${.CURDIR}/usr.bin/cpp/cpp.sh > ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
283	chmod ${BINMODE} ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
284	chown ${BINOWN}:${BINGRP} ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
285	ln -sf ${TARGET_CANON}-cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/cpp
286.endif
287	@touch ${CROSSGCC}
288
289# XXX MAKEOBJDIR maybe should be obj.${TARGET} here, revisit later
290cross-lib:	${CROSSGCC}
291	MACHINE=${TARGET} \
292	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
293	export MACHINE MACHINE_ARCH MACHINE_CPU; \
294	(cd ${.CURDIR}/lib; \
295	    for lib in csu libc; do \
296	    (cd $$lib; \
297	        eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
298		    ${MAKE} depend all ;\
299	        eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} DESTDIR=${CROSSDIR} \
300		    ${MAKE} install); \
301	    done; \
302	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
303	        SKIPDIR=\"${NO_CROSS} libocurses/PSD.doc\" \
304	        ${MAKE} depend all ; \
305	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} DESTDIR=${CROSSDIR} \
306	        SKIPDIR=\"${NO_CROSS} libocurses/PSD.doc\" \
307	        ${MAKE} install)
308
309cross-bin:	${CROSSOBJ}
310	MACHINE=${TARGET} \
311	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
312	export MACHINE MACHINE_ARCH MACHINE_CPU; \
313	for i in libexec bin sbin usr.bin usr.sbin; do \
314	(cd ${.CURDIR}/$$i; \
315	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
316	        SKIPDIR=\"${BINUTILS} ${NO_CROSS}\" \
317	        ${MAKE} depend all ; \
318	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} DESTDIR=${CROSSDIR} \
319	        SKIPDIR=\"${BINUTILS} ${NO_CROSS}\" \
320	        ${MAKE} install); \
321	done
322
323cross-gnu:	${CROSSOBJ}
324	MACHINE=${TARGET} \
325	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
326	export MACHINE MACHINE_ARCH MACHINE_CPU; \
327	for i in gnu/lib gnu/usr.sbin gnu/usr.bin ; do \
328	(cd ${.CURDIR}/$$i; \
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	done
336
337cross-share:   ${CROSSOBJ}
338	MACHINE=${TARGET} \
339	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
340	export MACHINE MACHINE_ARCH MACHINE_CPU; \
341	for i in share; do \
342	    (cd ${.CURDIR}/$$i; \
343	        eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
344		SKIPDIR=\"${NO_CROSS}\" \
345		${MAKE} depend all install); \
346	done
347
348cross-sys:   ${CROSSOBJ}
349	MACHINE=${TARGET} \
350	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
351	export MACHINE MACHINE_ARCH MACHINE_CPU; \
352	for i in sys; do \
353	    (cd ${.CURDIR}/$$i; \
354	        eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
355		SKIPDIR=\"${NO_CROSS}\" \
356		${MAKE} depend all install); \
357	done
358
359cross-etc-root-var:	${CROSSOBJ}
360	(cd ${.CURDIR}/etc && \
361	    MACHINE=${TARGET} \
362	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU} \
363	    DESTDIR=${CROSSDIR} \
364	    ${MAKE} distribution-etc-root-var)
365
366cross-depend:
367	@(cd ${.CURDIR} && \
368	    BSDOBJDIR=${CROSSDIR}/usr/obj \
369	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
370	    SKIPDIR="${NO_CROSS}" \
371	    ${MAKE} depend)
372
373cross-clean:
374	@(cd ${.CURDIR} && \
375	    BSDOBJDIR=${CROSSDIR}/usr/obj \
376	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
377	    SKIPDIR="${NO_CROSS}" \
378	    ${MAKE} clean)
379
380cross-cleandir:
381	@(cd ${.CURDIR} && \
382	    BSDOBJDIR=${CROSSDIR}/usr/obj \
383	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
384	    SKIPDIR="${NO_CROSS}" \
385	    ${MAKE} cleandir)
386