1*a57924a5Smiod# $OpenBSD: Makefile.cross,v 1.15 2006/04/19 18:32:39 miod Exp $ 2a222f159Sespie 3a222f159Sespiecross-tools: cross-includes cross-binutils cross-gcc cross-lib 4a222f159Sespiecross-distrib: cross-tools cross-bin cross-etc-root-var 5a222f159Sespie 6a78fab76Smiod# Have to compute TARGET_ARCH directly in the Makefile, for .if tests involving 7a78fab76Smiod# this variable to work. 8a78fab76Smiod.if (${TARGET} == "cats" || ${TARGET} == "zaurus") 9a78fab76SmiodTARGET_ARCH= arm 10a78fab76Smiod.elif (${TARGET} == "hp300" || ${TARGET} == "mac68k" || \ 11a78fab76Smiod ${TARGET} == "mvme68k") 12a78fab76SmiodTARGET_ARCH= m68k 13a78fab76Smiod.elif (${TARGET} == "luna88k" || ${TARGET} == "mvme88k") 14a78fab76SmiodTARGET_ARCH= m88k 15a78fab76Smiod.elif (${TARGET} == "sgi") 16a78fab76SmiodTARGET_ARCH= mips64 17a78fab76Smiod.elif (${TARGET} == "macppc" || ${TARGET} == "mvmeppc") 18a78fab76SmiodTARGET_ARCH= powerpc 19a78fab76Smiod.else 20a78fab76SmiodTARGET_ARCH= ${TARGET} 21a78fab76Smiod.endif 22a78fab76Smiod 23a222f159SespieCROSSCPPFLAGS?= -nostdinc -I${CROSSDIR}/usr/include 24a222f159SespieCROSSLDFLAGS?= -nostdlib -L${CROSSDIR}/usr/lib -static 25a222f159SespieCROSSCFLAGS?= ${CROSSCPPFLAGS} 26a222f159SespieCROSSCXXFLAGS?= ${CROSSCPPFLAGS} 27a222f159SespieLDSTATIC?= -static 28a222f159Sespie 29a222f159SespieCROSSDIR= ${DESTDIR}/usr/cross/${TARGET} 30a222f159SespieCROSSENV= AR=${CROSSDIR}/usr/bin/ar AS=${CROSSDIR}/usr/bin/as \ 31a222f159Sespie CC=${CROSSDIR}/usr/bin/cc CPP=${CROSSDIR}/usr/bin/cpp \ 32a222f159Sespie CXX=${CROSSDIR}/usr/bin/c++ \ 333102a934Sgrange LD=${CROSSDIR}/usr/bin/ld \ 34a222f159Sespie LORDER=/usr/bin/lorder RANLIB=${CROSSDIR}/usr/bin/ranlib \ 353102a934Sgrange STRIP=${CROSSDIR}/usr/bin/strip \ 36a222f159Sespie HOSTCC=\"${CC}\" HOSTCXX=\"${CXX}\" NOMAN= DESTDIR=${CROSSDIR} \ 37a222f159Sespie HOSTCFLAGS=\"${CFLAGS}\" HOSTCXXFLAGS=\"${CXXFLAGS}\" \ 38a222f159Sespie HOSTLDFLAGS=\"${LDFLAGS}\" \ 39a222f159Sespie CFLAGS=\"${CROSSCFLAGS}\" CPPFLAGS=\"${CROSSCPPFLAGS}\" \ 40a222f159Sespie CXXFLAGS=\"${CROSSCXXFLAGS}\" \ 41a222f159Sespie LDFLAGS=\"${CROSSLDFLAGS}\" 42a222f159SespieCROSSPATH= ${PATH}:${CROSSDIR}/usr/bin 43a222f159SespieCROSSLANGS?= c c++ 44a222f159Sespie 45141bf37aSespieTARGET_CANON=`cat ${CROSSDIR}/TARGET_CANON` 46141bf37aSespie 47a222f159SespieCROSSDIRS= ${CROSSDIR}/.dirs_done 48a222f159SespieCROSSOBJ= ${CROSSDIR}/usr/obj/.obj_done 49a222f159SespieCROSSINCLUDES= ${CROSSDIR}/usr/include/.includes_done 50a222f159SespieCROSSBINUTILS= ${CROSSDIR}/usr/bin/.binutils_done 51a222f159SespieCROSSGCC= ${CROSSDIR}/usr/bin/.gcc_done 52a222f159SespieNO_CROSS= isakmpd tn3270 less sudo openssl libkeynote libssl \ 5383417ff2Smickey keynote sectok ssh 54a222f159Sespie 55141bf37aSespie# no libcrypto.... these won't build 5621638670SmartinNO_CROSS+= dc login_krb5 login_krb5-or-pwd passwd ppp tcpdump telnet 57141bf37aSespie# need host setup for ydr 58141bf37aSespieNO_CROSS+=afs 59141bf37aSespie# explicit cross-compile 60141bf37aSespieNO_CROSS+=bind 61141bf37aSespie 62a222f159Sespiecross-dirs: ${CROSSDIRS} 63a222f159Sespiecross-obj: ${CROSSOBJ} 64a222f159Sespiecross-includes: ${CROSSINCLUDES} 65a222f159Sespiecross-binutils: ${CROSSBINUTILS} 66a222f159Sespiecross-gcc: ${CROSSGCC} 67a222f159Sespie 68a222f159Sespiecross-env: 69a222f159Sespie @echo ${CROSSENV} MACHINE=${TARGET} \ 70a222f159Sespie MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` 71a222f159Sespie 72a222f159Sespie${CROSSDIRS}: 73a222f159Sespie @-mkdir -p ${CROSSDIR} 74a78fab76Smiod @echo ${TARGET_ARCH} > ${CROSSDIR}/TARGET_ARCH 75a222f159Sespie @echo TARGET_ARCH is `cat ${CROSSDIR}/TARGET_ARCH` 76a222f159Sespie @eval `grep '^osr=' sys/conf/newvers.sh`; \ 77a222f159Sespie sed "s/\$$/-unknown-openbsd$$osr/" ${CROSSDIR}/TARGET_ARCH > \ 78a222f159Sespie ${CROSSDIR}/TARGET_CANON 79a222f159Sespie @-mkdir -p ${CROSSDIR} 80141bf37aSespie @-mkdir -p ${CROSSDIR}/usr/${TARGET_CANON} 81a222f159Sespie @ln -sf ${CROSSDIR}/usr/include \ 82141bf37aSespie ${CROSSDIR}/usr/${TARGET_CANON}/include 83a222f159Sespie @ln -sf ${CROSSDIR}/usr/lib \ 84141bf37aSespie ${CROSSDIR}/usr/${TARGET_CANON}/lib 85141bf37aSespie @-mkdir -p ${CROSSDIR}/usr/${TARGET_CANON}/bin 86a222f159Sespie @(cd ${.CURDIR}/etc && DESTDIR=${CROSSDIR} ${MAKE} distrib-dirs) 87a222f159Sespie @touch ${CROSSDIRS} 88a222f159Sespie 89a222f159Sespie${CROSSOBJ}: ${CROSSDIRS} 90a222f159Sespie @-mkdir -p ${CROSSDIR}/usr/obj 91a222f159Sespie @(cd ${.CURDIR} && \ 92a222f159Sespie BSDOBJDIR=${CROSSDIR}/usr/obj \ 93a222f159Sespie MACHINE=${TARGET} \ 94141bf37aSespie MACHINE_ARCH=${TARGET_ARCH} \ 95a222f159Sespie BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 96a222f159Sespie ${MAKE} obj) 97a222f159Sespie @touch ${CROSSOBJ} 98a222f159Sespie 99a222f159Sespie${CROSSINCLUDES}: ${CROSSOBJ} 100a222f159Sespie @-mkdir -p ${CROSSDIR}/usr/include 101a222f159Sespie @(cd ${.CURDIR}/include && \ 102141bf37aSespie MACHINE=${TARGET} MACHINE_ARCH=${TARGET_ARCH} \ 103a222f159Sespie MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 1043b94d488Sgrange TARGET_ARCH=${TARGET_ARCH} \ 105a222f159Sespie ${MAKE} prereq && \ 106141bf37aSespie MACHINE=${TARGET} MACHINE_ARCH=${TARGET_ARCH} \ 107a222f159Sespie MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 1083b94d488Sgrange TARGET_ARCH=${TARGET_ARCH} \ 109a222f159Sespie ${MAKE} DESTDIR=${CROSSDIR} includes) 110a222f159Sespie @touch ${CROSSINCLUDES} 111a222f159Sespie 112a78fab76Smiod.if (${TARGET_ARCH} == "m68k" || ${TARGET_ARCH} == "m88k" || \ 113a78fab76Smiod ${TARGET_ARCH} == "vax") 114a222f159SespieBINUTILS= ar as ld nm ranlib objcopy objdump strings strip 115a222f159SespieNEW_BINUTILS?= No 116a222f159Sespie.else 117a222f159SespieBINUTILS= ar as gasp ld nm objcopy objdump ranlib readelf size \ 118a222f159Sespie strings strip 119a222f159SespieNEW_BINUTILS?= Yes 120a222f159Sespie.endif 121a222f159Sespie 122a222f159Sespie${CROSSBINUTILS}: ${CROSSINCLUDES} 123a222f159Sespie.if ${NEW_BINUTILS:L} == "yes" 124a222f159Sespie (cd ${.CURDIR}/gnu/usr.bin/binutils; \ 125a222f159Sespie MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 126141bf37aSespie TARGET_ARCH=${TARGET_ARCH} \ 127a222f159Sespie ${MAKE} -f Makefile.bsd-wrapper depend && \ 128a222f159Sespie MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 129141bf37aSespie TARGET_ARCH=${TARGET_ARCH} \ 130a222f159Sespie ${MAKE} -f Makefile.bsd-wrapper all && \ 131a222f159Sespie DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 132a222f159Sespie ${MAKE} -f Makefile.bsd-wrapper install) 133a222f159Sespie.else 134a222f159Sespie (cd ${.CURDIR}/gnu/usr.bin/gas; \ 135141bf37aSespie TARGET_MACHINE_ARCH=${TARGET_ARCH} \ 136a222f159Sespie MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} depend all; \ 137141bf37aSespie TARGET_MACHINE_ARCH=${TARGET_ARCH} \ 138a222f159Sespie DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 139a222f159Sespie ${MAKE} NOMAN= install) 140a222f159Sespie ln -sf ${CROSSDIR}/usr/bin/as \ 1414149f057Smiod ${CROSSDIR}/usr/${TARGET_CANON}/bin/as 142a222f159Sespie (cd ${.CURDIR}/gnu/usr.bin/ld; \ 143141bf37aSespie TARGET_MACHINE_ARCH=${TARGET_ARCH} \ 144a222f159Sespie MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 145a222f159Sespie ${MAKE} NOPIC= NOMAN= depend all; \ 146141bf37aSespie TARGET_MACHINE_ARCH=${TARGET_ARCH} \ 147a222f159Sespie DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 148a222f159Sespie ${MAKE} NOPIC= NOMAN= install) 149a222f159Sespie ln -sf ${CROSSDIR}/usr/bin/ld \ 150141bf37aSespie ${CROSSDIR}/usr/${TARGET_CANON}/bin/ld 151a222f159Sespie (cd ${.CURDIR}/usr.bin/ar; \ 152*a57924a5Smiod ELF_TOOLCHAIN=no \ 153a222f159Sespie MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN= depend all; \ 154*a57924a5Smiod ELF_TOOLCHAIN=no \ 155a222f159Sespie DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 156a222f159Sespie ${MAKE} NOMAN= install) 157a222f159Sespie ln -sf ${CROSSDIR}/usr/bin/ar \ 158141bf37aSespie ${CROSSDIR}/usr/${TARGET_CANON}/bin/ar 159a222f159Sespie (cd ${.CURDIR}/usr.bin/ranlib; \ 160*a57924a5Smiod ELF_TOOLCHAIN=no \ 161a222f159Sespie MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN= depend all; \ 162*a57924a5Smiod ELF_TOOLCHAIN=no \ 163a222f159Sespie DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 164a222f159Sespie ${MAKE} NOMAN= install) 165a222f159Sespie ln -sf ${CROSSDIR}/usr/bin/ranlib \ 166141bf37aSespie ${CROSSDIR}/usr/${TARGET_CANON}/bin/ranlib 167a222f159Sespie (cd ${.CURDIR}/usr.bin/strip; \ 168a222f159Sespie MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 169141bf37aSespie ${MAKE} TARGET_MACHINE_ARCH=${TARGET_ARCH} \ 170a222f159Sespie NOMAN= depend all; \ 171a222f159Sespie DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 172141bf37aSespie ${MAKE} TARGET_MACHINE_ARCH=${TARGET_ARCH} \ 173a222f159Sespie NOMAN= install) 174a222f159Sespie ln -sf ${CROSSDIR}/usr/bin/strip \ 175141bf37aSespie ${CROSSDIR}/usr/${TARGET_CANON}/bin/strip 176a222f159Sespie.endif 177a222f159Sespie @for cmd in ${BINUTILS}; do \ 178a222f159Sespie if [ ! -e ${CROSSDIR}/usr/bin/$$cmd -a \ 179141bf37aSespie -e ${CROSSDIR}/usr/bin/${TARGET_CANON}-$$cmd ]; then \ 180141bf37aSespie ln -sf ${TARGET_CANON}-$$cmd ${CROSSDIR}/usr/bin/$$cmd ;\ 181a222f159Sespie elif [ -e ${CROSSDIR}/usr/bin/$$cmd -a \ 182141bf37aSespie ! -e ${CROSSDIR}/usr/bin/${TARGET_CANON}-$$cmd ]; then \ 183141bf37aSespie ln -sf $$cmd ${CROSSDIR}/usr/bin/${TARGET_CANON}-$$cmd; \ 184a222f159Sespie fi ;\ 185a222f159Sespie if [ -e ${CROSSDIR}/usr/bin/$$cmd -a \ 186141bf37aSespie ! -e ${CROSSDIR}/usr/${TARGET_CANON}/bin/$$cmd ]; then \ 187a222f159Sespie ln -sf ${CROSSDIR}/usr/bin/$$cmd \ 188141bf37aSespie ${CROSSDIR}/usr/${TARGET_CANON}/bin/$$cmd; \ 189a222f159Sespie fi ;\ 190a222f159Sespie done 191a222f159Sespie @touch ${CROSSBINUTILS} 192a222f159Sespie 193a222f159Sespie# bsd.own.mk can't do it for us 194a78fab76Smiod.if ${TARGET_ARCH} == "alpha" || \ 195a78fab76Smiod ${TARGET_ARCH} == "m68k" || ${TARGET_ARCH} == "m88k" || \ 196a78fab76Smiod ${TARGET_ARCH} == "sparc" || ${TARGET_ARCH} == "vax" 197ca88db65SespieTARGET_USE_GCC3=No 19819bc13dbSmickey.else 19919bc13dbSmickeyTARGET_USE_GCC3=Yes 200a222f159Sespie.endif 201a222f159Sespie 202a222f159Sespie${CROSSGCC}: ${CROSSBINUTILS} 203ca88db65Sespie.if ${TARGET_USE_GCC3:L} == "yes" 204a222f159Sespie (cd ${.CURDIR}/gnu/usr.bin/gcc; \ 205a222f159Sespie MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 206141bf37aSespie TARGET_ARCH=${TARGET_ARCH} CROSSDIR=${CROSSDIR} \ 207a222f159Sespie ${MAKE} -f Makefile.bsd-wrapper depend && \ 208a222f159Sespie MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 209141bf37aSespie TARGET_ARCH=${TARGET_ARCH} CROSSDIR=${CROSSDIR} \ 210a222f159Sespie ${MAKE} -f Makefile.bsd-wrapper all && \ 211a222f159Sespie DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 212a222f159Sespie ${MAKE} -f Makefile.bsd-wrapper install) 213141bf37aSespie ln -sf ${TARGET_CANON}-g++ ${CROSSDIR}/usr/bin/c++ 214a222f159Sespie ln -sf ${CROSSDIR}/usr/libexec/cpp \ 215a222f159Sespie ${CROSSDIR}/usr/bin/cpp 216a222f159Sespie.else 217a222f159Sespie (cd ${CROSSDIR}/usr/obj/gnu/egcs/gcc; \ 218a222f159Sespie /bin/sh ${.CURDIR}/gnu/egcs/gcc/configure \ 219a222f159Sespie --with-gnu-as --with-gnu-ld --prefix ${CROSSDIR}/usr \ 220141bf37aSespie --target ${TARGET_CANON} \ 221a222f159Sespie --enable-languages="c,c++" --enable-cpp --disable-nls \ 222a222f159Sespie --with-gxx-include-dir=${CROSSDIR}/usr/include/g++ && \ 223a222f159Sespie PATH=${CROSSPATH} ${MAKE} BISON=yacc LANGUAGES="${CROSSLANGS}" \ 224a222f159Sespie CFLAGS="${CFLAGS} -I${.CURDIR}/gnu/lib/libiberty/include" \ 225a222f159Sespie LIBIBERTY_INCLUDES=${.CURDIR}/gnu/lib/libiberty/include \ 226a222f159Sespie DEMANGLER_PROG= DEMANGLE_H= LDFLAGS="${LDSTATIC}" build_infodir=. \ 227a222f159Sespie GCC_FOR_TARGET="./xgcc -B./ -I${CROSSDIR}/usr/include" && \ 228a222f159Sespie ${MAKE} BISON=yacc LANGUAGES="${CROSSLANGS}" LDFLAGS="${LDSTATIC}" \ 229a222f159Sespie GCC_FOR_TARGET="./xgcc -B./ -I${CROSSDIR}/usr/include" \ 230a222f159Sespie CFLAGS="${CFLAGS} -I${.CURDIR}/gnu/lib/libiberty/include" \ 231a222f159Sespie LIBIBERTY_INCLUDES=${.CURDIR}/gnu/lib/libiberty/include \ 232a222f159Sespie build_infodir=. INSTALL_MAN= INSTALL_HEADERS_DIR= install) 233141bf37aSespie ln -sf ${TARGET_CANON}-gcc ${CROSSDIR}/usr/bin/cc 234141bf37aSespie ln -sf ${TARGET_CANON}-g++ ${CROSSDIR}/usr/bin/c++ 235a222f159Sespie ${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \ 236a222f159Sespie ${CROSSDIR}/usr/obj/gnu/egcs/gcc/cpp \ 237a222f159Sespie ${CROSSDIR}/usr/libexec/cpp 238a222f159Sespie sed -e 's#/usr/libexec/cpp#${CROSSDIR}/usr/libexec/cpp#' \ 239a222f159Sespie -e 's#/usr/include#${CROSSDIR}/usr/include#' \ 240cf791450Smiod -e 's/@dollaropt@/-$$/' \ 241a222f159Sespie ${.CURDIR}/usr.bin/cpp/cpp.sh > ${CROSSDIR}/usr/bin/cpp 242a222f159Sespie chmod ${BINMODE} ${CROSSDIR}/usr/bin/cpp 243a222f159Sespie chown ${BINOWN}:${BINGRP} ${CROSSDIR}/usr/bin/cpp 244a222f159Sespie.endif 245a222f159Sespie @touch ${CROSSGCC} 246a222f159Sespie 247a222f159Sespie# XXX MAKEOBJDIR maybe should be obj.${TARGET} here, revisit later 248a222f159Sespiecross-lib: ${CROSSGCC} 249141bf37aSespie MACHINE=${TARGET} MACHINE_ARCH=${TARGET_ARCH}; \ 250a222f159Sespie export MACHINE MACHINE_ARCH; \ 251a222f159Sespie (cd ${.CURDIR}/lib; \ 252a222f159Sespie for lib in csu libc; do \ 253a222f159Sespie (cd $$lib; \ 254a222f159Sespie eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 255f16068f4Sgrange ${MAKE} WANTLINT=no depend all install); \ 256a222f159Sespie done; \ 257a222f159Sespie eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 258a222f159Sespie SKIPDIR=\"${NO_CROSS} libocurses/PSD.doc\" \ 259f16068f4Sgrange ${MAKE} WANTLINT=no depend all install) 260a222f159Sespie 261a222f159Sespiecross-bin: ${CROSSOBJ} 262141bf37aSespie MACHINE=${TARGET} MACHINE_ARCH=${TARGET_ARCH}; \ 263a222f159Sespie export MACHINE MACHINE_ARCH; \ 264a222f159Sespie for i in libexec bin sbin usr.bin usr.sbin; do \ 265a222f159Sespie (cd ${.CURDIR}/$$i; \ 266a222f159Sespie eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 267a222f159Sespie SKIPDIR=\"${BINUTILS} ${NO_CROSS}\" \ 268a222f159Sespie ${MAKE} depend all install); \ 269a222f159Sespie done 270a222f159Sespie 271a222f159Sespiecross-etc-root-var: ${CROSSOBJ} 272a222f159Sespie (cd ${.CURDIR}/etc && \ 273c456f6a6Sdrahn MACHINE=${TARGET} MACHINE_ARCH=${TARGET_ARCH} \ 274a222f159Sespie DESTDIR=${CROSSDIR} ${MAKE} distribution-etc-root-var) 275a222f159Sespie 276a222f159Sespiecross-depend: 277a222f159Sespie @(cd ${.CURDIR} && \ 278a222f159Sespie BSDOBJDIR=${CROSSDIR}/usr/obj \ 279a222f159Sespie BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 280a222f159Sespie SKIPDIR="${NO_CROSS}" \ 281a222f159Sespie ${MAKE} depend) 282a222f159Sespie 283a222f159Sespiecross-clean: 284a222f159Sespie @(cd ${.CURDIR} && \ 285a222f159Sespie BSDOBJDIR=${CROSSDIR}/usr/obj \ 286a222f159Sespie BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 287a222f159Sespie SKIPDIR="${NO_CROSS}" \ 288a222f159Sespie ${MAKE} clean) 289a222f159Sespie 290a222f159Sespiecross-cleandir: 291a222f159Sespie @(cd ${.CURDIR} && \ 292a222f159Sespie BSDOBJDIR=${CROSSDIR}/usr/obj \ 293a222f159Sespie BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 294a222f159Sespie SKIPDIR="${NO_CROSS}" \ 295a222f159Sespie ${MAKE} cleandir) 296