build: introduce PRODUCT_ARCH for cross-building

This commit is contained in:
Franco Fichtner 2016-07-17 15:38:10 +02:00
parent e1a4e36eec
commit 20517931c8
17 changed files with 77 additions and 55 deletions

View File

@ -26,6 +26,8 @@ TYPE?= ${NAME:tl}
SUFFIX?= #-devel
FLAVOUR?= OpenSSL
SETTINGS?= 16.1
_ARCH!= uname -m
ARCH?= ${_ARCH}
DEVICE?= a10
SPEED?= 115200
UEFI?= yes
@ -68,6 +70,8 @@ ${TARGET}: ${_TARGET}
.if "${VERBOSE}" != ""
VERBOSE_FLAGS= -x
.else
VERBOSE_HIDDEN= @
.endif
# Expand build steps to launch into the selected
@ -75,7 +79,8 @@ VERBOSE_FLAGS= -x
.for STEP in ${STEPS}
${STEP}: lint
@cd ${.CURDIR}/build && sh ${VERBOSE_FLAGS} ./${.TARGET}.sh \
${VERBOSE_HIDDEN} cd ${.CURDIR}/build && \
sh ${VERBOSE_FLAGS} ./${.TARGET}.sh -a ${ARCH} \
-f ${FLAVOUR} -n ${NAME} -v ${VERSION} -s ${SETTINGS} \
-S ${SRCDIR} -P ${PORTSDIR} -p ${PLUGINSDIR} -T ${TOOLSDIR} \
-C ${COREDIR} -R ${PORTSREFDIR} -t ${TYPE} -k "${PRIVKEY}" \

View File

@ -74,6 +74,7 @@ All build steps are invoked via make(1):
Available build options are:
* ARCH: the target architecture if not native
* CONFIG: reads the below from the specified file
* DEVICE: loads device-specific modifications, e.g. "a10" (default)
* FLAVOUR: "OpenSSL" (default), "LibreSSL"

View File

@ -31,7 +31,7 @@ SELF=base
. ./common.sh && $(${SCRUB_ARGS})
BASE_SET=$(find ${SETSDIR} -name "base-*-${ARCH}.txz")
BASE_SET=$(find ${SETSDIR} -name "base-*-${PRODUCT_ARCH}.txz")
if [ -f "${BASE_SET}" -a -z "${1}" ]; then
echo ">>> Reusing base set: ${BASE_SET}"
@ -40,7 +40,7 @@ fi
git_describe ${SRCDIR}
BASE_SET=${SETSDIR}/base-${REPO_VERSION}-${ARCH}
BASE_SET=${SETSDIR}/base-${REPO_VERSION}-${PRODUCT_ARCH}
sh ./clean.sh ${SELF}
@ -65,14 +65,14 @@ tar -tf ${BASE_SET}.txz | \
sed -e 's/^\.//g' -e '/\/$/d' | sort > ${STAGEDIR}/setdiff.new
: > ${STAGEDIR}/setdiff.old
if [ -s ${CONFIGDIR}/plist.base.${ARCH} ]; then
cat ${CONFIGDIR}/plist.base.${ARCH} | \
if [ -s ${CONFIGDIR}/plist.base.${PRODUCT_ARCH} ]; then
cat ${CONFIGDIR}/plist.base.${PRODUCT_ARCH} | \
sed -e 's/^\.//g' -e '/\/$/d' | sort > ${STAGEDIR}/setdiff.old
fi
: > ${STAGEDIR}/setdiff.tmp
if [ -s ${CONFIGDIR}/plist.obsolete.${ARCH} ]; then
diff -u ${CONFIGDIR}/plist.obsolete.${ARCH} \
if [ -s ${CONFIGDIR}/plist.obsolete.${PRODUCT_ARCH} ]; then
diff -u ${CONFIGDIR}/plist.obsolete.${PRODUCT_ARCH} \
${STAGEDIR}/setdiff.new | grep '^-/' | \
cut -b 2- > ${STAGEDIR}/setdiff.tmp
fi

View File

@ -36,7 +36,7 @@ if [ -z "${1}" ]; then
exit 0
fi
IMAGE=$(find ${IMAGESDIR} -name "*-${1}-${ARCH}.*")
IMAGE=$(find ${IMAGESDIR} -name "*-${1}-${PRODUCT_ARCH}.*")
echo ">>> Booting image ${IMAGE}..."

View File

@ -33,7 +33,7 @@ SELF=cdrom
check_images ${SELF} ${@}
CDROM="${IMAGESDIR}/${PRODUCT_RELEASE}-cdrom-${ARCH}.iso"
CDROM="${IMAGESDIR}/${PRODUCT_RELEASE}-cdrom-${PRODUCT_ARCH}.iso"
# rewrite the disk label, because we're install media
LABEL="${LABEL}_Install"
@ -52,7 +52,7 @@ setup_entropy ${STAGEDIR}/work
LABEL=$(echo ${LABEL} | tr '[:lower:]' '[:upper:]')
UEFIBOOT=
if [ ${ARCH} = "amd64" -a -n "${PRODUCT_UEFI}" ]; then
if [ ${PRODUCT_ARCH} = "amd64" -a -n "${PRODUCT_UEFI}" ]; then
dd if=/dev/zero of=${STAGEDIR}/efiboot.img bs=4k count=200
DEV=$(mdconfig -a -t vnode -f ${STAGEDIR}/efiboot.img)
newfs_msdos -F 12 -m 0xf8 /dev/${DEV}

View File

@ -35,11 +35,11 @@ for ARG in ${@}; do
case ${ARG} in
base)
echo ">>> Removing base set"
rm -f ${SETSDIR}/base-*-${ARCH}.*
rm -f ${SETSDIR}/base-*-${PRODUCT_ARCH}.*
;;
cdrom)
echo ">>> Removing cdrom image"
rm -f ${IMAGESDIR}/*-cdrom-${ARCH}.*
rm -f ${IMAGESDIR}/*-cdrom-${PRODUCT_ARCH}.*
;;
core)
echo ">>> Removing core from packages set"
@ -59,15 +59,15 @@ for ARG in ${@}; do
;;
kernel)
echo ">>> Removing kernel set"
rm -f ${SETSDIR}/kernel-*-${ARCH}.*
rm -f ${SETSDIR}/kernel-*-${PRODUCT_ARCH}.*
;;
nano)
echo ">>> Removing nano image"
rm -f ${IMAGESDIR}/*-nano-${ARCH}.*
rm -f ${IMAGESDIR}/*-nano-${PRODUCT_ARCH}.*
;;
packages|ports)
echo ">>> Removing packages set"
rm -f ${SETSDIR}/packages-*-${PRODUCT_FLAVOUR}-${ARCH}.tar
rm -f ${SETSDIR}/packages-*-${PRODUCT_FLAVOUR}-${PRODUCT_ARCH}.tar
;;
plugins)
echo ">>> Removing plugins from packages set"
@ -79,11 +79,11 @@ for ARG in ${@}; do
;;
release)
echo ">>> Removing release set"
rm -f ${SETSDIR}/release-*-${PRODUCT_FLAVOUR}-${ARCH}.tar
rm -f ${SETSDIR}/release-*-${PRODUCT_FLAVOUR}-${PRODUCT_ARCH}.tar
;;
serial)
echo ">>> Removing serial image"
rm -f ${IMAGESDIR}/*-serial-${ARCH}.*
rm -f ${IMAGESDIR}/*-serial-${PRODUCT_ARCH}.*
;;
sets)
setup_stage ${SETSDIR}
@ -99,11 +99,11 @@ for ARG in ${@}; do
;;
vga)
echo ">>> Removing vga image"
rm -f ${IMAGESDIR}/*-vga-${ARCH}.*
rm -f ${IMAGESDIR}/*-vga-${PRODUCT_ARCH}.*
;;
vm)
echo ">>> Removing vm image"
rm -f ${IMAGESDIR}/*-vm-${ARCH}.*
rm -f ${IMAGESDIR}/*-vm-${PRODUCT_ARCH}.*
;;
esac
done

View File

@ -35,13 +35,26 @@ usage()
echo "Usage: ${0} -f flavour -n name -v version -R freebsd-ports.git" >&2
echo " -C core.git -P ports.git -S src.git -T tools.git -t type" >&2
echo " -k /path/to/privkey -K /path/to/pubkey -m web_mirror" >&2
echo " -d device [ -l customsigncheck -L customsigncommand ]" >&2
echo " [ -o stagedirprefix ] [...]" >&2
echo " -d device [ -l customsigncheck -L customsigncommand ]" >&2
echo " [ -o stagedirprefix ] [...]" >&2
exit 1
}
while getopts C:c:d:f:K:k:L:l:m:n:o:P:p:R:S:s:T:t:U:u:v: OPT; do
while getopts a:C:c:d:f:K:k:L:l:m:n:o:P:p:R:S:s:T:t:U:u:v: OPT; do
case ${OPT} in
a)
case "${OPTARG}" in
amd64|i386)
export PRODUCT_SUBARCH=${OPTARG##*:}
export PRODUCT_ARCH=${OPTARG%%:*}
SCRUB_ARGS=${SCRUB_ARGS};shift;shift
;;
*)
echo "ARCH wants amd64 or i386" >&2
exit 1
;;
esac
;;
C)
export COREDIR=${OPTARG}
SCRUB_ARGS=${SCRUB_ARGS};shift;shift
@ -147,6 +160,7 @@ while getopts C:c:d:f:K:k:L:l:m:n:o:P:p:R:S:s:T:t:U:u:v: OPT; do
SCRUB_ARGS=${SCRUB_ARGS};shift;shift
;;
*)
echo "Unknown argument '${OPT}'" >&2
usage
;;
esac
@ -154,6 +168,7 @@ done
if [ -z "${PRODUCT_NAME}" -o \
-z "${PRODUCT_TYPE}" -o \
-z "${PRODUCT_ARCH}" -o \
-z "${PRODUCT_FLAVOUR}" -o \
-z "${PRODUCT_VERSION}" -o \
-z "${PRODUCT_SETTINGS}" -o \
@ -170,13 +185,12 @@ if [ -z "${PRODUCT_NAME}" -o \
fi
# misc. foo
export CONFIG_PKG="/usr/local/etc/pkg/repos/origin.conf"
export CPUS=$(sysctl kern.smp.cpus | awk '{ print $2 }')
export CONFIG_XML="/usr/local/etc/config.xml"
export ARCH=${ARCH:-$(uname -m)}
export TARGET_ARCH=${PRODUCT_ARCH}
export TARGETARCH=${PRODUCT_ARCH}
export LABEL=${PRODUCT_NAME}
export TARGET_ARCH=${ARCH}
export TARGETARCH=${ARCH}
export XARCH=$(uname -m)
# define build and config directories
export CONFIGDIR="${TOOLSDIR}/config/${PRODUCT_SETTINGS}"
@ -315,7 +329,7 @@ setup_base()
echo ">>> Setting up world in ${1}"
BASE_SET=$(find ${SETSDIR} -name "base-*-${ARCH}.txz")
BASE_SET=$(find ${SETSDIR} -name "base-*-${PRODUCT_ARCH}.txz")
tar -C ${1} -xpf ${BASE_SET}
@ -340,7 +354,7 @@ setup_kernel()
echo ">>> Setting up kernel in ${1}"
KERNEL_SET=$(find ${SETSDIR} -name "kernel-*-${ARCH}.txz")
KERNEL_SET=$(find ${SETSDIR} -name "kernel-*-${PRODUCT_ARCH}.txz")
tar -C ${1} -xpf ${KERNEL_SET}
@ -391,7 +405,7 @@ check_images()
SELF=${1}
SKIP=${2}
IMAGE=$(find ${IMAGESDIR} -name "*-${SELF}-${ARCH}.*")
IMAGE=$(find ${IMAGESDIR} -name "*-${SELF}-${PRODUCT_ARCH}.*")
if [ -f "${IMAGE}" -a -z "${SKIP}" ]; then
echo ">>> Reusing ${SELF} image: ${IMAGE}"
@ -404,7 +418,7 @@ check_packages()
SELF=${1}
SKIP=${2}
PACKAGESET=$(find ${SETSDIR} -name "packages-*-${PRODUCT_FLAVOUR}-${ARCH}.tar")
PACKAGESET=$(find ${SETSDIR} -name "packages-*-${PRODUCT_FLAVOUR}-${PRODUCT_ARCH}.tar")
if [ -z "${SELF}" -o -z "${PACKAGESET}" -o -n "${SKIP}" ]; then
return
@ -426,7 +440,7 @@ extract_packages()
rm -rf ${BASEDIR}${PACKAGESDIR}/All
mkdir -p ${BASEDIR}${PACKAGESDIR}/All
PACKAGESET=$(find ${SETSDIR} -name "packages-*-${PRODUCT_FLAVOUR}-${ARCH}.tar")
PACKAGESET=$(find ${SETSDIR} -name "packages-*-${PRODUCT_FLAVOUR}-${PRODUCT_ARCH}.tar")
if [ -f "${PACKAGESET}" ]; then
tar -C ${BASEDIR}${PACKAGESDIR} -xpf ${PACKAGESET}
fi
@ -630,7 +644,7 @@ bundle_packages()
# generate index files
pkg repo ${BASEDIR}${PACKAGESDIR}-new/ ${SIGNARGS}
REPO_RELEASE="${REPO_VERSION}-${PRODUCT_FLAVOUR}-${ARCH}"
REPO_RELEASE="${REPO_VERSION}-${PRODUCT_FLAVOUR}-${PRODUCT_ARCH}"
echo -n ">>> Creating package mirror set for ${REPO_RELEASE}... "
tar -C ${STAGEDIR}${PACKAGESDIR}-new -cf \
${SETSDIR}/packages-${REPO_RELEASE}.tar .

View File

@ -31,7 +31,7 @@ SELF=kernel
. ./common.sh && $(${SCRUB_ARGS})
KERNEL_SET=$(find ${SETSDIR} -name "kernel-*-${ARCH}.txz")
KERNEL_SET=$(find ${SETSDIR} -name "kernel-*-${PRODUCT_ARCH}.txz")
if [ -f "${KERNEL_SET}" -a -z "${1}" ]; then
echo ">>> Reusing kernel set: ${KERNEL_SET}"
@ -40,15 +40,15 @@ fi
git_describe ${SRCDIR}
KERNEL_SET=${SETSDIR}/kernel-${REPO_VERSION}-${ARCH}
KERNEL_SET=${SETSDIR}/kernel-${REPO_VERSION}-${PRODUCT_ARCH}
sh ./clean.sh ${SELF}
BUILD_KERNEL="SMP"
cp ${CONFIGDIR}/${BUILD_KERNEL} ${SRCDIR}/sys/${ARCH}/conf/${BUILD_KERNEL}
cp ${CONFIGDIR}/${BUILD_KERNEL} ${SRCDIR}/sys/${PRODUCT_ARCH}/conf/${BUILD_KERNEL}
MAKE_ARGS="TARGET_ARCH=${ARCH} KERNCONF=${BUILD_KERNEL}"
MAKE_ARGS="TARGET_ARCH=${PRODUCT_ARCH} KERNCONF=${BUILD_KERNEL}"
make -s -C${SRCDIR} -j${CPUS} buildkernel ${MAKE_ARGS} NO_KERNELCLEAN=yes
make -s -C${SRCDIR}/release obj ${MAKE_ARGS}

View File

@ -35,7 +35,7 @@ SELF=nano
check_images ${SELF} ${@}
NANOIMG="${IMAGESDIR}/${PRODUCT_RELEASE}-nano-${ARCH}.img"
NANOIMG="${IMAGESDIR}/${PRODUCT_RELEASE}-nano-${PRODUCT_ARCH}.img"
sh ./clean.sh ${SELF}

View File

@ -74,7 +74,7 @@ echo "${PORTS_LIST}" | while read PORT_ORIGIN PORT_BROKEN; do
fi
if [ -n "\${PORT_BROKEN}" ]; then
for PORT_QUIRK in \$(echo \${PORT_BROKEN} | tr ',' ' '); do
if [ \${PORT_QUIRK} = ${ARCH} ]; then
if [ \${PORT_QUIRK} = ${PRODUCT_ARCH} ]; then
continue 2
fi
if [ \${PORT_QUIRK} = ${PRODUCT_FLAVOUR} ]; then

View File

@ -35,18 +35,18 @@ for ARG in ${@}; do
case ${ARG} in
base)
sh ./clean.sh ${ARG}
URL="${PRODUCT_MIRROR}/sets/${ARG}-${PRODUCT_VERSION}-${ARCH}"
URL="${PRODUCT_MIRROR}/sets/${ARG}-${PRODUCT_VERSION}-${PRODUCT_ARCH}"
fetch -o ${SETSDIR} ${URL}.obsolete
fetch -o ${SETSDIR} ${URL}.txz
;;
kernel)
sh ./clean.sh ${ARG}
URL="${PRODUCT_MIRROR}/sets/${ARG}-${PRODUCT_VERSION}-${ARCH}"
URL="${PRODUCT_MIRROR}/sets/${ARG}-${PRODUCT_VERSION}-${PRODUCT_ARCH}"
fetch -o ${SETSDIR} ${URL}.txz
;;
packages)
sh ./clean.sh ${ARG}
URL="${PRODUCT_MIRROR}/sets/${ARG}-${PRODUCT_VERSION}-${PRODUCT_FLAVOUR}-${ARCH}"
URL="${PRODUCT_MIRROR}/sets/${ARG}-${PRODUCT_VERSION}-${PRODUCT_FLAVOUR}-${PRODUCT_ARCH}"
fetch -o ${SETSDIR} ${URL}.tar
;;
esac

View File

@ -31,8 +31,8 @@ SELF=rebase
. ./common.sh && $(${SCRUB_ARGS})
BASE_OBSOLETE=$(find ${SETSDIR} -name "base-*-${ARCH}.obsolete")
BASE_SET=$(find ${SETSDIR} -name "base-*-${ARCH}.txz")
BASE_OBSOLETE=$(find ${SETSDIR} -name "base-*-${PRODUCT_ARCH}.obsolete")
BASE_SET=$(find ${SETSDIR} -name "base-*-${PRODUCT_ARCH}.txz")
tar -tf ${BASE_SET} | sort > ${CONFIGDIR}/plist.base.${ARCH}
cp ${BASE_OBSOLETE} ${CONFIGDIR}/plist.obsolete.${ARCH}
tar -tf ${BASE_SET} | sort > ${CONFIGDIR}/plist.base.${PRODUCT_ARCH}
cp ${BASE_OBSOLETE} ${CONFIGDIR}/plist.obsolete.${PRODUCT_ARCH}

View File

@ -31,6 +31,8 @@ SELF=release
. ./common.sh && $(${SCRUB_ARGS})
RELEASE_SET="${SETSDIR}/release-${PRODUCT_VERSION}-${PRODUCT_FLAVOUR}-${PRODUCT_ARCH}.tar"
# make sure the all-encompassing package is a release, too
setup_stage ${STAGEDIR}
extract_packages ${STAGEDIR}
@ -57,14 +59,14 @@ echo "done"
echo -n ">>> Checksumming images for ${PRODUCT_RELEASE}... "
(cd ${STAGEDIR}/work && sha256 ${PRODUCT_RELEASE}-*) \
> ${STAGEDIR}/tmp/${PRODUCT_RELEASE}-checksums-${ARCH}.sha256
> ${STAGEDIR}/tmp/${PRODUCT_RELEASE}-checksums-${PRODUCT_ARCH}.sha256
(cd ${STAGEDIR}/work && md5 ${PRODUCT_RELEASE}-*) \
> ${STAGEDIR}/tmp/${PRODUCT_RELEASE}-checksums-${ARCH}.md5
> ${STAGEDIR}/tmp/${PRODUCT_RELEASE}-checksums-${PRODUCT_ARCH}.md5
mv ${STAGEDIR}/tmp/* ${STAGEDIR}/work/
echo "done"
echo -n ">>> Bundling images for ${PRODUCT_RELEASE}... "
tar -C ${STAGEDIR}/work -cf ${SETSDIR}/release-${PRODUCT_VERSION}-${PRODUCT_FLAVOUR}-${ARCH}.tar .
tar -C ${STAGEDIR}/work -cf ${RELEASE_SET} .
echo "done"

View File

@ -34,7 +34,7 @@ SELF=serial
check_images ${SELF} ${@}
SERIALIMG="${IMAGESDIR}/${PRODUCT_RELEASE}-serial-${ARCH}.img"
SERIALIMG="${IMAGESDIR}/${PRODUCT_RELEASE}-serial-${PRODUCT_ARCH}.img"
# rewrite the disk label, because we're install media
LABEL="${LABEL}_Install"

View File

@ -31,18 +31,18 @@ SELF=sign
. ./common.sh && $(${SCRUB_ARGS})
BASE_SET=$(find ${SETSDIR} -name "base-*-${ARCH}.txz")
BASE_SET=$(find ${SETSDIR} -name "base-*-${PRODUCT_ARCH}.txz")
if [ -f "${BASE_SET}" ]; then
generate_signature ${BASE_SET}
generate_signature ${BASE_SET%%.txz}.obsolete
fi
KERNEL_SET=$(find ${SETSDIR} -name "kernel-*-${ARCH}.txz")
KERNEL_SET=$(find ${SETSDIR} -name "kernel-*-${PRODUCT_ARCH}.txz")
if [ -f "${KERNEL_SET}" ]; then
generate_signature ${KERNEL_SET}
fi
PKGS_SET=$(find ${SETSDIR} -name "packages-*-${PRODUCT_FLAVOUR}-${ARCH}.tar")
PKGS_SET=$(find ${SETSDIR} -name "packages-*-${PRODUCT_FLAVOUR}-${PRODUCT_ARCH}.tar")
if [ -f "${PKGS_SET}" ]; then
setup_stage ${STAGEDIR}
extract_packages ${STAGEDIR}

View File

@ -33,7 +33,7 @@ SELF=vga
check_images ${SELF} ${@}
VGAIMG="${IMAGESDIR}/${PRODUCT_RELEASE}-vga-${ARCH}.img"
VGAIMG="${IMAGESDIR}/${PRODUCT_RELEASE}-vga-${PRODUCT_ARCH}.img"
# rewrite the disk label, because we're install media
LABEL="${LABEL}_Install"
@ -57,7 +57,7 @@ EOF
makefs -B little -o label=${LABEL} ${STAGEDIR}/root.part ${STAGEDIR}/work
UEFIBOOT=
if [ ${ARCH} = "amd64" -a -n "${PRODUCT_UEFI}" ]; then
if [ ${PRODUCT_ARCH} = "amd64" -a -n "${PRODUCT_UEFI}" ]; then
UEFIBOOT="-p efi:=${STAGEDIR}/work/boot/boot1.efifat"
fi

View File

@ -53,7 +53,7 @@ if [ -n "${3}" ]; then
fi
fi
VMIMG="${IMAGESDIR}/${PRODUCT_RELEASE}-vm-${ARCH}.${VMFORMAT}"
VMIMG="${IMAGESDIR}/${PRODUCT_RELEASE}-vm-${PRODUCT_ARCH}.${VMFORMAT}"
VMBASE="${STAGEDIR}/vmbase"
sh ./clean.sh ${SELF}