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

Reply via email to