>> The following diff attempts to cross-build more things, in particular
>> gnu/lib (except for libiberty). It also passes the proper optimization
>> flags so that libstdc++-v3 gets built with optimization.
>
> Doesn't build for arm64, probably because BUILD_GCC4 is transparently
> set by the host and not reset to NO.

Damn. This diff ought to work better.

Index: Makefile.cross
===================================================================
RCS file: /OpenBSD/src/Makefile.cross,v
retrieving revision 1.94
diff -u -p -r1.94 Makefile.cross
--- Makefile.cross      23 May 2017 14:57:30 -0000      1.94
+++ Makefile.cross      6 Jun 2017 18:15:11 -0000
@@ -43,9 +43,15 @@ MACHINE_IS_LP64 =
 
 #CROSSCPPFLAGS?=       -nostdinc -I${CROSSDIR}/usr/include
 #CROSSLDFLAGS?=        -nostdlib -L${CROSSDIR}/usr/lib -static
+DEBUG?=                -g
 CROSSCFLAGS?=  ${CROSSCPPFLAGS} -O2 ${PIPE} ${DEBUG}
-CROSSCXXFLAGS?=        ${CROSSCPPFLAGS}
+CROSSCXXFLAGS?=        ${CROSSCPPFLAGS} -O2 ${PIPE} ${DEBUG}
 #LDSTATIC?=    -static
+.if (${TARGET_ARCH} == "alpha") || (${TARGET_ARCH} == "sparc64")
+CROSSPICFLAG?=-fPIC
+.else
+CROSSPICFLAG?=-fpic
+.endif
 
 CROSSDIR=      ${DESTDIR}/usr/cross/${TARGET}
 CROSSENV=      AR=${CROSSDIR}/usr/${TARGET_CANON}/bin/ar \
@@ -63,6 +69,7 @@ CROSSENV=     AR=${CROSSDIR}/usr/${TARGET_CA
                CFLAGS=\"${CROSSCFLAGS}\" CPPFLAGS=\"${CROSSCPPFLAGS}\" \
                CXXFLAGS=\"${CROSSCXXFLAGS}\" \
                LDFLAGS=\"${CROSSLDFLAGS}\" \
+               PICFLAG=\"${CROSSPICFLAG}\" \
                CROSSDIR=\"${CROSSDIR}\"
 CROSSADDPATH=:${CROSSDIR}/usr/${TARGET_CANON}/bin
 CROSSPATH=     /usr/bin:/bin:/usr/sbin:/sbin${CROSSADDPATH}
@@ -75,18 +82,31 @@ CROSSOBJ=   ${CROSSDIR}/.obj_done
 CROSSINCLUDES= ${CROSSDIR}/.includes_done
 CROSSBINUTILS= ${CROSSDIR}/.binutils_done
 CROSSGCC=      ${CROSSDIR}/.gcc_done
-#NO_CROSS=     isakmpd keynote ssh
+NO_CROSS=      libiberty
 
 .include <bsd.own.mk>
 
+BUILD_CLANG=no
+BUILD_GCC3=no
+BUILD_GCC4=no
+
 .for _arch in ${TARGET_ARCH}
-.if !empty(CLANG_ARCH:M${_arch})
-COMPILER_VERSION=clang
-BUILD_CLANG=yes
-.elif !empty(GCC3_ARCH:M${_arch})
+.if !empty(GCC3_ARCH:M${_arch})
 COMPILER_VERSION=gcc3
-.else
+.elif !empty(GCC4_ARCH:M${_arch})
 COMPILER_VERSION=gcc4
+.else
+COMPILER_VERSION=clang
+.endif
+
+.if !empty(CLANG_ARCH:M${_arch})
+BUILD_CLANG=yes
+.endif
+.if !empty(GCC3_ARCH:M${_arch})
+BUILD_GCC3=yes
+.endif
+.if !empty(GCC4_ARCH:M${_arch})
+BUILD_GCC4=yes
 .endif
 
 .if !empty(PIE_ARCH:M${_arch})
@@ -101,6 +121,7 @@ PIE_DEFAULT=
 BINUTILS=      ar as gasp ld nm objcopy objdump ranlib readelf size \
                strings strip
 BINUTILS_DIR=gnu/usr.bin/binutils-2.17
+
 .endfor
 
 # no libcrypto.... these won't build
@@ -113,6 +134,13 @@ NO_CROSS+=nsd
 NO_CROSS+=bind
 NO_CROSS+=unbound
 
+.if ${BUILD_GCC3:L} != "yes"
+NO_CROSS+=libobjc libstdc++
+.endif
+.if ${BUILD_GCC4:L} != "yes"
+NO_CROSS+=../usr.bin/cc/libobjc libstdc++-v3 libsupc++-v3
+.endif
+
 cross-dirs:    ${CROSSDIRS}
 cross-obj:     ${CROSSOBJ}
 cross-includes:        ${CROSSINCLUDES}
@@ -172,12 +200,18 @@ ${CROSSINCLUDES}: ${CROSSOBJ}
            MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU} \
            MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
            TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
+           BUILD_GCC3=${BUILD_GCC3} \
+           BUILD_GCC4=${BUILD_GCC4} \
+           BUILD_CLANG=${BUILD_CLANG} \
            ${MAKE} prereq && \
            COMPILER_VERSION=${COMPILER_VERSION} \
            MACHINE=${TARGET} \
            MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU} \
            MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
            TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
+           BUILD_GCC3=${BUILD_GCC3} \
+           BUILD_GCC4=${BUILD_GCC4} \
+           BUILD_CLANG=${BUILD_CLANG} \
            ${MAKE} DESTDIR=${CROSSDIR} includes)
        @touch ${CROSSINCLUDES}
 
@@ -222,7 +256,7 @@ ${CROSSBINUTILS}:   ${CROSSINCLUDES}
 
 
 ${CROSSGCC}:           ${CROSSBINUTILS}
-.if ${COMPILER_VERSION:L} == "clang"
+.if ${BUILD_CLANG:L} == "yes"
        (cd ${.CURDIR}/gnu/usr.bin/clang; \
            MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
            MACHINE_ARCH=${TARGET_ARCH} \
@@ -253,7 +287,8 @@ ${CROSSGCC}:                ${CROSSBINUTILS}
        chmod +x ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc;
        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++; \
        chmod +x ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-c++;
-.elif ${COMPILER_VERSION:L} == "gcc3"
+.endif
+.if ${BUILD_GCC3:L} == "yes"
        (cd ${.CURDIR}/gnu/usr.bin/gcc; \
            MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
            TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
@@ -280,21 +315,22 @@ ${CROSSGCC}:              ${CROSSBINUTILS}
        chmod ${BINMODE} 
${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
        chown ${BINOWN}:${BINGRP} 
${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cpp 
        ln -sf ${TARGET_CANON}-cpp ${CROSSDIR}/usr/${TARGET_CANON}/bin/cpp
-.else
+.endif
+.if ${BUILD_GCC4:L} == "yes"
        (cd ${.CURDIR}/gnu/usr.bin/cc; \
            env CROSSDIR=${CROSSDIR} \
            PIE_DEFAULT=${PIE_DEFAULT} \
            MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
            TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
            MACHINE=${TARGET} \
-           PATH=${CROSSPATH} ${MAKE} depend  )
+           PATH=${CROSSPATH} ${MAKE} depend)
        (cd ${.CURDIR}/gnu/usr.bin/cc; \
            env CROSSDIR=${CROSSDIR} \
            PIE_DEFAULT=${PIE_DEFAULT} \
            MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
            TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
            MACHINE=${TARGET} \
-           ${MAKE} all )
+           ${MAKE} all)
        (cd ${.CURDIR}/gnu/usr.bin/cc; \
            env CROSSDIR=${CROSSDIR} DESTDIR=${CROSSDIR} \
            PIE_DEFAULT=${PIE_DEFAULT} \
@@ -307,6 +343,7 @@ ${CROSSGCC}:                ${CROSSBINUTILS}
        cp -f ${CROSSDIR}/usr/libexec/cpp 
${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-libexeccpp
        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 
@@ -343,6 +380,29 @@ cross-lib: ${CROSSGCC}
            eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} 
DESTDIR=${CROSSDIR} \
                SKIPDIR=\"${NO_CROSS}\" \
                ${MAKE} install)
+.if ${BUILD_GCC3:L} == "yes"
+       (cd ${.CURDIR}/gnu/lib; \
+           eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
+               SKIPDIR=\"${NO_CROSS}\" \
+               BUILD_GCC3=${BUILD_GCC3} \
+               BUILD_GCC4=${BUILD_GCC4} \
+               COMPILER_VERSION=${COMPILER_VERSION} \
+               ${MAKE} cleandir)
+.endif
+       (cd ${.CURDIR}/gnu/lib; \
+           eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
+               SKIPDIR=\"${NO_CROSS}\" \
+               TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
+               BUILD_GCC3=${BUILD_GCC3} \
+               BUILD_GCC4=${BUILD_GCC4} \
+               COMPILER_VERSION=${COMPILER_VERSION} \
+               ${MAKE} depend all; \
+           eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} 
DESTDIR=${CROSSDIR} \
+               SKIPDIR=\"${NO_CROSS}\" \
+               BUILD_GCC3=${BUILD_GCC3} \
+               BUILD_GCC4=${BUILD_GCC4} \
+               COMPILER_VERSION=${COMPILER_VERSION} \
+               ${MAKE} install)
 
 cross-bin:     ${CROSSOBJ}
        MACHINE=${TARGET} \
@@ -351,10 +411,10 @@ cross-bin:        ${CROSSOBJ}
        for i in libexec bin sbin usr.bin usr.sbin; do \
        (cd ${.CURDIR}/$$i; \
            eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
-               SKIPDIR=\"${BINUTILS} ${NO_CROSS}\" \
+               SKIPDIR=\"${NO_CROSS}\" \
                ${MAKE} depend all ; \
            eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} 
DESTDIR=${CROSSDIR} \
-               SKIPDIR=\"${BINUTILS} ${NO_CROSS}\" \
+               SKIPDIR=\"${NO_CROSS}\" \
                ${MAKE} install); \
        done
 
@@ -362,7 +422,7 @@ cross-gnu:  ${CROSSOBJ}
        MACHINE=${TARGET} \
            MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
        export MACHINE MACHINE_ARCH MACHINE_CPU; \
-       for i in gnu/lib gnu/usr.sbin gnu/usr.bin ; do \
+       for i in gnu/usr.sbin gnu/usr.bin ; do \
        (cd ${.CURDIR}/$$i; \
            eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
                SKIPDIR=\"${NO_CROSS}\" \
Index: gnu/lib/libstdc++/Makefile.bsd-wrapper
===================================================================
RCS file: /OpenBSD/src/gnu/lib/libstdc++/Makefile.bsd-wrapper,v
retrieving revision 1.8
diff -u -p -r1.8 Makefile.bsd-wrapper
--- gnu/lib/libstdc++/Makefile.bsd-wrapper      5 Nov 2007 17:02:43 -0000       
1.8
+++ gnu/lib/libstdc++/Makefile.bsd-wrapper      6 Jun 2017 18:15:11 -0000
@@ -44,6 +44,13 @@ CF_SHARED= --disable-shared
 CF_SHARED= --enable-shared
 .endif
 
+# cross-compilation
+.if defined(TARGET_ARCH)
+CONFIGTARGET=--target=${TARGET_ARCH}-unknown-openbsd${OSREV}
+.else
+CONFIGTARGET=
+.endif
+
 config.status:
        PATH="/bin:/usr/bin:/sbin:/usr/sbin" \
        INSTALL_PROGRAM="${INSTALL} ${INSTALL_COPY} ${INSTALL_STRIP}" \
@@ -57,6 +64,7 @@ config.status:
                --disable-multilib \
                --with-gnu-ld \
                --with-gxx-include-dir=${GXX_INCDIR} \
+               ${CONFIGTARGET} \
                && touch config.status
 
 #CPPFLAGS+=-DHAVE_CONFIG_H -I${.CURDIR}/libstdc++/libmath

Reply via email to