This is a proof-of-concept of cross-building installers under src/distrib.

Theoretically it is possible to cross-build installers, because those programs
in the installer are all small, base programs, that are covered by decent
BSD makefiles.

It actually turned out to be easy by only a few adjustments like this:

diff --git a/Makefile.cross b/Makefile.cross
index 8e2afa1..894eb8c 100644
--- a/Makefile.cross
+++ b/Makefile.cross
@@ -1,7 +1,7 @@
 # $OpenBSD: Makefile.cross,v 1.85 2016/05/11 21:52:48 deraadt Exp $
 
 cross-tools:   cross-includes cross-binutils cross-gcc cross-lib
-cross-distrib: cross-tools cross-bin cross-share cross-sys cross-etc-root-var
+cross-build:   cross-tools cross-bin cross-share cross-sys cross-etc-root-var 
cross-distrib
 # cross-gnu \
 
 # Have to compute TARGET_ARCH directly in the Makefile, for .if tests involving
@@ -364,6 +364,20 @@ cross-etc-root-var:        ${CROSSOBJ}
            DESTDIR=${CROSSDIR} \
            ${MAKE} distribution-etc-root-var)
 
+# XXX Append `-j1' to ${MAKEFLAGS} to force serialized make execution
+cross-distrib:   ${CROSSOBJ}
+       MACHINE=${TARGET} \
+           MACHINE_ARCH=${TARGET_ARCH} MACHINE_CPU=${TARGET_CPU}; \
+       export MACHINE MACHINE_ARCH MACHINE_CPU; \
+       for i in distrib; do \
+           (cd ${.CURDIR}/$$i; \
+               eval ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
+               MAKEFLAGS=\"${MAKEFLAGS} -j1\" \
+               SKIPDIR=\"${NO_CROSS}\" \
+               DESTDIR=${CROSSDIR} \
+               ${MAKE} depend all install); \
+       done
+
 cross-depend:
        @(cd ${.CURDIR} && \
            BSDOBJDIR=${CROSSDIR}/usr/obj \
diff --git a/distrib/amd64/common/Makefile.inc 
b/distrib/amd64/common/Makefile.inc
index 8a2bfea..2b2bc24 100644
--- a/distrib/amd64/common/Makefile.inc
+++ b/distrib/amd64/common/Makefile.inc
@@ -122,8 +122,14 @@ install:
 .endif # RELEASEDIR
 
 ${CBIN}.mk ${CBIN}.cache ${CBIN}.c: ${CRUNCHCONF}
+.ifdef TARGET
        crunchgen -E -D ${BSDSRCDIR} -L ${DESTDIR}/usr/lib \
+       -O obj.${MACHINE}.${TARGET} \
        -c ${CBIN}.c -e ${CBIN} -m ${CBIN}.mk ${CRUNCHCONF}
+.else
+       crunchgen -E -D ${BSDSRCDIR} -L ${DESTDIR}/usr/lib \
+       -c ${CBIN}.c -e ${CBIN} -m ${CBIN}.mk ${CRUNCHCONF}
+.endif
 
 ${CBIN}: ${CBIN}.mk ${CBIN}.cache ${CBIN}.c
        ${MAKE} -f ${CBIN}.mk SRCLIBDIR=${.CURDIR}/../../../lib all

Reply via email to