flatcar-scripts/build_library/catalyst_toolchains.sh
Krzesimir Nowak 20596288ae build_library/catalyst_toolchains: Copy binaries from sysroot too
Any meson package now uses sysroot.eclass as a part of the cross-file
creation and the eclass requires ld.so and ldd to be available in
${ROOT}/usr/bin, so copy over the bin and sbin directories too, just
in case.

Signed-off-by: Krzesimir Nowak <knowak@microsoft.com>
2026-02-20 12:13:38 +01:00

72 lines
2.3 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}")"
function btt_emerge() {
# --root is required because run_merge overrides ROOT=
PORTAGE_CONFIGROOT="$ROOT" run_merge --root="$ROOT" --sysroot="$ROOT" "${@}"
}
# install baselayout first so we have the basic directory
# structure for libraries and binaries copied from sysroot
btt_emerge --oneshot --nodeps sys-apps/baselayout
# copy libraries, binaries and header files from sysroot to root -
# sysroot may be using split-usr, whereas root does not, so take
# this into account
(
shopt -s nullglob
local d f
local -a files
for d in "${SYSROOT}"/{,usr/}{bin,sbin,lib*}; do
if [[ ! -d ${d} ]]; then
continue
fi
files=( "${d}"/* )
if [[ ${#files[@]} -gt 0 ]]; then
f=${d##*/}
cp -at "${ROOT}/usr/${f}" "${files[@]}"
fi
done
cp -at "${ROOT}"/usr "${SYSROOT}"/usr/include
)
btt_emerge --update "${TOOLCHAIN_PKGS[@]}"
unset -f btt_emerge
}
configure_crossdev_overlay / /usr/local/portage/crossdev
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