mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-07 21:16:57 +02:00
Since EAPI=7 was supported, portage can no longer use different ROOT and SYSROOT values. This adjusts the paths so that the first phase builds cross-toolchains under /usr/${CHOST}, then the native toolchains are built under /build/${BOARD} (as was being done previously). Now that the cross-toolchain development files can't be used when building the native toolchain, the headers and libs are stupidly copied into the board root to be used used and then overwritten by the board packages as they are built. Since this is all done in a chroot, these changes shouldn't affect the SDK host.
56 lines
1.9 KiB
Bash
56 lines
1.9 KiB
Bash
#!/bin/bash
|
|
|
|
set -e
|
|
source /tmp/chroot-functions.sh
|
|
source /tmp/toolchain_util.sh
|
|
|
|
# A note on packages:
|
|
# The default PKGDIR is /usr/portage/packages
|
|
# To make sure things are uploaded to the correct places we split things up:
|
|
# crossdev build packages use ${PKGDIR}/crossdev (uploaded to SDK location)
|
|
# build deps in crossdev's sysroot use ${PKGDIR}/cross/${CHOST} (no upload)
|
|
# native toolchains use ${PKGDIR}/target/${BOARD} (uploaded to board location)
|
|
|
|
configure_target_root() {
|
|
local board="$1"
|
|
local cross_chost=$(get_board_chost "$1")
|
|
local profile=$(get_board_profile "${board}")
|
|
|
|
CBUILD="$(portageq envvar CBUILD)" \
|
|
CHOST="${cross_chost}" \
|
|
ROOT="/build/${board}" \
|
|
SYSROOT="/build/${board}" \
|
|
_configure_sysroot "${profile}"
|
|
}
|
|
|
|
build_target_toolchain() {
|
|
local board="$1"
|
|
local ROOT="/build/${board}"
|
|
local SYSROOT="/usr/$(get_board_chost "${board}")"
|
|
|
|
mkdir -p "${ROOT}/usr"
|
|
cp -at "${ROOT}" "${SYSROOT}"/lib*
|
|
cp -at "${ROOT}"/usr "${SYSROOT}"/usr/include "${SYSROOT}"/usr/lib*
|
|
|
|
# --root is required because run_merge overrides ROOT=
|
|
PORTAGE_CONFIGROOT="$ROOT" \
|
|
run_merge -u --root="$ROOT" --sysroot="$ROOT" "${TOOLCHAIN_PKGS[@]}"
|
|
}
|
|
|
|
configure_crossdev_overlay / /tmp/crossdev
|
|
|
|
for cross_chost in $(get_chost_list); do
|
|
echo "Building cross toolchain for ${cross_chost}"
|
|
PKGDIR="$(portageq envvar PKGDIR)/crossdev" \
|
|
install_cross_toolchain "${cross_chost}" ${clst_myemergeopts}
|
|
PKGDIR="$(portageq envvar PKGDIR)/cross/${cross_chost}" \
|
|
install_cross_libs "${cross_chost}" ${clst_myemergeopts}
|
|
done
|
|
|
|
for board in $(get_board_list); do
|
|
echo "Building native toolchain for ${board}"
|
|
target_pkgdir="$(portageq envvar PKGDIR)/target/${board}"
|
|
PKGDIR="${target_pkgdir}" configure_target_root "${board}"
|
|
PKGDIR="${target_pkgdir}" build_target_toolchain "${board}"
|
|
done
|