Makefile.cross revision 1.46
1# $OpenBSD: Makefile.cross,v 1.46 2011/08/05 09:28:39 kettenis 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} == "beagle" || \
10	 ${TARGET} == "gumstix" || ${TARGET} == "palm" || \
11	 ${TARGET} == "zaurus")
12TARGET_ARCH=	arm
13.elif	(${TARGET} == "hp300" || ${TARGET} == "mac68k" || \
14	 ${TARGET} == "mvme68k")
15TARGET_ARCH=	m68k
16.elif	(${TARGET} == "aviion" || ${TARGET} == "luna88k" || \
17	 ${TARGET} == "mvme88k")
18TARGET_ARCH=	m88k
19.elif	(${TARGET} == "sgi" || ${TARGET} == "octeon")
20TARGET_ARCH=	mips64
21.elif	(${TARGET} == "loongson")
22TARGET_ARCH=	mips64el
23TARGET_CPU=	mips64
24.elif	(${TARGET} == "solbourne")
25TARGET_ARCH=	sparc
26.elif	(${TARGET} == "macppc" || ${TARGET} == "socppc")
27TARGET_ARCH=	powerpc
28.elif	(${TARGET} == "landisk")
29TARGET_ARCH=	sh
30.else
31TARGET_ARCH=	${TARGET}
32.endif
33TARGET_CPU?=	${TARGET_ARCH}
34
35#CROSSCPPFLAGS?=	-nostdinc -I${CROSSDIR}/usr/include
36#CROSSLDFLAGS?=	-nostdlib -L${CROSSDIR}/usr/lib -static
37CROSSCFLAGS?=	${CROSSCPPFLAGS} -O2 ${PIPE} ${DEBUG}
38CROSSCXXFLAGS?=	${CROSSCPPFLAGS}
39#LDSTATIC?=	-static
40
41# XXX
42BINMODE?=555
43BINOWN?=root
44BINGRP?=bin
45
46CROSSDIR=	${DESTDIR}/usr/cross/${TARGET}
47CROSSENV=	AR=${CROSSDIR}/usr/${TARGET_CANON}/bin/ar \
48		AS=${CROSSDIR}/usr/${TARGET_CANON}/bin/as \
49		CC=${CROSSDIR}/usr/${TARGET_CANON}/bin/cc \
50		CPP=${CROSSDIR}/usr/${TARGET_CANON}/bin/cpp \
51		CXX=${CROSSDIR}/usr/${TARGET_CANON}/bin/c++ \
52		LD=${CROSSDIR}/usr/${TARGET_CANON}/bin/ld \
53		OBJCOPY=${CROSSDIR}/usr/${TARGET_CANON}/bin/objcopy \
54		LORDER=/usr/bin/lorder RANLIB=${CROSSDIR}/usr/${TARGET_CANON}/bin/ranlib \
55		STRIP=${CROSSDIR}/usr/${TARGET_CANON}/bin/strip \
56		HOSTCC=\"${CC}\" HOSTCXX=\"${CXX}\" NOMAN= \
57		HOSTCFLAGS=\"${CFLAGS}\" HOSTCXXFLAGS=\"${CXXFLAGS}\" \
58		HOSTLDFLAGS=\"${LDFLAGS}\" \
59		CFLAGS=\"${CROSSCFLAGS}\" CPPFLAGS=\"${CROSSCPPFLAGS}\" \
60		CXXFLAGS=\"${CROSSCXXFLAGS}\" \
61		LDFLAGS=\"${CROSSLDFLAGS}\"
62CROSSADDPATH=:${CROSSDIR}/usr/${TARGET_CANON}/bin
63CROSSPATH=	/usr/bin:/bin:/usr/sbin:/sbin${CROSSADDPATH}
64CROSSLANGS?=	c c++
65
66TARGET_CANON=`cat ${CROSSDIR}/TARGET_CANON`
67
68CROSSDIRS=	${CROSSDIR}/.dirs_done
69CROSSOBJ=	${CROSSDIR}/.obj_done
70CROSSINCLUDES=	${CROSSDIR}/.includes_done
71CROSSBINUTILS=	${CROSSDIR}/.binutils_done
72CROSSGCC=	${CROSSDIR}/.gcc_done
73#NO_CROSS=	isakmpd keynote ssh
74
75GCC2_ARCH=m68k m88k sparc vax
76GCC4_ARCH=amd64 hppa hppa64 i386 mips64* powerpc sparc64
77BINUTILS217_ARCH=ia64 hppa64
78OLD_BINUTILS_ARCH=m68k m88k vax
79
80.for _arch in ${TARGET_ARCH}
81.if !empty(GCC2_ARCH:M${_arch})
82USE_GCC3?=no
83TARGET_USE_GCC3=No
84COMPILER_VERSION?=gcc2
85.elif !empty(GCC4_ARCH:M${_arch})
86TARGET_USE_GCC4=Yes
87COMPILER_VERSION?=gcc4
88.else
89TARGET_USE_GCC3=Yes
90COMPILER_VERSION?=gcc3
91.endif
92
93.if !empty(BINUTILS217_ARCH:M${_arch})
94BINUTILS_VERSION=binutils-2.17
95.else
96BINUTILS_VERSION=binutils
97.endif
98
99.if !empty(OLD_BINUTILS_ARCH:M${_arch})
100NEW_BINUTILS?=	No
101BINUTILS=	ar as ld nm ranlib objcopy objdump strings strip
102.else
103NEW_BINUTILS?=	Yes
104BINUTILS=	ar as gasp ld nm objcopy objdump ranlib readelf size \
105		strings strip
106.endif
107BINUTILS_DIR=gnu/usr.bin/${BINUTILS_VERSION}
108.endfor
109
110# no libcrypto.... these won't build
111#NO_CROSS+=	dc login_krb5 login_krb5-or-pwd passwd ppp tcpdump telnet \
112#		ftp gzsig sasyncd vnconfig
113		
114# need host setup for ydr
115NO_CROSS+=afs
116# explicit cross-compile
117NO_CROSS+=bind
118NO_CROSS+=httpd
119NO_CROSS+=microcode
120NO_CROSS+=groff lynx binutils binutils-2.17 perl texinfo gcc cvs
121NO_CROSS+=nsd
122
123cross-dirs:	${CROSSDIRS}
124cross-obj:	${CROSSOBJ}
125cross-includes:	${CROSSINCLUDES}
126cross-binutils:	${CROSSBINUTILS}
127cross-gcc:	${CROSSGCC}
128
129cross-env:
130	@echo ${CROSSENV} MACHINE=${TARGET} \
131	    MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \
132	    MACHINE_CPU=`cat ${CROSSDIR}/TARGET_CPU` \
133	    BSDOBJDIR=${CROSSDIR}/usr/obj \
134	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET}
135
136${CROSSDIRS}:
137	@-mkdir -p ${CROSSDIR}
138	@echo ${TARGET_ARCH} > ${CROSSDIR}/TARGET_ARCH
139	@echo TARGET_ARCH is `cat ${CROSSDIR}/TARGET_ARCH`
140	@echo ${TARGET_CPU} > ${CROSSDIR}/TARGET_CPU
141	@echo TARGET_CPU is `cat ${CROSSDIR}/TARGET_CPU`
142	@eval `grep '^osr=' sys/conf/newvers.sh`; \
143	   echo ${TARGET_ARCH}-unknown-openbsd$$osr > \
144	   ${CROSSDIR}/TARGET_CANON
145	@-mkdir -p ${CROSSDIR}
146	@-mkdir -p ${CROSSDIR}/usr/${TARGET_CANON}
147	@ln -sf ${CROSSDIR}/usr/include \
148	    ${CROSSDIR}/usr/${TARGET_CANON}/include
149	@ln -sf ${CROSSDIR}/usr/lib \
150	    ${CROSSDIR}/usr/${TARGET_CANON}/lib
151	@-mkdir -p ${CROSSDIR}/usr/${TARGET_CANON}/bin
152	@(cd ${.CURDIR}/etc && DESTDIR=${CROSSDIR} ${MAKE} distrib-dirs)
153	@touch ${CROSSDIRS}
154
155${CROSSOBJ}:	${CROSSDIRS}
156	@-mkdir -p ${CROSSDIR}/usr/obj
157	@(cd ${.CURDIR} && \
158	    BSDOBJDIR=${CROSSDIR}/usr/obj \
159	    COMPILER_VERSION=${COMPILER_VERSION} \
160	    MACHINE=${TARGET} \
161	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU} \
162	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
163	    ${MAKE} obj)
164	@touch ${CROSSOBJ}
165
166${CROSSINCLUDES}:	${CROSSOBJ}
167	@-mkdir -p ${CROSSDIR}/usr/include
168	@(cd ${.CURDIR}/include && \
169	    COMPILER_VERSION=${COMPILER_VERSION} \
170	    MACHINE=${TARGET} \
171	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU} \
172	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
173	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
174	    ${MAKE} prereq && \
175	    COMPILER_VERSION=${COMPILER_VERSION} \
176	    MACHINE=${TARGET} \
177	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU} \
178	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
179	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
180	    ${MAKE} DESTDIR=${CROSSDIR} includes)
181	@touch ${CROSSINCLUDES}
182
183${CROSSBINUTILS}:	${CROSSINCLUDES}
184	(cd ${.CURDIR}/${BINUTILS_DIR}; \
185	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
186	    USING_NEW_BINUTILS=${NEW_BINUTILS} \
187	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
188	    PATH=${CROSSPATH} \
189	    ${MAKE} -f Makefile.bsd-wrapper depend && \
190	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
191	    USING_NEW_BINUTILS=${NEW_BINUTILS} \
192	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
193	    ${MAKE} -f Makefile.bsd-wrapper all && \
194	    DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
195	    COMPILER_VERSION=${COMPILER_VERSION} \
196	    USING_NEW_BINUTILS=${NEW_BINUTILS} \
197	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
198	    USING_NEW_BINUTILS=${NEW_BINUTILS} \
199	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
200	    ${MAKE} -f Makefile.bsd-wrapper install)
201.if ${NEW_BINUTILS:L} != "yes"
202	(cd ${.CURDIR}/gnu/usr.bin/gas; \
203	    TARGET_MACHINE_ARCH=${TARGET_ARCH} \
204	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} depend all; \
205	    TARGET_MACHINE_ARCH=${TARGET_ARCH} \
206	    DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
207	    ${MAKE} NOMAN= install)
208	ln -sf ${CROSSDIR}/usr/bin/as \
209	    ${CROSSDIR}/usr/${TARGET_CANON}/bin/as
210	(cd ${.CURDIR}/gnu/usr.bin/ld; \
211	    TARGET_MACHINE_ARCH=${TARGET_ARCH} \
212	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
213	    ${MAKE} NOPIC= NOMAN= depend all; \
214	    TARGET_MACHINE_ARCH=${TARGET_ARCH} \
215	    DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
216	    ${MAKE} NOPIC= NOMAN= install)
217	ln -sf ${CROSSDIR}/usr/bin/ld \
218	    ${CROSSDIR}/usr/${TARGET_CANON}/bin/ld
219	(cd ${.CURDIR}/usr.bin/ar; \
220	    ELF_TOOLCHAIN=no \
221	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN= depend all; \
222	    ELF_TOOLCHAIN=no \
223	    DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
224	    ${MAKE} NOMAN= install)
225	ln -sf ${CROSSDIR}/usr/bin/ar \
226	    ${CROSSDIR}/usr/${TARGET_CANON}/bin/ar
227	@(cd ${.CURDIR}/usr.bin/ranlib; \
228	    ELF_TOOLCHAIN=no \
229	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN= depend all; \
230	    ELF_TOOLCHAIN=no \
231	    DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
232	    ${MAKE} NOMAN= install)
233	ln -sf ${CROSSDIR}/usr/bin/ranlib \
234	    ${CROSSDIR}/usr/${TARGET_CANON}/bin/ranlib
235	(cd ${.CURDIR}/usr.bin/strip; \
236	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
237	    ${MAKE} TARGET_MACHINE_ARCH=${TARGET_ARCH} \
238	    NOMAN= depend all; \
239	    DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
240	    ${MAKE} TARGET_MACHINE_ARCH=${TARGET_ARCH} \
241	    NOMAN= install)
242	ln -sf ${CROSSDIR}/usr/bin/strip \
243	    ${CROSSDIR}/usr/${TARGET_CANON}/bin/strip
244.endif
245	@for cmd in ${BINUTILS}; do \
246	 if [ -e ${CROSSDIR}/usr/bin/${TARGET_CANON}-$$cmd ] ; then \
247	    cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-$$cmd \
248	        ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-$$cmd ; \
249	    ln -sf ${TARGET_CANON}-$$cmd \
250		${CROSSDIR}/usr/${TARGET_CANON}/bin/$$cmd ;\
251	   if [ -e ${CROSSDIR}/usr/bin/$$cmd ] ; then \
252	    rm -f ${CROSSDIR}/usr/bin/$$cmd ;\
253	   fi ;\
254	 elif [ -e ${CROSSDIR}/usr/bin/$$cmd ] ; then \
255	    cp -f ${CROSSDIR}/usr/bin/$$cmd \
256	        ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-$$cmd ; \
257	    ln -sf ${TARGET_CANON}-$$cmd \
258		${CROSSDIR}/usr/${TARGET_CANON}/bin/$$cmd ;\
259	    mv ${CROSSDIR}/usr/bin/$$cmd \
260		${CROSSDIR}/usr/bin/${TARGET_CANON}-$$cmd ;\
261	 fi ;\
262	done
263	@touch ${CROSSBINUTILS}
264
265
266${CROSSGCC}:		${CROSSBINUTILS}
267.if ${COMPILER_VERSION:L} == "gcc4"
268	(cd ${.CURDIR}/gnu/usr.bin/cc; \
269	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
270	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
271	    CROSSDIR=${CROSSDIR} \
272	    MACHINE=${TARGET} \
273	    PATH=${CROSSPATH} ${MAKE} depend  )
274	(cd ${.CURDIR}/gnu/usr.bin/cc; \
275	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
276	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
277	    CROSSDIR=${CROSSDIR} \
278	    MACHINE=${TARGET} \
279	    ${MAKE} all )
280	(cd ${.CURDIR}/gnu/usr.bin/cc; \
281	    env CROSSDIR=${CROSSDIR} DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
282	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
283	    MACHINE=${TARGET} \
284	    PATH=${CROSSPATH} ${MAKE} install)
285	cp -f ${CROSSDIR}/usr/bin/g++  ${CROSSDIR}/usr/bin/${TARGET_CANON}-g++ 
286	cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-g++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-c++
287	cp -f ${CROSSDIR}/usr/libexec/cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp
288	cp -f ${CROSSDIR}/usr/bin/gcc ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc
289	ln -sf ${TARGET_CANON}-cc ${CROSSDIR}/usr/${TARGET_CANON}/bin/cc
290
291	cp -f ${CROSSDIR}/usr/bin/gcc ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc
292	rm -f ${CROSSDIR}/usr/bin/gcc  ${CROSSDIR}/usr/bin/g++  ${CROSSDIR}/usr/bin/cc ${CROSSDIR}/usr/libexec/cpp 
293	# fix links
294	rm -f ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
295	sed -e 's#/usr/libexec/cpp#${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp#' \
296	    -e 's/@GNUC@//' \
297	    -e 's#/usr/include#${CROSSDIR}/usr/include#' \
298	    -e 's/@dollaropt@//' \
299	    ${.CURDIR}/usr.bin/cpp/cpp.sh > ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
300	chmod ${BINMODE} ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
301	chown ${BINOWN}:${BINGRP} ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
302	ln -sf ${TARGET_CANON}-cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/cpp
303.elif ${COMPILER_VERSION:L} == "gcc3"
304	(cd ${.CURDIR}/gnu/usr.bin/gcc; \
305	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
306	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
307	    CROSSDIR=${CROSSDIR} \
308	    PATH=${CROSSPATH} ${MAKE} -f Makefile.bsd-wrapper depend && \
309	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
310	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
311	    CROSSDIR=${CROSSDIR} \
312	    ${MAKE} -f Makefile.bsd-wrapper all && \
313	    env CROSSDIR=${CROSSDIR} DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
314	    PATH=${CROSSPATH} ${MAKE} -f Makefile.bsd-wrapper install)
315	cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-g++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-c++
316	cp -f ${CROSSDIR}/usr/bin/gcc ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc
317	cp -f ${CROSSDIR}/usr/libexec/cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp
318	rm -f ${CROSSDIR}/usr/bin/gcc  ${CROSSDIR}/usr/bin/cc ${CROSSDIR}/usr/libexec/cpp 
319	ln -sf ${TARGET_CANON}-cc ${CROSSDIR}/usr/${TARGET_CANON}/bin/cc
320	ln -sf ${TARGET_CANON}-c++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/c++
321	rm -f ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
322	sed -e 's#/usr/libexec/cpp#${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp#' \
323	    -e 's/@GNUC@/-D__GNUC__/' \
324	    -e 's#/usr/include#${CROSSDIR}/usr/include#' \
325	    -e 's/@dollaropt@//' \
326	    ${.CURDIR}/usr.bin/cpp/cpp.sh > ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
327	chmod ${BINMODE} ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
328	chown ${BINOWN}:${BINGRP} ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
329	ln -sf ${TARGET_CANON}-cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/cpp
330.else
331	(cd ${CROSSDIR}/usr/obj/gnu/egcs/gcc; \
332	    /bin/sh ${.CURDIR}/gnu/egcs/gcc/configure \
333	    --with-gnu-as --with-gnu-ld --prefix ${CROSSDIR}/usr \
334	    --target ${TARGET_CANON} \
335	    --enable-languages="c,c++" --enable-cpp --disable-nls \
336	    --with-gxx-include-dir=${CROSSDIR}/usr/include/g++ && \
337	    PATH=${CROSSPATH} ${MAKE} BISON=yacc LANGUAGES="${CROSSLANGS}" \
338	    CFLAGS="${CFLAGS} -I${.CURDIR}/gnu/lib/libiberty/include" \
339	    LIBIBERTY_INCLUDES=${.CURDIR}/gnu/lib/libiberty/include \
340	    DEMANGLER_PROG= DEMANGLE_H= LDFLAGS="${LDSTATIC}" build_infodir=. \
341	    GCC_FOR_TARGET="./xgcc -B./ -I${CROSSDIR}/usr/include" && \
342	    ${MAKE} BISON=yacc LANGUAGES="${CROSSLANGS}" LDFLAGS="${LDSTATIC}" \
343	    GCC_FOR_TARGET="./xgcc -B./ -I${CROSSDIR}/usr/include" \
344	    CFLAGS="${CFLAGS} -I${.CURDIR}/gnu/lib/libiberty/include" \
345	    LIBIBERTY_INCLUDES=${.CURDIR}/gnu/lib/libiberty/include \
346	    build_infodir=. INSTALL_MAN= INSTALL_HEADERS_DIR= install)
347	mv -f ${CROSSDIR}/usr/bin/cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp
348	rm -f ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
349	sed -e 's#/usr/libexec/cpp#${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp#' \
350	    -e 's/@GNUC@/-D__GNUC__/' \
351	    -e 's#/usr/include#${CROSSDIR}/usr/include#' \
352	    -e 's/@dollaropt@/-$$/' ${.CURDIR}/usr.bin/cpp/cpp.sh > \
353	    ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
354	chmod ${BINMODE} \
355	    ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp
356	chown ${BINOWN}:${BINGRP}\
357	    ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
358	ln -sf ${TARGET_CANON}-cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/cpp
359	ln -sf gcc ${CROSSDIR}/usr/${TARGET_CANON}/bin/cc
360	ln -sf gcc ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc
361	cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-g++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-c++
362	ln -sf ${TARGET_CANON}-c++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/c++
363.endif
364	@touch ${CROSSGCC}
365
366# XXX MAKEOBJDIR maybe should be obj.${TARGET} here, revisit later
367cross-lib:	${CROSSGCC}
368	MACHINE=${TARGET} \
369	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
370	export MACHINE MACHINE_ARCH MACHINE_CPU; \
371	(cd ${.CURDIR}/lib; \
372	    for lib in csu libc; do \
373	    (cd $$lib; \
374	        eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
375		    ${MAKE} WANTLINT=no depend all ;\
376	        eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} DESTDIR=${CROSSDIR} \
377		    ${MAKE} WANTLINT=no install); \
378	    done; \
379	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
380	        SKIPDIR=\"${NO_CROSS} libocurses/PSD.doc\" \
381	        ${MAKE} WANTLINT=no depend all ; \
382	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} DESTDIR=${CROSSDIR} \
383	        SKIPDIR=\"${NO_CROSS} libocurses/PSD.doc\" \
384	        ${MAKE} WANTLINT=no install)
385
386cross-bin:	${CROSSOBJ}
387	MACHINE=${TARGET} \
388	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
389	export MACHINE MACHINE_ARCH MACHINE_CPU; \
390	for i in libexec bin sbin usr.bin usr.sbin; do \
391	(cd ${.CURDIR}/$$i; \
392	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
393	        SKIPDIR=\"${BINUTILS} ${NO_CROSS}\" \
394	        ${MAKE} depend all ; \
395	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} DESTDIR=${CROSSDIR} \
396	        SKIPDIR=\"${BINUTILS} ${NO_CROSS}\" \
397	        ${MAKE} install); \
398	done
399
400cross-gnu:	${CROSSOBJ}
401	MACHINE=${TARGET} \
402	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
403	export MACHINE MACHINE_ARCH MACHINE_CPU; \
404	for i in gnu/lib gnu/usr.sbin gnu/usr.bin ; do \
405	(cd ${.CURDIR}/$$i; \
406	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
407	        SKIPDIR=\"${NO_CROSS}\" \
408	        ${MAKE} depend all ; \
409	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} DESTDIR=${CROSSDIR} \
410	        SKIPDIR=\"${NO_CROSS}\" \
411	        ${MAKE} install); \
412	done
413
414cross-share:   ${CROSSOBJ}
415	MACHINE=${TARGET} \
416	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
417	export MACHINE MACHINE_ARCH MACHINE_CPU; \
418	for i in share; do \
419	    (cd ${.CURDIR}/$$i; \
420	        eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
421		SKIPDIR=\"${NO_CROSS}\" \
422		${MAKE} depend all install); \
423	done
424
425cross-sys:   ${CROSSOBJ}
426	MACHINE=${TARGET} \
427	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
428	export MACHINE MACHINE_ARCH MACHINE_CPU; \
429	for i in sys; do \
430	    (cd ${.CURDIR}/$$i; \
431	        eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
432		SKIPDIR=\"${NO_CROSS}\" \
433		${MAKE} depend all install); \
434	done
435
436cross-etc-root-var:	${CROSSOBJ}
437	(cd ${.CURDIR}/etc && \
438	    MACHINE=${TARGET} \
439	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU} \
440	    DESTDIR=${CROSSDIR} \
441	    ${MAKE} distribution-etc-root-var)
442
443cross-depend:
444	@(cd ${.CURDIR} && \
445	    BSDOBJDIR=${CROSSDIR}/usr/obj \
446	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
447	    SKIPDIR="${NO_CROSS}" \
448	    ${MAKE} depend)
449
450cross-clean:
451	@(cd ${.CURDIR} && \
452	    BSDOBJDIR=${CROSSDIR}/usr/obj \
453	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
454	    SKIPDIR="${NO_CROSS}" \
455	    ${MAKE} clean)
456
457cross-cleandir:
458	@(cd ${.CURDIR} && \
459	    BSDOBJDIR=${CROSSDIR}/usr/obj \
460	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
461	    SKIPDIR="${NO_CROSS}" \
462	    ${MAKE} cleandir)
463