The following diff should fix most of the cross build issues seen on gcc4 platform targets
i386 and amd64 hosts can now compil macppc and sparc64 amd64 can compile i386 target i386 cannot compile amd64 target (dunno yet) Native builds have been tested for i386, amd64 and macppc. Any comments? Index: Makefile.cross =================================================================== RCS file: /cvs/src/Makefile.cross,v retrieving revision 1.39 diff -u -p -u -r1.39 Makefile.cross --- Makefile.cross 24 Sep 2010 14:04:06 -0000 1.39 +++ Makefile.cross 24 Sep 2010 16:39:23 -0000 @@ -273,11 +273,15 @@ ${CROSSGCC}: ${CROSSBINUTILS} TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \ MACHINE=${TARGET} \ PATH=${CROSSPATH} ${MAKE} install) + cp -f ${CROSSDIR}/usr/bin/g++ ${CROSSDIR}/usr/bin/${TARGET_CANON}-g++ cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-g++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-c++ cp -f ${CROSSDIR}/usr/libexec/cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp - rm -f ${CROSSDIR}/usr/bin/gcc ${CROSSDIR}/usr/bin/cc ${CROSSDIR}/usr/libexec/cpp + cp -f ${CROSSDIR}/usr/bin/gcc ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc ln -sf ${TARGET_CANON}-cc ${CROSSDIR}/usr/${TARGET_CANON}/bin/cc - ln -sf ${TARGET_CANON}-c++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/c++ + + cp -f ${CROSSDIR}/usr/bin/gcc ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc + rm -f ${CROSSDIR}/usr/bin/gcc ${CROSSDIR}/usr/bin/g++ ${CROSSDIR}/usr/bin/cc ${CROSSDIR}/usr/libexec/cpp + # fix links rm -f ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp sed -e 's#/usr/libexec/cpp#${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp#' \ -e 's/@GNUC@//' \ Index: gnu/usr.bin/cc/Makefile.inc =================================================================== RCS file: /cvs/src/gnu/usr.bin/cc/Makefile.inc,v retrieving revision 1.2 diff -u -p -u -r1.2 Makefile.inc --- gnu/usr.bin/cc/Makefile.inc 15 Oct 2009 23:18:30 -0000 1.2 +++ gnu/usr.bin/cc/Makefile.inc 24 Sep 2010 16:39:23 -0000 @@ -7,6 +7,10 @@ .if !defined(__CC_MAKEFILE_INC__) __CC_MAKEFILE_INC__= ${MFILE} +.if defined(CROSSDIR) +TOOLS_PREFIX=${CROSSDIR} +.endif + GCCLIB= ${.CURDIR}/../../../gcc GCCDIR= ${GCCLIB}/gcc @@ -17,7 +21,7 @@ MD_FILE= ${GCCDIR}/config/${GCC_CPU}/${G GCC_TARGET= ${TARGET_ARCH}-unknown-openbsd${OSREV} CFLAGS+= -DIN_GCC -DHAVE_CONFIG_H -CFLAGS+= -DPREFIX=\"${TOOLS_PREFIX}/usr\" +CFLAGS+= -DPREFIX=\"${TOOLS_PREFIX}/usr/\" #CFLAGS+= -DWANT_COMPILER_INVARIANTS # If building 64-bit longs for the i386, "_LARGE_LONG" should also be defined Index: gnu/usr.bin/cc/cc/Makefile =================================================================== RCS file: /cvs/src/gnu/usr.bin/cc/cc/Makefile,v retrieving revision 1.1.1.1 diff -u -p -u -r1.1.1.1 Makefile --- gnu/usr.bin/cc/cc/Makefile 15 Oct 2009 20:50:20 -0000 1.1.1.1 +++ gnu/usr.bin/cc/cc/Makefile 24 Sep 2010 16:39:23 -0000 @@ -22,6 +22,6 @@ beforeinstall: .endif afterinstall: - ${.CURDIR}/../cc/obj/cc -dumpspecs > ${DESTDIR}${SPECDIR}/specs + ${.OBJDIR}/cc -dumpspecs > ${DESTDIR}${SPECDIR}/specs .include <bsd.prog.mk> Index: gnu/usr.bin/cc/cc_tools/openbsd-native.h =================================================================== RCS file: /cvs/src/gnu/usr.bin/cc/cc_tools/openbsd-native.h,v retrieving revision 1.1.1.1 diff -u -p -u -r1.1.1.1 openbsd-native.h --- gnu/usr.bin/cc/cc_tools/openbsd-native.h 15 Oct 2009 20:50:21 -0000 1.1.1.1 +++ gnu/usr.bin/cc/cc_tools/openbsd-native.h 24 Sep 2010 16:39:23 -0000 @@ -42,7 +42,11 @@ #undef MD_STARTFILE_PREFIX /* We don't need one for now. */ #define STANDARD_STARTFILE_PREFIX PREFIX"/lib/" #define STARTFILE_PREFIX_SPEC PREFIX"/lib/" +#ifdef CROSS_COMPILE +#define STANDARD_BINDIR_PREFIX PREFIX DEFAULT_TARGET_MACHINE "/bin/" +#else #define STANDARD_BINDIR_PREFIX PREFIX"/bin/" +#endif /* OpenBSD is 4.4BSD derived */ #define bsd4_4 Index: gnu/usr.bin/cc/collect2/Makefile =================================================================== RCS file: /cvs/src/gnu/usr.bin/cc/collect2/Makefile,v retrieving revision 1.2 diff -u -p -u -r1.2 Makefile --- gnu/usr.bin/cc/collect2/Makefile 6 May 2010 20:58:10 -0000 1.2 +++ gnu/usr.bin/cc/collect2/Makefile 24 Sep 2010 16:39:23 -0000 @@ -15,4 +15,8 @@ BINDIR= /usr/lib/gcc-lib/${GCC_TARGET}/$ LDADD= ${LIBIBERTY} +.if defined(CROSSDIR) +CFLAGS+= -DTARGET_MACHINE=\"$(GCC_TARGET)\" +.endif + .include <bsd.prog.mk> Index: gnu/usr.bin/cc/libgcc/Makefile =================================================================== RCS file: /cvs/src/gnu/usr.bin/cc/libgcc/Makefile,v retrieving revision 1.15 diff -u -p -u -r1.15 Makefile --- gnu/usr.bin/cc/libgcc/Makefile 11 Sep 2010 11:52:39 -0000 1.15 +++ gnu/usr.bin/cc/libgcc/Makefile 24 Sep 2010 16:39:23 -0000 @@ -8,9 +8,13 @@ GCCDIR= ${GCCLIB}/gcc .include "../Makefile.tgt" +.if defined(CROSSDIR) +LD=${CROSSDIR}/usr/${GCC_TARGET}/bin/ld +.endif + .if defined(CROSS_TARGET) #Building cc for target, CC should already be the cross compiler -.elif exists(${.CURDIR}/../cc/obj) +.elif ${.OBJDIR} != ${.CURDIR} CC=${.OBJDIR}/../cc/cc -B ${.OBJDIR}/../cc1 .else CC=${.CURDIR}/../cc/cc -B ${.CURDIR}/../cc1 Dale Rahn dr...@dalerahn.com