xref: /openbsd/Makefile.cross (revision b14edc4d)
1*b14edc4dSdrahn# $OpenBSD: Makefile.cross,v 1.49 2011/11/11 12:26:54 drahn Exp $
2a222f159Sespie
3a222f159Sespiecross-tools:	cross-includes cross-binutils cross-gcc cross-lib
4a071a6c7Sdrahncross-distrib:	cross-tools cross-bin cross-share cross-sys cross-etc-root-var
5a071a6c7Sdrahn# cross-gnu \
6a222f159Sespie
7a78fab76Smiod# Have to compute TARGET_ARCH directly in the Makefile, for .if tests involving
8a78fab76Smiod# this variable to work.
943421439Smatthieu.if	(${TARGET} == "armish" || ${TARGET} == "beagle" || \
1039646eb4Sdrahn	 ${TARGET} == "gumstix" || ${TARGET} == "palm" || \
1139646eb4Sdrahn	 ${TARGET} == "zaurus")
12a78fab76SmiodTARGET_ARCH=	arm
13a78fab76Smiod.elif	(${TARGET} == "hp300" || ${TARGET} == "mac68k" || \
14a78fab76Smiod	 ${TARGET} == "mvme68k")
15a78fab76SmiodTARGET_ARCH=	m68k
16ad744452Smiod.elif	(${TARGET} == "aviion" || ${TARGET} == "luna88k" || \
17ad744452Smiod	 ${TARGET} == "mvme88k")
18a78fab76SmiodTARGET_ARCH=	m88k
19c3ed6a03Ssyuu.elif	(${TARGET} == "sgi" || ${TARGET} == "octeon")
20a78fab76SmiodTARGET_ARCH=	mips64
2156074f2fSmiod.elif	(${TARGET} == "loongson")
2256074f2fSmiodTARGET_ARCH=	mips64el
2356074f2fSmiodTARGET_CPU=	mips64
24990b83faSderaadt.elif	(${TARGET} == "solbourne")
25990b83faSderaadtTARGET_ARCH=	sparc
265b036de8Sderaadt.elif	(${TARGET} == "macppc" || ${TARGET} == "socppc")
27a78fab76SmiodTARGET_ARCH=	powerpc
282f050487Smiod.elif	(${TARGET} == "landisk")
292f050487SmiodTARGET_ARCH=	sh
30a78fab76Smiod.else
31a78fab76SmiodTARGET_ARCH=	${TARGET}
32a78fab76Smiod.endif
3356074f2fSmiodTARGET_CPU?=	${TARGET_ARCH}
34a78fab76Smiod
35a732d4d4Sguenther# List of LP64 archs
36a732d4d4Sguenther# XXX move to bsd.*.mk?
37a732d4d4SguentherLP64_ARCH = amd64 alpha hppa64 ia64 mips64 sparc64 vax64
38a732d4d4Sguenther
39a732d4d4SguentherTARGET_IS_LP64 =
40a732d4d4SguentherMACHINE_IS_LP64 =
41a732d4d4Sguenther.for _ in ${LP64_ARCH}
42a732d4d4Sguenther. if !empty(TARGET_ARCH:M$_)
43a732d4d4Sguenther    TARGET_IS_LP64 = yes
44a732d4d4Sguenther. endif
45a732d4d4Sguenther. if !empty(MACHINE_ARCH:M$_)
46a732d4d4Sguenther    MACHINE_IS_LP64 = yes
47a732d4d4Sguenther. endif
48a732d4d4Sguenther.endfor
49a732d4d4Sguenther
50a071a6c7Sdrahn#CROSSCPPFLAGS?=	-nostdinc -I${CROSSDIR}/usr/include
51a071a6c7Sdrahn#CROSSLDFLAGS?=	-nostdlib -L${CROSSDIR}/usr/lib -static
52a071a6c7SdrahnCROSSCFLAGS?=	${CROSSCPPFLAGS} -O2 ${PIPE} ${DEBUG}
53a222f159SespieCROSSCXXFLAGS?=	${CROSSCPPFLAGS}
54a071a6c7Sdrahn#LDSTATIC?=	-static
55a071a6c7Sdrahn
56a071a6c7Sdrahn# XXX
57a071a6c7SdrahnBINMODE?=555
58a071a6c7SdrahnBINOWN?=root
59a8ae43d8SmpiBINGRP?=bin
60a222f159Sespie
61a222f159SespieCROSSDIR=	${DESTDIR}/usr/cross/${TARGET}
62a071a6c7SdrahnCROSSENV=	AR=${CROSSDIR}/usr/${TARGET_CANON}/bin/ar \
63a071a6c7Sdrahn		AS=${CROSSDIR}/usr/${TARGET_CANON}/bin/as \
64a071a6c7Sdrahn		CC=${CROSSDIR}/usr/${TARGET_CANON}/bin/cc \
65a071a6c7Sdrahn		CPP=${CROSSDIR}/usr/${TARGET_CANON}/bin/cpp \
66a071a6c7Sdrahn		CXX=${CROSSDIR}/usr/${TARGET_CANON}/bin/c++ \
67a071a6c7Sdrahn		LD=${CROSSDIR}/usr/${TARGET_CANON}/bin/ld \
68a071a6c7Sdrahn		OBJCOPY=${CROSSDIR}/usr/${TARGET_CANON}/bin/objcopy \
69a071a6c7Sdrahn		LORDER=/usr/bin/lorder RANLIB=${CROSSDIR}/usr/${TARGET_CANON}/bin/ranlib \
70a071a6c7Sdrahn		STRIP=${CROSSDIR}/usr/${TARGET_CANON}/bin/strip \
71a071a6c7Sdrahn		HOSTCC=\"${CC}\" HOSTCXX=\"${CXX}\" NOMAN= \
72a222f159Sespie		HOSTCFLAGS=\"${CFLAGS}\" HOSTCXXFLAGS=\"${CXXFLAGS}\" \
73a222f159Sespie		HOSTLDFLAGS=\"${LDFLAGS}\" \
74a222f159Sespie		CFLAGS=\"${CROSSCFLAGS}\" CPPFLAGS=\"${CROSSCPPFLAGS}\" \
75a222f159Sespie		CXXFLAGS=\"${CROSSCXXFLAGS}\" \
76a222f159Sespie		LDFLAGS=\"${CROSSLDFLAGS}\"
77a071a6c7SdrahnCROSSADDPATH=:${CROSSDIR}/usr/${TARGET_CANON}/bin
78a071a6c7SdrahnCROSSPATH=	/usr/bin:/bin:/usr/sbin:/sbin${CROSSADDPATH}
79a222f159SespieCROSSLANGS?=	c c++
80a222f159Sespie
81141bf37aSespieTARGET_CANON=`cat ${CROSSDIR}/TARGET_CANON`
82141bf37aSespie
83a222f159SespieCROSSDIRS=	${CROSSDIR}/.dirs_done
84a071a6c7SdrahnCROSSOBJ=	${CROSSDIR}/.obj_done
85a071a6c7SdrahnCROSSINCLUDES=	${CROSSDIR}/.includes_done
86a071a6c7SdrahnCROSSBINUTILS=	${CROSSDIR}/.binutils_done
87a071a6c7SdrahnCROSSGCC=	${CROSSDIR}/.gcc_done
88bab9f9c3Sdjm#NO_CROSS=	isakmpd keynote ssh
89a222f159Sespie
90*b14edc4dSdrahn.include <bsd.own.mk>
91*b14edc4dSdrahn
926018e286SkettenisBINUTILS217_ARCH=hppa64 ia64
939102a13aSdrahnOLD_BINUTILS_ARCH=m68k m88k vax
949102a13aSdrahn
959102a13aSdrahn.for _arch in ${TARGET_ARCH}
969102a13aSdrahn.if !empty(GCC2_ARCH:M${_arch})
979102a13aSdrahnUSE_GCC3?=no
9888ff6307SdrahnTARGET_USE_GCC3=No
999102a13aSdrahnCOMPILER_VERSION?=gcc2
1009102a13aSdrahn.elif !empty(GCC4_ARCH:M${_arch})
10188ff6307SdrahnTARGET_USE_GCC4=Yes
1029102a13aSdrahnCOMPILER_VERSION?=gcc4
10388ff6307Sdrahn.else
10488ff6307SdrahnTARGET_USE_GCC3=Yes
1059102a13aSdrahnCOMPILER_VERSION?=gcc3
10688ff6307Sdrahn.endif
10788ff6307Sdrahn
1089102a13aSdrahn.if !empty(BINUTILS217_ARCH:M${_arch})
1099102a13aSdrahnBINUTILS_VERSION=binutils-2.17
1109102a13aSdrahn.else
1119102a13aSdrahnBINUTILS_VERSION=binutils
1129102a13aSdrahn.endif
1139102a13aSdrahn
1149102a13aSdrahn.if !empty(OLD_BINUTILS_ARCH:M${_arch})
1159102a13aSdrahnNEW_BINUTILS?=	No
1169102a13aSdrahnBINUTILS=	ar as ld nm ranlib objcopy objdump strings strip
1179102a13aSdrahn.else
1189102a13aSdrahnNEW_BINUTILS?=	Yes
1199102a13aSdrahnBINUTILS=	ar as gasp ld nm objcopy objdump ranlib readelf size \
1209102a13aSdrahn		strings strip
1219102a13aSdrahn.endif
1229102a13aSdrahnBINUTILS_DIR=gnu/usr.bin/${BINUTILS_VERSION}
1239102a13aSdrahn.endfor
1249102a13aSdrahn
125141bf37aSespie# no libcrypto.... these won't build
126a071a6c7Sdrahn#NO_CROSS+=	dc login_krb5 login_krb5-or-pwd passwd ppp tcpdump telnet \
127a071a6c7Sdrahn#		ftp gzsig sasyncd vnconfig
128a071a6c7Sdrahn
129141bf37aSespie# need host setup for ydr
130141bf37aSespieNO_CROSS+=afs
131141bf37aSespie# explicit cross-compile
132141bf37aSespieNO_CROSS+=bind
133a071a6c7SdrahnNO_CROSS+=httpd
134a071a6c7SdrahnNO_CROSS+=microcode
1359102a13aSdrahnNO_CROSS+=groff lynx binutils binutils-2.17 perl texinfo gcc cvs
136e3bab464SdrahnNO_CROSS+=nsd
137141bf37aSespie
138a222f159Sespiecross-dirs:	${CROSSDIRS}
139a222f159Sespiecross-obj:	${CROSSOBJ}
140a222f159Sespiecross-includes:	${CROSSINCLUDES}
141a222f159Sespiecross-binutils:	${CROSSBINUTILS}
142a222f159Sespiecross-gcc:	${CROSSGCC}
143a222f159Sespie
144a222f159Sespiecross-env:
145a222f159Sespie	@echo ${CROSSENV} MACHINE=${TARGET} \
146d49bf4ccSmickey	    MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \
14756074f2fSmiod	    MACHINE_CPU=`cat ${CROSSDIR}/TARGET_CPU` \
148d49bf4ccSmickey	    BSDOBJDIR=${CROSSDIR}/usr/obj \
149d49bf4ccSmickey	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET}
150a222f159Sespie
151a222f159Sespie${CROSSDIRS}:
152*b14edc4dSdrahn.if ${TARGET_ARCH} == "arm" &&  ${MACHINE_IS_LP64} == "yes"
153*b14edc4dSdrahn	# this config is allowed
154*b14edc4dSdrahn.elif ${TARGET_IS_LP64} != ${MACHINE_IS_LP64}
155a732d4d4Sguenther	@echo "host and target have different size longs"
156a732d4d4Sguenther	@echo "cross compiler generates bad code; aborting"; exit 1
157a732d4d4Sguenther.endif
158a222f159Sespie	@-mkdir -p ${CROSSDIR}
159a78fab76Smiod	@echo ${TARGET_ARCH} > ${CROSSDIR}/TARGET_ARCH
160a222f159Sespie	@echo TARGET_ARCH is `cat ${CROSSDIR}/TARGET_ARCH`
16156074f2fSmiod	@echo ${TARGET_CPU} > ${CROSSDIR}/TARGET_CPU
16256074f2fSmiod	@echo TARGET_CPU is `cat ${CROSSDIR}/TARGET_CPU`
163a222f159Sespie	@eval `grep '^osr=' sys/conf/newvers.sh`; \
16456074f2fSmiod	   echo ${TARGET_ARCH}-unknown-openbsd$$osr > \
165a222f159Sespie	   ${CROSSDIR}/TARGET_CANON
166a222f159Sespie	@-mkdir -p ${CROSSDIR}
167141bf37aSespie	@-mkdir -p ${CROSSDIR}/usr/${TARGET_CANON}
168a222f159Sespie	@ln -sf ${CROSSDIR}/usr/include \
169141bf37aSespie	    ${CROSSDIR}/usr/${TARGET_CANON}/include
170a222f159Sespie	@ln -sf ${CROSSDIR}/usr/lib \
171141bf37aSespie	    ${CROSSDIR}/usr/${TARGET_CANON}/lib
172141bf37aSespie	@-mkdir -p ${CROSSDIR}/usr/${TARGET_CANON}/bin
173a222f159Sespie	@(cd ${.CURDIR}/etc && DESTDIR=${CROSSDIR} ${MAKE} distrib-dirs)
174a222f159Sespie	@touch ${CROSSDIRS}
175a222f159Sespie
176a222f159Sespie${CROSSOBJ}:	${CROSSDIRS}
177a222f159Sespie	@-mkdir -p ${CROSSDIR}/usr/obj
178a222f159Sespie	@(cd ${.CURDIR} && \
179a222f159Sespie	    BSDOBJDIR=${CROSSDIR}/usr/obj \
18088ff6307Sdrahn	    COMPILER_VERSION=${COMPILER_VERSION} \
181a222f159Sespie	    MACHINE=${TARGET} \
18256074f2fSmiod	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU} \
183a222f159Sespie	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
184a222f159Sespie	    ${MAKE} obj)
185a222f159Sespie	@touch ${CROSSOBJ}
186a222f159Sespie
187a222f159Sespie${CROSSINCLUDES}:	${CROSSOBJ}
188a222f159Sespie	@-mkdir -p ${CROSSDIR}/usr/include
189a222f159Sespie	@(cd ${.CURDIR}/include && \
19088ff6307Sdrahn	    COMPILER_VERSION=${COMPILER_VERSION} \
19156074f2fSmiod	    MACHINE=${TARGET} \
19256074f2fSmiod	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU} \
193a222f159Sespie	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
19456074f2fSmiod	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
195a222f159Sespie	    ${MAKE} prereq && \
19688ff6307Sdrahn	    COMPILER_VERSION=${COMPILER_VERSION} \
19756074f2fSmiod	    MACHINE=${TARGET} \
19856074f2fSmiod	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU} \
199a222f159Sespie	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
20056074f2fSmiod	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
201a222f159Sespie	    ${MAKE} DESTDIR=${CROSSDIR} includes)
202a222f159Sespie	@touch ${CROSSINCLUDES}
203a222f159Sespie
204a222f159Sespie${CROSSBINUTILS}:	${CROSSINCLUDES}
2059102a13aSdrahn	(cd ${.CURDIR}/${BINUTILS_DIR}; \
206a222f159Sespie	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
207e829c094Smiod	    USING_NEW_BINUTILS=${NEW_BINUTILS} \
20856074f2fSmiod	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
20956074f2fSmiod	    PATH=${CROSSPATH} \
210a222f159Sespie	    ${MAKE} -f Makefile.bsd-wrapper depend && \
211a222f159Sespie	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
212e829c094Smiod	    USING_NEW_BINUTILS=${NEW_BINUTILS} \
21356074f2fSmiod	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
214a222f159Sespie	    ${MAKE} -f Makefile.bsd-wrapper all && \
215a222f159Sespie	    DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
21688ff6307Sdrahn	    COMPILER_VERSION=${COMPILER_VERSION} \
217e829c094Smiod	    USING_NEW_BINUTILS=${NEW_BINUTILS} \
21856074f2fSmiod	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
21956074f2fSmiod	    USING_NEW_BINUTILS=${NEW_BINUTILS} \
22056074f2fSmiod	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
221a222f159Sespie	    ${MAKE} -f Makefile.bsd-wrapper install)
222e829c094Smiod.if ${NEW_BINUTILS:L} != "yes"
223a222f159Sespie	(cd ${.CURDIR}/gnu/usr.bin/gas; \
224141bf37aSespie	    TARGET_MACHINE_ARCH=${TARGET_ARCH} \
225a222f159Sespie	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} depend all; \
226141bf37aSespie	    TARGET_MACHINE_ARCH=${TARGET_ARCH} \
227a222f159Sespie	    DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
228a222f159Sespie	    ${MAKE} NOMAN= install)
229a222f159Sespie	ln -sf ${CROSSDIR}/usr/bin/as \
2304149f057Smiod	    ${CROSSDIR}/usr/${TARGET_CANON}/bin/as
231a222f159Sespie	(cd ${.CURDIR}/gnu/usr.bin/ld; \
232141bf37aSespie	    TARGET_MACHINE_ARCH=${TARGET_ARCH} \
233a222f159Sespie	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
234a222f159Sespie	    ${MAKE} NOPIC= NOMAN= depend all; \
235141bf37aSespie	    TARGET_MACHINE_ARCH=${TARGET_ARCH} \
236a222f159Sespie	    DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
237a222f159Sespie	    ${MAKE} NOPIC= NOMAN= install)
238a222f159Sespie	ln -sf ${CROSSDIR}/usr/bin/ld \
239141bf37aSespie	    ${CROSSDIR}/usr/${TARGET_CANON}/bin/ld
240a222f159Sespie	(cd ${.CURDIR}/usr.bin/ar; \
241a57924a5Smiod	    ELF_TOOLCHAIN=no \
242a222f159Sespie	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN= depend all; \
243a57924a5Smiod	    ELF_TOOLCHAIN=no \
244a222f159Sespie	    DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
245a222f159Sespie	    ${MAKE} NOMAN= install)
246a222f159Sespie	ln -sf ${CROSSDIR}/usr/bin/ar \
247141bf37aSespie	    ${CROSSDIR}/usr/${TARGET_CANON}/bin/ar
24888ff6307Sdrahn	@(cd ${.CURDIR}/usr.bin/ranlib; \
249a57924a5Smiod	    ELF_TOOLCHAIN=no \
250a222f159Sespie	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN= depend all; \
251a57924a5Smiod	    ELF_TOOLCHAIN=no \
252a222f159Sespie	    DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
253a222f159Sespie	    ${MAKE} NOMAN= install)
254a222f159Sespie	ln -sf ${CROSSDIR}/usr/bin/ranlib \
255141bf37aSespie	    ${CROSSDIR}/usr/${TARGET_CANON}/bin/ranlib
256a222f159Sespie	(cd ${.CURDIR}/usr.bin/strip; \
257a222f159Sespie	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
258141bf37aSespie	    ${MAKE} TARGET_MACHINE_ARCH=${TARGET_ARCH} \
259a222f159Sespie	    NOMAN= depend all; \
260a222f159Sespie	    DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
261141bf37aSespie	    ${MAKE} TARGET_MACHINE_ARCH=${TARGET_ARCH} \
262a222f159Sespie	    NOMAN= install)
263a222f159Sespie	ln -sf ${CROSSDIR}/usr/bin/strip \
264141bf37aSespie	    ${CROSSDIR}/usr/${TARGET_CANON}/bin/strip
265a222f159Sespie.endif
266a222f159Sespie	@for cmd in ${BINUTILS}; do \
267a071a6c7Sdrahn	 if [ -e ${CROSSDIR}/usr/bin/${TARGET_CANON}-$$cmd ] ; then \
268a071a6c7Sdrahn	    cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-$$cmd \
269a071a6c7Sdrahn	        ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-$$cmd ; \
270a071a6c7Sdrahn	    ln -sf ${TARGET_CANON}-$$cmd \
271141bf37aSespie		${CROSSDIR}/usr/${TARGET_CANON}/bin/$$cmd ;\
272a071a6c7Sdrahn	   if [ -e ${CROSSDIR}/usr/bin/$$cmd ] ; then \
273a071a6c7Sdrahn	    rm -f ${CROSSDIR}/usr/bin/$$cmd ;\
274a071a6c7Sdrahn	   fi ;\
275a071a6c7Sdrahn	 elif [ -e ${CROSSDIR}/usr/bin/$$cmd ] ; then \
276a071a6c7Sdrahn	    cp -f ${CROSSDIR}/usr/bin/$$cmd \
277a071a6c7Sdrahn	        ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-$$cmd ; \
278a071a6c7Sdrahn	    ln -sf ${TARGET_CANON}-$$cmd \
279a071a6c7Sdrahn		${CROSSDIR}/usr/${TARGET_CANON}/bin/$$cmd ;\
280a071a6c7Sdrahn	    mv ${CROSSDIR}/usr/bin/$$cmd \
281a071a6c7Sdrahn		${CROSSDIR}/usr/bin/${TARGET_CANON}-$$cmd ;\
282a222f159Sespie	 fi ;\
283a222f159Sespie	done
284a222f159Sespie	@touch ${CROSSBINUTILS}
285a222f159Sespie
286a222f159Sespie
287a222f159Sespie${CROSSGCC}:		${CROSSBINUTILS}
28888ff6307Sdrahn.if ${COMPILER_VERSION:L} == "gcc4"
28988ff6307Sdrahn	(cd ${.CURDIR}/gnu/usr.bin/cc; \
29088ff6307Sdrahn	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
29188ff6307Sdrahn	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
29288ff6307Sdrahn	    CROSSDIR=${CROSSDIR} \
29388ff6307Sdrahn	    MACHINE=${TARGET} \
29488ff6307Sdrahn	    PATH=${CROSSPATH} ${MAKE} depend  )
29588ff6307Sdrahn	(cd ${.CURDIR}/gnu/usr.bin/cc; \
29688ff6307Sdrahn	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
29788ff6307Sdrahn	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
29888ff6307Sdrahn	    CROSSDIR=${CROSSDIR} \
29988ff6307Sdrahn	    MACHINE=${TARGET} \
30088ff6307Sdrahn	    ${MAKE} all )
30188ff6307Sdrahn	(cd ${.CURDIR}/gnu/usr.bin/cc; \
30288ff6307Sdrahn	    env CROSSDIR=${CROSSDIR} DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
30388ff6307Sdrahn	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
30488ff6307Sdrahn	    MACHINE=${TARGET} \
30588ff6307Sdrahn	    PATH=${CROSSPATH} ${MAKE} install)
3068d925239Sdrahn	cp -f ${CROSSDIR}/usr/bin/g++  ${CROSSDIR}/usr/bin/${TARGET_CANON}-g++
30788ff6307Sdrahn	cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-g++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-c++
30888ff6307Sdrahn	cp -f ${CROSSDIR}/usr/libexec/cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp
3098d925239Sdrahn	cp -f ${CROSSDIR}/usr/bin/gcc ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc
31088ff6307Sdrahn	ln -sf ${TARGET_CANON}-cc ${CROSSDIR}/usr/${TARGET_CANON}/bin/cc
3118d925239Sdrahn
3128d925239Sdrahn	cp -f ${CROSSDIR}/usr/bin/gcc ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc
3138d925239Sdrahn	rm -f ${CROSSDIR}/usr/bin/gcc  ${CROSSDIR}/usr/bin/g++  ${CROSSDIR}/usr/bin/cc ${CROSSDIR}/usr/libexec/cpp
3148d925239Sdrahn	# fix links
31588ff6307Sdrahn	rm -f ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp
31688ff6307Sdrahn	sed -e 's#/usr/libexec/cpp#${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp#' \
317846f21d9Sdrahn	    -e 's/@GNUC@//' \
31888ff6307Sdrahn	    -e 's#/usr/include#${CROSSDIR}/usr/include#' \
31988ff6307Sdrahn	    -e 's/@dollaropt@//' \
32088ff6307Sdrahn	    ${.CURDIR}/usr.bin/cpp/cpp.sh > ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp
32188ff6307Sdrahn	chmod ${BINMODE} ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp
32288ff6307Sdrahn	chown ${BINOWN}:${BINGRP} ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp
32388ff6307Sdrahn	ln -sf ${TARGET_CANON}-cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/cpp
32488ff6307Sdrahn.elif ${COMPILER_VERSION:L} == "gcc3"
325a222f159Sespie	(cd ${.CURDIR}/gnu/usr.bin/gcc; \
326a222f159Sespie	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
32756074f2fSmiod	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
32856074f2fSmiod	    CROSSDIR=${CROSSDIR} \
329a071a6c7Sdrahn	    PATH=${CROSSPATH} ${MAKE} -f Makefile.bsd-wrapper depend && \
330a222f159Sespie	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
33156074f2fSmiod	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
33256074f2fSmiod	    CROSSDIR=${CROSSDIR} \
333a222f159Sespie	    ${MAKE} -f Makefile.bsd-wrapper all && \
334a071a6c7Sdrahn	    env CROSSDIR=${CROSSDIR} DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
335a071a6c7Sdrahn	    PATH=${CROSSPATH} ${MAKE} -f Makefile.bsd-wrapper install)
336a071a6c7Sdrahn	cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-g++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-c++
337a071a6c7Sdrahn	cp -f ${CROSSDIR}/usr/bin/gcc ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc
338a071a6c7Sdrahn	cp -f ${CROSSDIR}/usr/libexec/cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp
339a071a6c7Sdrahn	rm -f ${CROSSDIR}/usr/bin/gcc  ${CROSSDIR}/usr/bin/cc ${CROSSDIR}/usr/libexec/cpp
340a071a6c7Sdrahn	ln -sf ${TARGET_CANON}-cc ${CROSSDIR}/usr/${TARGET_CANON}/bin/cc
341a071a6c7Sdrahn	ln -sf ${TARGET_CANON}-c++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/c++
342a071a6c7Sdrahn	rm -f ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp
343a071a6c7Sdrahn	sed -e 's#/usr/libexec/cpp#${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp#' \
344846f21d9Sdrahn	    -e 's/@GNUC@/-D__GNUC__/' \
345a071a6c7Sdrahn	    -e 's#/usr/include#${CROSSDIR}/usr/include#' \
346a071a6c7Sdrahn	    -e 's/@dollaropt@//' \
347a071a6c7Sdrahn	    ${.CURDIR}/usr.bin/cpp/cpp.sh > ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp
348a071a6c7Sdrahn	chmod ${BINMODE} ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp
349a071a6c7Sdrahn	chown ${BINOWN}:${BINGRP} ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp
350a071a6c7Sdrahn	ln -sf ${TARGET_CANON}-cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/cpp
351a222f159Sespie.else
352a222f159Sespie	(cd ${CROSSDIR}/usr/obj/gnu/egcs/gcc; \
353a222f159Sespie	    /bin/sh ${.CURDIR}/gnu/egcs/gcc/configure \
354a222f159Sespie	    --with-gnu-as --with-gnu-ld --prefix ${CROSSDIR}/usr \
355141bf37aSespie	    --target ${TARGET_CANON} \
356a222f159Sespie	    --enable-languages="c,c++" --enable-cpp --disable-nls \
357a222f159Sespie	    --with-gxx-include-dir=${CROSSDIR}/usr/include/g++ && \
358a222f159Sespie	    PATH=${CROSSPATH} ${MAKE} BISON=yacc LANGUAGES="${CROSSLANGS}" \
359a222f159Sespie	    CFLAGS="${CFLAGS} -I${.CURDIR}/gnu/lib/libiberty/include" \
360a222f159Sespie	    LIBIBERTY_INCLUDES=${.CURDIR}/gnu/lib/libiberty/include \
361a222f159Sespie	    DEMANGLER_PROG= DEMANGLE_H= LDFLAGS="${LDSTATIC}" build_infodir=. \
362a222f159Sespie	    GCC_FOR_TARGET="./xgcc -B./ -I${CROSSDIR}/usr/include" && \
363a222f159Sespie	    ${MAKE} BISON=yacc LANGUAGES="${CROSSLANGS}" LDFLAGS="${LDSTATIC}" \
364a222f159Sespie	    GCC_FOR_TARGET="./xgcc -B./ -I${CROSSDIR}/usr/include" \
365a222f159Sespie	    CFLAGS="${CFLAGS} -I${.CURDIR}/gnu/lib/libiberty/include" \
366a222f159Sespie	    LIBIBERTY_INCLUDES=${.CURDIR}/gnu/lib/libiberty/include \
367a222f159Sespie	    build_infodir=. INSTALL_MAN= INSTALL_HEADERS_DIR= install)
368a071a6c7Sdrahn	mv -f ${CROSSDIR}/usr/bin/cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp
369a071a6c7Sdrahn	rm -f ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp
370a071a6c7Sdrahn	sed -e 's#/usr/libexec/cpp#${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp#' \
371846f21d9Sdrahn	    -e 's/@GNUC@/-D__GNUC__/' \
372a222f159Sespie	    -e 's#/usr/include#${CROSSDIR}/usr/include#' \
373a071a6c7Sdrahn	    -e 's/@dollaropt@/-$$/' ${.CURDIR}/usr.bin/cpp/cpp.sh > \
374a071a6c7Sdrahn	    ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp
375a071a6c7Sdrahn	chmod ${BINMODE} \
376a071a6c7Sdrahn	    ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp
377a071a6c7Sdrahn	chown ${BINOWN}:${BINGRP}\
378a071a6c7Sdrahn	    ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp
379a071a6c7Sdrahn	ln -sf ${TARGET_CANON}-cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/cpp
380a071a6c7Sdrahn	ln -sf gcc ${CROSSDIR}/usr/${TARGET_CANON}/bin/cc
381a071a6c7Sdrahn	ln -sf gcc ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc
382a071a6c7Sdrahn	cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-g++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-c++
383a071a6c7Sdrahn	ln -sf ${TARGET_CANON}-c++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/c++
384a222f159Sespie.endif
385a222f159Sespie	@touch ${CROSSGCC}
386a222f159Sespie
387a222f159Sespie# XXX MAKEOBJDIR maybe should be obj.${TARGET} here, revisit later
388a222f159Sespiecross-lib:	${CROSSGCC}
38956074f2fSmiod	MACHINE=${TARGET} \
39056074f2fSmiod	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
39156074f2fSmiod	export MACHINE MACHINE_ARCH MACHINE_CPU; \
392a222f159Sespie	(cd ${.CURDIR}/lib; \
393a222f159Sespie	    for lib in csu libc; do \
394a222f159Sespie	    (cd $$lib; \
395a222f159Sespie	        eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
396a071a6c7Sdrahn		    ${MAKE} WANTLINT=no depend all ;\
397a071a6c7Sdrahn	        eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} DESTDIR=${CROSSDIR} \
398a071a6c7Sdrahn		    ${MAKE} WANTLINT=no install); \
399a222f159Sespie	    done; \
400a222f159Sespie	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
401a222f159Sespie	        SKIPDIR=\"${NO_CROSS} libocurses/PSD.doc\" \
402a071a6c7Sdrahn	        ${MAKE} WANTLINT=no depend all ; \
403a071a6c7Sdrahn	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} DESTDIR=${CROSSDIR} \
404a071a6c7Sdrahn	        SKIPDIR=\"${NO_CROSS} libocurses/PSD.doc\" \
405a071a6c7Sdrahn	        ${MAKE} WANTLINT=no install)
406a222f159Sespie
407a222f159Sespiecross-bin:	${CROSSOBJ}
40856074f2fSmiod	MACHINE=${TARGET} \
40956074f2fSmiod	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
41056074f2fSmiod	export MACHINE MACHINE_ARCH MACHINE_CPU; \
411a222f159Sespie	for i in libexec bin sbin usr.bin usr.sbin; do \
412a222f159Sespie	(cd ${.CURDIR}/$$i; \
413a222f159Sespie	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
414a222f159Sespie	        SKIPDIR=\"${BINUTILS} ${NO_CROSS}\" \
415a071a6c7Sdrahn	        ${MAKE} depend all ; \
416a071a6c7Sdrahn	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} DESTDIR=${CROSSDIR} \
417a071a6c7Sdrahn	        SKIPDIR=\"${BINUTILS} ${NO_CROSS}\" \
418a071a6c7Sdrahn	        ${MAKE} install); \
419a071a6c7Sdrahn	done
420a071a6c7Sdrahn
421a071a6c7Sdrahncross-gnu:	${CROSSOBJ}
42256074f2fSmiod	MACHINE=${TARGET} \
42356074f2fSmiod	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
42456074f2fSmiod	export MACHINE MACHINE_ARCH MACHINE_CPU; \
425a071a6c7Sdrahn	for i in gnu/lib gnu/usr.sbin gnu/usr.bin ; do \
426a071a6c7Sdrahn	(cd ${.CURDIR}/$$i; \
427a071a6c7Sdrahn	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
428a071a6c7Sdrahn	        SKIPDIR=\"${NO_CROSS}\" \
429a071a6c7Sdrahn	        ${MAKE} depend all ; \
430a071a6c7Sdrahn	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} DESTDIR=${CROSSDIR} \
431a071a6c7Sdrahn	        SKIPDIR=\"${NO_CROSS}\" \
432a071a6c7Sdrahn	        ${MAKE} install); \
433a071a6c7Sdrahn	done
434a071a6c7Sdrahn
435a071a6c7Sdrahncross-share:   ${CROSSOBJ}
43656074f2fSmiod	MACHINE=${TARGET} \
43756074f2fSmiod	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
43856074f2fSmiod	export MACHINE MACHINE_ARCH MACHINE_CPU; \
439a071a6c7Sdrahn	for i in share; do \
440a071a6c7Sdrahn	    (cd ${.CURDIR}/$$i; \
441a071a6c7Sdrahn	        eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
442a071a6c7Sdrahn		SKIPDIR=\"${NO_CROSS}\" \
443a071a6c7Sdrahn		${MAKE} depend all install); \
444a071a6c7Sdrahn	done
445a071a6c7Sdrahn
446a071a6c7Sdrahncross-sys:   ${CROSSOBJ}
44756074f2fSmiod	MACHINE=${TARGET} \
44856074f2fSmiod	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
44956074f2fSmiod	export MACHINE MACHINE_ARCH MACHINE_CPU; \
450a071a6c7Sdrahn	for i in sys; do \
451a071a6c7Sdrahn	    (cd ${.CURDIR}/$$i; \
452a071a6c7Sdrahn	        eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
453a071a6c7Sdrahn		SKIPDIR=\"${NO_CROSS}\" \
454a222f159Sespie		${MAKE} depend all install); \
455a222f159Sespie	done
456a222f159Sespie
457a222f159Sespiecross-etc-root-var:	${CROSSOBJ}
458a222f159Sespie	(cd ${.CURDIR}/etc && \
45956074f2fSmiod	    MACHINE=${TARGET} \
46056074f2fSmiod	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU} \
46156074f2fSmiod	    DESTDIR=${CROSSDIR} \
46256074f2fSmiod	    ${MAKE} distribution-etc-root-var)
463a222f159Sespie
464a222f159Sespiecross-depend:
465a222f159Sespie	@(cd ${.CURDIR} && \
466a222f159Sespie	    BSDOBJDIR=${CROSSDIR}/usr/obj \
467a222f159Sespie	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
468a222f159Sespie	    SKIPDIR="${NO_CROSS}" \
469a222f159Sespie	    ${MAKE} depend)
470a222f159Sespie
471a222f159Sespiecross-clean:
472a222f159Sespie	@(cd ${.CURDIR} && \
473a222f159Sespie	    BSDOBJDIR=${CROSSDIR}/usr/obj \
474a222f159Sespie	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
475a222f159Sespie	    SKIPDIR="${NO_CROSS}" \
476a222f159Sespie	    ${MAKE} clean)
477a222f159Sespie
478a222f159Sespiecross-cleandir:
479a222f159Sespie	@(cd ${.CURDIR} && \
480a222f159Sespie	    BSDOBJDIR=${CROSSDIR}/usr/obj \
481a222f159Sespie	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
482a222f159Sespie	    SKIPDIR="${NO_CROSS}" \
483a222f159Sespie	    ${MAKE} cleandir)
484