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