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 [email protected]