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