xref: /openbsd/Makefile.cross (revision 07ac6f4c)
1*07ac6f4cSdrahn# $OpenBSD: Makefile.cross,v 1.111 2021/05/03 00:04:31 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.
9b6216f02Spatrick.if	(${TARGET} == "arm64")
10b6216f02SpatrickTARGET_ARCH=	aarch64
11b6216f02Spatrick.elif	(${TARGET} == "armv7")
12a78fab76SmiodTARGET_ARCH=	arm
13bba3d88cStobiasu.elif	(${TARGET} == "luna88k")
14a78fab76SmiodTARGET_ARCH=	m88k
15bfc185c1Svisa.elif	(${TARGET} == "octeon")
16a78fab76SmiodTARGET_ARCH=	mips64
1756074f2fSmiod.elif	(${TARGET} == "loongson")
1856074f2fSmiodTARGET_ARCH=	mips64el
1956074f2fSmiodTARGET_CPU=	mips64
20859e9956Spatrick.elif	(${TARGET} == "macppc")
21a78fab76SmiodTARGET_ARCH=	powerpc
222f050487Smiod.elif	(${TARGET} == "landisk")
232f050487SmiodTARGET_ARCH=	sh
24a78fab76Smiod.else
25a78fab76SmiodTARGET_ARCH=	${TARGET}
26a78fab76Smiod.endif
2756074f2fSmiodTARGET_CPU?=	${TARGET_ARCH}
28a78fab76Smiod
29a732d4d4Sguenther# List of LP64 archs
30a732d4d4Sguenther# XXX move to bsd.*.mk?
31*07ac6f4cSdrahnLP64_ARCH = aarch64 amd64 alpha mips64 mips64el riscv64 sparc64 powerpc64
32a732d4d4Sguenther
33a732d4d4SguentherTARGET_IS_LP64 =
34a732d4d4SguentherMACHINE_IS_LP64 =
35a732d4d4Sguenther.for _ in ${LP64_ARCH}
36a732d4d4Sguenther. if !empty(TARGET_ARCH:M$_)
37a732d4d4Sguenther    TARGET_IS_LP64 = yes
38a732d4d4Sguenther. endif
39a732d4d4Sguenther. if !empty(MACHINE_ARCH:M$_)
40a732d4d4Sguenther    MACHINE_IS_LP64 = yes
41a732d4d4Sguenther. endif
42a732d4d4Sguenther.endfor
43a732d4d4Sguenther
44a071a6c7Sdrahn#CROSSCPPFLAGS?=	-nostdinc -I${CROSSDIR}/usr/include
45a071a6c7Sdrahn#CROSSLDFLAGS?=	-nostdlib -L${CROSSDIR}/usr/lib -static
46a071a6c7SdrahnCROSSCFLAGS?=	${CROSSCPPFLAGS} -O2 ${PIPE} ${DEBUG}
47a222f159SespieCROSSCXXFLAGS?=	${CROSSCPPFLAGS}
48a071a6c7Sdrahn#LDSTATIC?=	-static
49a071a6c7Sdrahn
50a222f159SespieCROSSDIR=	${DESTDIR}/usr/cross/${TARGET}
51a071a6c7SdrahnCROSSENV=	AR=${CROSSDIR}/usr/${TARGET_CANON}/bin/ar \
52a071a6c7Sdrahn		AS=${CROSSDIR}/usr/${TARGET_CANON}/bin/as \
53a071a6c7Sdrahn		CC=${CROSSDIR}/usr/${TARGET_CANON}/bin/cc \
54a071a6c7Sdrahn		CPP=${CROSSDIR}/usr/${TARGET_CANON}/bin/cpp \
55a071a6c7Sdrahn		CXX=${CROSSDIR}/usr/${TARGET_CANON}/bin/c++ \
56a071a6c7Sdrahn		LD=${CROSSDIR}/usr/${TARGET_CANON}/bin/ld \
57a071a6c7Sdrahn		OBJCOPY=${CROSSDIR}/usr/${TARGET_CANON}/bin/objcopy \
58a071a6c7Sdrahn		LORDER=/usr/bin/lorder RANLIB=${CROSSDIR}/usr/${TARGET_CANON}/bin/ranlib \
59a071a6c7Sdrahn		STRIP=${CROSSDIR}/usr/${TARGET_CANON}/bin/strip \
60a071a6c7Sdrahn		HOSTCC=\"${CC}\" HOSTCXX=\"${CXX}\" NOMAN= \
61a222f159Sespie		HOSTCFLAGS=\"${CFLAGS}\" HOSTCXXFLAGS=\"${CXXFLAGS}\" \
62a222f159Sespie		HOSTLDFLAGS=\"${LDFLAGS}\" \
63a222f159Sespie		CFLAGS=\"${CROSSCFLAGS}\" CPPFLAGS=\"${CROSSCPPFLAGS}\" \
64a222f159Sespie		CXXFLAGS=\"${CROSSCXXFLAGS}\" \
65e7c1bd46Spatrick		LDFLAGS=\"${CROSSLDFLAGS}\" \
66e7c1bd46Spatrick		CROSSDIR=\"${CROSSDIR}\"
67a071a6c7SdrahnCROSSADDPATH=:${CROSSDIR}/usr/${TARGET_CANON}/bin
68a071a6c7SdrahnCROSSPATH=	/usr/bin:/bin:/usr/sbin:/sbin${CROSSADDPATH}
69a222f159SespieCROSSLANGS?=	c c++
70a222f159Sespie
71141bf37aSespieTARGET_CANON=`cat ${CROSSDIR}/TARGET_CANON`
72141bf37aSespie
73a222f159SespieCROSSDIRS=	${CROSSDIR}/.dirs_done
74a071a6c7SdrahnCROSSOBJ=	${CROSSDIR}/.obj_done
75a071a6c7SdrahnCROSSINCLUDES=	${CROSSDIR}/.includes_done
76a071a6c7SdrahnCROSSBINUTILS=	${CROSSDIR}/.binutils_done
77a071a6c7SdrahnCROSSGCC=	${CROSSDIR}/.gcc_done
78bab9f9c3Sdjm#NO_CROSS=	isakmpd keynote ssh
79a222f159Sespie
80b14edc4dSdrahn.include <bsd.own.mk>
81b14edc4dSdrahn
829102a13aSdrahn.for _arch in ${TARGET_ARCH}
83670fdd29Spatrick.if !empty(GCC3_ARCH:M${_arch})
84670fdd29SpatrickCOMPILER_VERSION=gcc3
85670fdd29SpatrickBUILD_CLANG=no
86670fdd29SpatrickCC=gcc
87670fdd29SpatrickCXX=g++
88670fdd29Spatrick.elif !empty(GCC4_ARCH:M${_arch})
89670fdd29SpatrickCOMPILER_VERSION=gcc4
90670fdd29SpatrickBUILD_CLANG=no
91670fdd29SpatrickCC=gcc
92670fdd29SpatrickCXX=g++
93670fdd29Spatrick.elif !empty(CLANG_ARCH:M${_arch})
94b6216f02SpatrickCOMPILER_VERSION=clang
952870cfebSpatrickBUILD_CLANG=yes
96c51441d0SmpiCC=clang
97c51441d0SmpiCXX=clang++
9888ff6307Sdrahn.endif
9988ff6307Sdrahn
100dd8b647fSpatrick.if !empty(LLD_ARCH:M${_arch})
101dd8b647fSpatrickLINKER_VERSION=lld
102dd8b647fSpatrick.else
103dd8b647fSpatrickLINKER_VERSION=bfd
104dd8b647fSpatrick.endif
105dd8b647fSpatrick
1064eec3ddaSmiod.if !empty(PIE_ARCH:M${_arch})
1074eec3ddaSmiodNOPIE_FLAGS=-fno-pie
1084eec3ddaSmiodNOPIE_LDFLAGS=-nopie
1094eec3ddaSmiodPIE_DEFAULT=${DEFAULT_PIE_DEF}
1104eec3ddaSmiod.else
1114eec3ddaSmiodNOPIE_FLAGS=
1124eec3ddaSmiodPIE_DEFAULT=
1134eec3ddaSmiod.endif
1144eec3ddaSmiod
1159102a13aSdrahnBINUTILS=	ar as gasp ld nm objcopy objdump ranlib readelf size \
1169102a13aSdrahn		strings strip
117448f2cefSmiodBINUTILS_DIR=gnu/usr.bin/binutils-2.17
1189102a13aSdrahn.endfor
1199102a13aSdrahn
120141bf37aSespie# no libcrypto.... these won't build
121d392a36dSlteo#NO_CROSS+=	dc passwd ppp tcpdump telnet ftp sasyncd vnconfig
122a071a6c7Sdrahn
123141bf37aSespie# explicit cross-compile
124a071a6c7SdrahnNO_CROSS+=microcode
1254e52c8e4SderaadtNO_CROSS+=groff binutils binutils-2.17 perl texinfo gcc cvs
126e3bab464SdrahnNO_CROSS+=nsd
127c8df337cSuebayasiNO_CROSS+=bind
128c8df337cSuebayasiNO_CROSS+=unbound
129141bf37aSespie
130a222f159Sespiecross-dirs:	${CROSSDIRS}
131a222f159Sespiecross-obj:	${CROSSOBJ}
132a222f159Sespiecross-includes:	${CROSSINCLUDES}
133a222f159Sespiecross-binutils:	${CROSSBINUTILS}
134a222f159Sespiecross-gcc:	${CROSSGCC}
135a222f159Sespie
136a222f159Sespiecross-env:
137a222f159Sespie	@echo ${CROSSENV} MACHINE=${TARGET} \
138d49bf4ccSmickey	    MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \
13956074f2fSmiod	    MACHINE_CPU=`cat ${CROSSDIR}/TARGET_CPU` \
140d49bf4ccSmickey	    BSDOBJDIR=${CROSSDIR}/usr/obj \
141d49bf4ccSmickey	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET}
142a222f159Sespie
143a222f159Sespie${CROSSDIRS}:
144b14edc4dSdrahn.if ${TARGET_ARCH} == "arm" && ${MACHINE_IS_LP64} == "yes"
145b14edc4dSdrahn	# this config is allowed
146b79c11a7Spatrick.elif ${TARGET_ARCH} == "powerpc" && ${MACHINE_IS_LP64} == "yes"
147b79c11a7Spatrick	# this config is allowed
148b14edc4dSdrahn.elif ${TARGET_IS_LP64} != ${MACHINE_IS_LP64}
149a732d4d4Sguenther	@echo "host and target have different size longs"
150a732d4d4Sguenther	@echo "cross compiler generates bad code; aborting"; exit 1
151a732d4d4Sguenther.endif
152a222f159Sespie	@-mkdir -p ${CROSSDIR}
153a78fab76Smiod	@echo ${TARGET_ARCH} > ${CROSSDIR}/TARGET_ARCH
154a222f159Sespie	@echo TARGET_ARCH is `cat ${CROSSDIR}/TARGET_ARCH`
15556074f2fSmiod	@echo ${TARGET_CPU} > ${CROSSDIR}/TARGET_CPU
15656074f2fSmiod	@echo TARGET_CPU is `cat ${CROSSDIR}/TARGET_CPU`
157a222f159Sespie	@eval `grep '^osr=' sys/conf/newvers.sh`; \
15856074f2fSmiod	   echo ${TARGET_ARCH}-unknown-openbsd$$osr > \
159a222f159Sespie	   ${CROSSDIR}/TARGET_CANON
160a222f159Sespie	@-mkdir -p ${CROSSDIR}
161141bf37aSespie	@-mkdir -p ${CROSSDIR}/usr/${TARGET_CANON}
162a222f159Sespie	@ln -sf ${CROSSDIR}/usr/include \
163141bf37aSespie	    ${CROSSDIR}/usr/${TARGET_CANON}/include
164a222f159Sespie	@ln -sf ${CROSSDIR}/usr/lib \
165141bf37aSespie	    ${CROSSDIR}/usr/${TARGET_CANON}/lib
166141bf37aSespie	@-mkdir -p ${CROSSDIR}/usr/${TARGET_CANON}/bin
167a222f159Sespie	@(cd ${.CURDIR}/etc && DESTDIR=${CROSSDIR} ${MAKE} distrib-dirs)
168a222f159Sespie	@touch ${CROSSDIRS}
169a222f159Sespie
170a222f159Sespie${CROSSOBJ}:	${CROSSDIRS}
171a222f159Sespie	@-mkdir -p ${CROSSDIR}/usr/obj
172bca9c496Spatrick	@-chgrp ${WOBJGROUP} ${CROSSDIR}/usr/obj
173bca9c496Spatrick	@-chmod g+w ${CROSSDIR}/usr/obj
174a222f159Sespie	@(cd ${.CURDIR} && \
175a222f159Sespie	    BSDOBJDIR=${CROSSDIR}/usr/obj \
17688ff6307Sdrahn	    COMPILER_VERSION=${COMPILER_VERSION} \
177a222f159Sespie	    MACHINE=${TARGET} \
17856074f2fSmiod	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU} \
179a222f159Sespie	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
180a222f159Sespie	    ${MAKE} obj)
181a222f159Sespie	@touch ${CROSSOBJ}
182a222f159Sespie
183a222f159Sespie${CROSSINCLUDES}:	${CROSSOBJ}
184a222f159Sespie	@-mkdir -p ${CROSSDIR}/usr/include
185a222f159Sespie	@(cd ${.CURDIR}/include && \
18688ff6307Sdrahn	    COMPILER_VERSION=${COMPILER_VERSION} \
18756074f2fSmiod	    MACHINE=${TARGET} \
18856074f2fSmiod	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU} \
189a222f159Sespie	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
19056074f2fSmiod	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
191a222f159Sespie	    ${MAKE} prereq && \
19288ff6307Sdrahn	    COMPILER_VERSION=${COMPILER_VERSION} \
19356074f2fSmiod	    MACHINE=${TARGET} \
19456074f2fSmiod	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU} \
195a222f159Sespie	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
19656074f2fSmiod	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
197a222f159Sespie	    ${MAKE} DESTDIR=${CROSSDIR} includes)
198a222f159Sespie	@touch ${CROSSINCLUDES}
199a222f159Sespie
200a222f159Sespie${CROSSBINUTILS}:	${CROSSINCLUDES}
2019102a13aSdrahn	(cd ${.CURDIR}/${BINUTILS_DIR}; \
202e7c1bd46Spatrick	    env CROSSDIR=${CROSSDIR} \
203c51441d0Smpi	    CC=${CC} CXX=${CXX} \
204a222f159Sespie	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
2056231a781Smiod	    PIE_DEFAULT=${PIE_DEFAULT} \
20656074f2fSmiod	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
207a222f159Sespie	    ${MAKE} -f Makefile.bsd-wrapper all && \
208e7c1bd46Spatrick	    env CROSSDIR=${CROSSDIR} DESTDIR=${CROSSDIR} \
20988ff6307Sdrahn	    COMPILER_VERSION=${COMPILER_VERSION} \
210dd8b647fSpatrick	    LINKER_VERSION=${LINKER_VERSION} \
21156074f2fSmiod	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
212e7c1bd46Spatrick	    PIE_DEFAULT=${PIE_DEFAULT} \
21356074f2fSmiod	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
214a222f159Sespie	    ${MAKE} -f Makefile.bsd-wrapper install)
215a222f159Sespie	@for cmd in ${BINUTILS}; do \
216a071a6c7Sdrahn	 if [ -e ${CROSSDIR}/usr/bin/${TARGET_CANON}-$$cmd ] ; then \
217a071a6c7Sdrahn	    cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-$$cmd \
218a071a6c7Sdrahn	        ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-$$cmd ; \
219a071a6c7Sdrahn	    ln -sf ${TARGET_CANON}-$$cmd \
220141bf37aSespie		${CROSSDIR}/usr/${TARGET_CANON}/bin/$$cmd ;\
221a071a6c7Sdrahn	   if [ -e ${CROSSDIR}/usr/bin/$$cmd ] ; then \
222a071a6c7Sdrahn	    rm -f ${CROSSDIR}/usr/bin/$$cmd ;\
223a071a6c7Sdrahn	   fi ;\
224a071a6c7Sdrahn	 elif [ -e ${CROSSDIR}/usr/bin/$$cmd ] ; then \
225a071a6c7Sdrahn	    cp -f ${CROSSDIR}/usr/bin/$$cmd \
226a071a6c7Sdrahn	        ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-$$cmd ; \
227a071a6c7Sdrahn	    ln -sf ${TARGET_CANON}-$$cmd \
228a071a6c7Sdrahn		${CROSSDIR}/usr/${TARGET_CANON}/bin/$$cmd ;\
229a071a6c7Sdrahn	    mv ${CROSSDIR}/usr/bin/$$cmd \
230a071a6c7Sdrahn		${CROSSDIR}/usr/bin/${TARGET_CANON}-$$cmd ;\
231a222f159Sespie	 fi ;\
232a222f159Sespie	done
233a222f159Sespie	@touch ${CROSSBINUTILS}
234a222f159Sespie
235a222f159Sespie
236a222f159Sespie${CROSSGCC}:		${CROSSBINUTILS}
237b6216f02Spatrick.if ${COMPILER_VERSION:L} == "clang"
238b6216f02Spatrick	(cd ${.CURDIR}/gnu/usr.bin/clang; \
239c51441d0Smpi	    CC=${CC} CXX=${CXX} \
24047dea843Spatrick	    BSDOBJDIR=${CROSSDIR}/usr/obj \
241b6216f02Spatrick	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
242b6216f02Spatrick	    MACHINE_ARCH=${TARGET_ARCH} \
243b6216f02Spatrick	    ${MAKE} all)
244b6216f02Spatrick	(cd ${.CURDIR}/gnu/usr.bin/clang; \
245b6216f02Spatrick	    DESTDIR=${CROSSDIR} \
24647dea843Spatrick	    BSDOBJDIR=${CROSSDIR}/usr/obj \
247dd8b647fSpatrick	    LINKER_VERSION=${LINKER_VERSION} \
248b6216f02Spatrick	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
249b6216f02Spatrick	    MACHINE_ARCH=${TARGET_ARCH} \
250b6216f02Spatrick	    ${MAKE} install)
25147dea843Spatrick	(cd ${.CURDIR}/gnu/usr.bin/clang; \
25247dea843Spatrick	    BSDOBJDIR=${CROSSDIR}/usr/obj \
25347dea843Spatrick	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
25447dea843Spatrick	    MACHINE_ARCH=${TARGET_ARCH} \
25547dea843Spatrick	    ${MAKE} clean)
256b6216f02Spatrick	mv ${CROSSDIR}/usr/bin/clang ${CROSSDIR}/usr/bin/${TARGET_CANON}-clang
257b6216f02Spatrick	mv ${CROSSDIR}/usr/bin/clang++ ${CROSSDIR}/usr/bin/${TARGET_CANON}-clang++
25805c6891fSpatrick	cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-clang ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-clang
259b6216f02Spatrick	ln -sf ${TARGET_CANON}-cc ${CROSSDIR}/usr/${TARGET_CANON}/bin/cc
260b6216f02Spatrick	ln -sf ${TARGET_CANON}-c++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/c++
26155669736Spatrick	@if [ -e ${CROSSDIR}/usr/bin/ld ]; then \
26255669736Spatrick		mv ${CROSSDIR}/usr/bin/ld ${CROSSDIR}/usr/bin/${TARGET_CANON}-ld ;\
26355669736Spatrick		cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-ld \
26455669736Spatrick		    ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-ld ;\
26555669736Spatrick		ln -sf ${TARGET_CANON}-ld ${CROSSDIR}/usr/${TARGET_CANON}/bin/ld ;\
26655669736Spatrick	fi
26705c6891fSpatrick	echo "#!/bin/sh\n${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-clang --sysroot ${CROSSDIR} \"$$""@\"" > ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc; \
26805c6891fSpatrick	chmod +x ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc;
26905c6891fSpatrick	echo "#!/bin/sh\n${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-clang --driver-mode=g++ --sysroot ${CROSSDIR} \"$$""@\"" > ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-c++; \
27005c6891fSpatrick	chmod +x ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-c++;
271b6216f02Spatrick.elif ${COMPILER_VERSION:L} == "gcc3"
27288919d82Smiod	(cd ${.CURDIR}/gnu/usr.bin/gcc; \
27388919d82Smiod	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
27488919d82Smiod	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
27588919d82Smiod	    CROSSDIR=${CROSSDIR} \
276c51441d0Smpi	    CC=${CC} CXX=${CXX} \
27788919d82Smiod	    ${MAKE} -f Makefile.bsd-wrapper all && \
27888919d82Smiod	    env CROSSDIR=${CROSSDIR} DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
27988919d82Smiod	    PATH=${CROSSPATH} ${MAKE} -f Makefile.bsd-wrapper install)
28088919d82Smiod	cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-g++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-c++
28188919d82Smiod	cp -f ${CROSSDIR}/usr/bin/gcc ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc
28288919d82Smiod	cp -f ${CROSSDIR}/usr/libexec/cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp
28388919d82Smiod	rm -f ${CROSSDIR}/usr/bin/gcc  ${CROSSDIR}/usr/bin/cc ${CROSSDIR}/usr/libexec/cpp
28488919d82Smiod	ln -sf ${TARGET_CANON}-cc ${CROSSDIR}/usr/${TARGET_CANON}/bin/cc
28588919d82Smiod	ln -sf ${TARGET_CANON}-c++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/c++
28688919d82Smiod	rm -f ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp
28788919d82Smiod	sed -e 's#/usr/libexec/cpp#${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp#' \
28888919d82Smiod	    -e 's/@GNUC@/-D__GNUC__/' \
28988919d82Smiod	    -e 's#/usr/include#${CROSSDIR}/usr/include#' \
29088919d82Smiod	    -e 's/@dollaropt@//' \
29188919d82Smiod	    ${.CURDIR}/usr.bin/cpp/cpp.sh > ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp
29288919d82Smiod	chmod ${BINMODE} ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp
29388919d82Smiod	chown ${BINOWN}:${BINGRP} ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp
29488919d82Smiod	ln -sf ${TARGET_CANON}-cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/cpp
29588919d82Smiod.else
29688ff6307Sdrahn	(cd ${.CURDIR}/gnu/usr.bin/cc; \
297e7c1bd46Spatrick	    env CROSSDIR=${CROSSDIR} \
298c51441d0Smpi	    COMPILER_VERSION=${COMPILER_VERSION} \
299c51441d0Smpi	    CC=${CC} CXX=${CXX} \
3000016d682Smiod	    PIE_DEFAULT=${PIE_DEFAULT} \
30188ff6307Sdrahn	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
30288ff6307Sdrahn	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
30388ff6307Sdrahn	    MACHINE=${TARGET} \
30488ff6307Sdrahn	    ${MAKE} all)
30588ff6307Sdrahn	(cd ${.CURDIR}/gnu/usr.bin/cc; \
3060016d682Smiod	    env CROSSDIR=${CROSSDIR} DESTDIR=${CROSSDIR} \
307c51441d0Smpi	    COMPILER_VERSION=${COMPILER_VERSION} \
3080016d682Smiod	    PIE_DEFAULT=${PIE_DEFAULT} \
3090016d682Smiod	    MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
31088ff6307Sdrahn	    TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
31188ff6307Sdrahn	    MACHINE=${TARGET} \
31288ff6307Sdrahn	    PATH=${CROSSPATH} ${MAKE} install)
3138d925239Sdrahn	cp -f ${CROSSDIR}/usr/bin/g++  ${CROSSDIR}/usr/bin/${TARGET_CANON}-g++
31488ff6307Sdrahn	cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-g++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-c++
31588ff6307Sdrahn	cp -f ${CROSSDIR}/usr/libexec/cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp
3168d925239Sdrahn	cp -f ${CROSSDIR}/usr/bin/gcc ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc
31788ff6307Sdrahn	ln -sf ${TARGET_CANON}-cc ${CROSSDIR}/usr/${TARGET_CANON}/bin/cc
3188d925239Sdrahn
3198d925239Sdrahn	cp -f ${CROSSDIR}/usr/bin/gcc ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc
3208d925239Sdrahn	rm -f ${CROSSDIR}/usr/bin/gcc  ${CROSSDIR}/usr/bin/g++  ${CROSSDIR}/usr/bin/cc ${CROSSDIR}/usr/libexec/cpp
3218d925239Sdrahn	# fix links
32288ff6307Sdrahn	rm -f ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp
32388ff6307Sdrahn	sed -e 's#/usr/libexec/cpp#${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp#' \
324846f21d9Sdrahn	    -e 's/@GNUC@//' \
32588ff6307Sdrahn	    -e 's#/usr/include#${CROSSDIR}/usr/include#' \
32688ff6307Sdrahn	    -e 's/@dollaropt@//' \
32788ff6307Sdrahn	    ${.CURDIR}/usr.bin/cpp/cpp.sh > ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp
32888ff6307Sdrahn	chmod ${BINMODE} ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp
32988ff6307Sdrahn	chown ${BINOWN}:${BINGRP} ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp
33088ff6307Sdrahn	ln -sf ${TARGET_CANON}-cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/cpp
331a222f159Sespie.endif
332a222f159Sespie	@touch ${CROSSGCC}
333a222f159Sespie
334a222f159Sespie# XXX MAKEOBJDIR maybe should be obj.${TARGET} here, revisit later
335a222f159Sespiecross-lib:	${CROSSGCC}
33656074f2fSmiod	MACHINE=${TARGET} \
337917534cfStobiasu	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU} \
338670fdd29Spatrick	    BSDOBJDIR=${CROSSDIR}/usr/obj \
339670fdd29Spatrick	    BUILD_CLANG=${BUILD_CLANG}; \
340670fdd29Spatrick	export MACHINE MACHINE_ARCH MACHINE_CPU BSDOBJDIR BUILD_CLANG; \
341505714c5Spatrick	(cd ${.CURDIR}/gnu/lib/libcompiler_rt; \
342505714c5Spatrick	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
343505714c5Spatrick		${MAKE} all ;\
344505714c5Spatrick	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} DESTDIR=${CROSSDIR} \
345505714c5Spatrick		${MAKE} install); \
346a222f159Sespie	(cd ${.CURDIR}/lib; \
347505714c5Spatrick	    for lib in csu libc; do \
348a222f159Sespie	    (cd $$lib; \
349a222f159Sespie	        eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
350ff0d21e8Smpi		    ${MAKE} all ;\
351a071a6c7Sdrahn	        eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} DESTDIR=${CROSSDIR} \
3527cd9afdfSokan		    ${MAKE} install); \
353a222f159Sespie	    done; \
354a222f159Sespie	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
355e9ff445bSderaadt	        SKIPDIR=\"${NO_CROSS}\" \
356ff0d21e8Smpi	        ${MAKE} all ; \
357a071a6c7Sdrahn	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} DESTDIR=${CROSSDIR} \
358e9ff445bSderaadt	        SKIPDIR=\"${NO_CROSS}\" \
3597cd9afdfSokan	        ${MAKE} install)
360a222f159Sespie
361a222f159Sespiecross-bin:	${CROSSOBJ}
36256074f2fSmiod	MACHINE=${TARGET} \
36356074f2fSmiod	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
36456074f2fSmiod	export MACHINE MACHINE_ARCH MACHINE_CPU; \
365a222f159Sespie	for i in libexec bin sbin usr.bin usr.sbin; do \
366a222f159Sespie	(cd ${.CURDIR}/$$i; \
367a222f159Sespie	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
368a222f159Sespie	        SKIPDIR=\"${BINUTILS} ${NO_CROSS}\" \
369ff0d21e8Smpi	        ${MAKE} all ; \
370a071a6c7Sdrahn	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} DESTDIR=${CROSSDIR} \
371a071a6c7Sdrahn	        SKIPDIR=\"${BINUTILS} ${NO_CROSS}\" \
372a071a6c7Sdrahn	        ${MAKE} install); \
373a071a6c7Sdrahn	done
374a071a6c7Sdrahn
375a071a6c7Sdrahncross-gnu:	${CROSSOBJ}
37656074f2fSmiod	MACHINE=${TARGET} \
37756074f2fSmiod	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
37856074f2fSmiod	export MACHINE MACHINE_ARCH MACHINE_CPU; \
379a071a6c7Sdrahn	for i in gnu/lib gnu/usr.sbin gnu/usr.bin ; do \
380a071a6c7Sdrahn	(cd ${.CURDIR}/$$i; \
381a071a6c7Sdrahn	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
382a071a6c7Sdrahn	        SKIPDIR=\"${NO_CROSS}\" \
383ff0d21e8Smpi	        ${MAKE} all ; \
384a071a6c7Sdrahn	    eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} DESTDIR=${CROSSDIR} \
385a071a6c7Sdrahn	        SKIPDIR=\"${NO_CROSS}\" \
386a071a6c7Sdrahn	        ${MAKE} install); \
387a071a6c7Sdrahn	done
388a071a6c7Sdrahn
389a071a6c7Sdrahncross-share:   ${CROSSOBJ}
39056074f2fSmiod	MACHINE=${TARGET} \
39156074f2fSmiod	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
39256074f2fSmiod	export MACHINE MACHINE_ARCH MACHINE_CPU; \
393a071a6c7Sdrahn	for i in share; do \
394a071a6c7Sdrahn	    (cd ${.CURDIR}/$$i; \
395a071a6c7Sdrahn	        eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
396a071a6c7Sdrahn		SKIPDIR=\"${NO_CROSS}\" \
39726039679Suebayasi		DESTDIR=${CROSSDIR} \
398ff0d21e8Smpi		${MAKE} all install); \
399a071a6c7Sdrahn	done
400a071a6c7Sdrahn
401a071a6c7Sdrahncross-sys:   ${CROSSOBJ}
40256074f2fSmiod	MACHINE=${TARGET} \
40356074f2fSmiod	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
40456074f2fSmiod	export MACHINE MACHINE_ARCH MACHINE_CPU; \
405a071a6c7Sdrahn	for i in sys; do \
406a071a6c7Sdrahn	    (cd ${.CURDIR}/$$i; \
407a071a6c7Sdrahn	        eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
408a071a6c7Sdrahn		SKIPDIR=\"${NO_CROSS}\" \
409ff0d21e8Smpi		${MAKE} all); \
410090d236bSdrahn	    (cd ${.CURDIR}/$$i; \
411090d236bSdrahn	        eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
412090d236bSdrahn		SKIPDIR=\"${NO_CROSS}\" \
41326039679Suebayasi		DESTDIR=${CROSSDIR} \
414090d236bSdrahn		${MAKE} install); \
415a222f159Sespie	done
416a222f159Sespie
417a222f159Sespiecross-etc-root-var:	${CROSSOBJ}
418a222f159Sespie	(cd ${.CURDIR}/etc && \
41956074f2fSmiod	    MACHINE=${TARGET} \
42056074f2fSmiod	    MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU} \
42156074f2fSmiod	    DESTDIR=${CROSSDIR} \
42256074f2fSmiod	    ${MAKE} distribution-etc-root-var)
423a222f159Sespie
424a222f159Sespiecross-clean:
425a222f159Sespie	@(cd ${.CURDIR} && \
426a222f159Sespie	    BSDOBJDIR=${CROSSDIR}/usr/obj \
427a222f159Sespie	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
428a222f159Sespie	    SKIPDIR="${NO_CROSS}" \
429a222f159Sespie	    ${MAKE} clean)
430a222f159Sespie
431a222f159Sespiecross-cleandir:
432a222f159Sespie	@(cd ${.CURDIR} && \
433a222f159Sespie	    BSDOBJDIR=${CROSSDIR}/usr/obj \
434a222f159Sespie	    BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
435a222f159Sespie	    SKIPDIR="${NO_CROSS}" \
436a222f159Sespie	    ${MAKE} cleandir)
437