Merge pull request #77 from flatcar-linux/marga-kinvolk/split-toolchains

bootstrap_sdk: build and upload SDK toolchain pkgs
This commit is contained in:
Marga Manterola 2020-06-26 14:09:18 +02:00 committed by GitHub
commit d7752a2c34
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 74 additions and 38 deletions

View File

@ -40,14 +40,16 @@ TYPE="flatcar-sdk"
# include upload options
. "${BUILD_LIBRARY_DIR}/release_util.sh" || exit 1
ROOT_OVERLAY=${TEMPDIR}/stage4_overlay
## Define the stage4 config template
catalyst_stage4() {
cat <<EOF
target: stage4
pkgcache_path: $BINPKGS
stage4/packages: coreos-devel/sdk-depends
stage4/fsscript: ${BUILD_LIBRARY_DIR}/catalyst_default_stage4.sh
stage4/root_overlay: ${TEMPDIR}/stage4_overlay
stage4/fsscript: ${BUILD_LIBRARY_DIR}/catalyst_sdk.sh
stage4/root_overlay: ${ROOT_OVERLAY}
stage4/empty: /etc/portage/repos.conf /root /usr/portage /var/cache/edb
stage4/rm: /etc/machine-id /etc/resolv.conf
EOF
@ -64,17 +66,24 @@ check_gsutil_opts
if [[ "$STAGES" =~ stage4 ]]; then
info "Setting release to ${FLATCAR_VERSION}"
rm -rf "${TEMPDIR}/stage4_overlay"
rm -rf "${ROOT_OVERLAY}"
# need to setup the lib->lib64 symlink correctly
libdir=$(get_sdk_libdir)
mkdir -p "${TEMPDIR}/stage4_overlay/usr/${libdir}"
mkdir -p "${ROOT_OVERLAY}/usr/${libdir}"
if [[ "${libdir}" != lib ]]; then
ln -s "${libdir}" "${TEMPDIR}/stage4_overlay/usr/lib"
ln -s "${libdir}" "${ROOT_OVERLAY}/usr/lib"
fi
"${BUILD_LIBRARY_DIR}/set_lsb_release" \
--root "${TEMPDIR}/stage4_overlay"
--root "${ROOT_OVERLAY}"
fi
# toolchain_util.sh is required by catalyst_sdk.sh
# To copy it, we need to create /tmp with the right permissions as it will be
# used in the exported chroot.
mkdir -p "${ROOT_OVERLAY}/tmp"
chmod 1777 "${ROOT_OVERLAY}/tmp"
cp "${BUILD_LIBRARY_DIR}/toolchain_util.sh" "${ROOT_OVERLAY}/tmp"
catalyst_build
if [[ "$STAGES" =~ stage4 ]]; then
@ -97,6 +106,10 @@ if [[ "$STAGES" =~ stage4 ]]; then
"$BUILDS/${release_name}.CONTENTS" "$BUILDS/${release_name}.DIGESTS"
sign_and_upload_files "packages" "${def_upload_path}" "pkgs/" \
"${BINPKGS}"/*
# Upload the SDK toolchain packages
sign_and_upload_files "cross toolchain packages" "${def_upload_path}" \
"toolchain/" "${BINPKGS}/crossdev"/*
fi
command_completed

View File

@ -1,9 +0,0 @@
#!/bin/bash
source /tmp/chroot-functions.sh
echo "Double checking everything is fresh and happy."
run_merge -uDN --with-bdeps=y world
echo "Setting the default Python interpreter to Python 2."
eselect python set python2.7

View File

@ -0,0 +1,22 @@
#!/bin/bash
set -e
source /tmp/chroot-functions.sh
source /tmp/toolchain_util.sh
echo "Double checking everything is fresh and happy."
run_merge -uDN --with-bdeps=y world
echo "Setting the default Python interpreter to Python 2."
eselect python set python2.7
echo "Building cross toolchain for the SDK."
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)/crossdev" \
install_cross_rust "${cross_chost}" ${clst_myemergeopts}
done

View File

@ -35,15 +35,11 @@ build_target_toolchain() {
# --root is required because run_merge overrides ROOT=
PORTAGE_CONFIGROOT="$ROOT" \
run_merge -u --root="$ROOT" --sysroot="$ROOT" "${TOOLCHAIN_PKGS[@]}"
export clst_myemergeopts="$( echo "$clst_myemergeopts" | sed -e 's/--newuse//' )"
PORTAGE_CONFIGROOT="$ROOT" \
run_merge --root="$ROOT" --sysroot="$ROOT" dev-lang/rust
}
configure_crossdev_overlay / /tmp/crossdev
# TODO: this is building the SDK packages and shouldn't actually be needed
for cross_chost in $(get_chost_list); do
echo "Building cross toolchain for ${cross_chost}"
PKGDIR="$(portageq envvar PKGDIR)/crossdev" \

View File

@ -314,7 +314,7 @@ install_cross_toolchain() {
fi
# Only call crossdev to regenerate configs if something has changed
if ! cmp --quiet - "${cross_cfg}" <<<"${cross_cfg_data}"
if [[ ! -d "${cross_overlay}/cross-${cross_chost}" ]] || ! cmp --quiet - "${cross_cfg}" <<<"${cross_cfg_data}"
then
$sudo crossdev "${cross_flags[@]}" --init-target
$sudo tee "${cross_cfg}" <<<"${cross_cfg_data}" >/dev/null
@ -326,8 +326,10 @@ install_cross_toolchain() {
if emerge "${emerge_flags[@]}" \
--pretend "${cross_pkgs[@]}" | grep -q '^\[ebuild'
then
echo "Doing a full bootstrap via crossdev"
$sudo crossdev "${cross_flags[@]}" --stage4
else
echo "Installing existing binaries"
$sudo emerge "${emerge_flags[@]}" \
"cross-${cross_chost}/gdb" "${cross_pkgs[@]}"
if [ "${cross_chost}" = aarch64-cros-linux-gnu ]; then
@ -392,6 +394,25 @@ install_cross_libs() {
PORTAGE_CONFIGROOT="$ROOT" $sudo emerge --root="$ROOT" --sysroot="$ROOT" "$@" -u $cross_deps
}
install_cross_rust() {
local cross_chost="$1"; shift
local emerge_flags=( "$@" --binpkg-respect-use=y --update )
# may be called from either catalyst (root) or upgrade_chroot (user)
local sudo="env"
if [[ $(id -u) -ne 0 ]]; then
sudo="sudo -E"
fi
if [ "${cross_chost}" = "aarch64-cros-linux-gnu" ]; then
echo "Building Rust for arm64"
# If no aarch64 folder exists, try to remove any existing Rust packages.
[ ! -d /usr/lib/rust-*/rustlib/aarch64-unknown-linux-gnu ] && ($sudo emerge -C dev-lang/rust || true)
$sudo emerge "${emerge_flags[@]}" dev-lang/rust
fi
}
# Get the latest GCC profile for a given CHOST
# The extra flag can be blank, hardenednopie, and so on. See gcc-config -l
# Usage: gcc_get_latest_profile chost [extra]

View File

@ -38,17 +38,6 @@ cp "${BUILD_LIBRARY_DIR}/toolchain_util.sh" "${ROOT_OVERLAY}/tmp"
catalyst_build
def_upload_path="${UPLOAD_ROOT}/sdk/${ARCH}/${FLAGS_version}"
sign_and_upload_files "cross toolchain packages" "${def_upload_path}" \
"toolchain/" "${BINPKGS}/crossdev"/*
for board in $(get_board_list); do
if [ "$board" = arm64-usr ]; then
sign_and_upload_files "Rust aarch64 crossdev toolchain packages" "${def_upload_path}" \
"toolchain-arm64/" "${BINPKGS}/target/${board}"/Packages "${BINPKGS}/target/${board}"/dev-lang
fi
done
# TODO: Actually just TOOLCHAIN_PKGS and the exact dependencies should be uploaded
for board in $(get_board_list); do
board_packages="${BINPKGS}/target/${board}"

View File

@ -236,8 +236,9 @@ get_gclient_root() {
# Populate the ENVIRONMENT_WHITELIST array.
load_environment_whitelist() {
ENVIRONMENT_WHITELIST=(
FLATCAR_BUILD_ID
COREOS_OFFICIAL
FLATCAR_BUILD_ID
FORCE_STAGES
GIT_AUTHOR_EMAIL
GIT_AUTHOR_NAME
GIT_COMMITTER_EMAIL

View File

@ -13,8 +13,11 @@ gpg --import "${GPG_SECRET_KEY_FILE}"
# Wipe all of catalyst.
sudo rm -rf src/build
enter sudo FLATCAR_DEV_BUILDS_SDK="${DOWNLOAD_ROOT_SDK}" /mnt/host/source/src/scripts/bootstrap_sdk \
--sign="${SIGNING_USER}" \
--sign_digests="${SIGNING_USER}" \
--upload_root="${UPLOAD_ROOT}" \
--upload
enter sudo \
FLATCAR_DEV_BUILDS_SDK="${DOWNLOAD_ROOT_SDK}" \
FORCE_STAGES="${FORCE_STAGES}" \
/mnt/host/source/src/scripts/bootstrap_sdk \
--sign="${SIGNING_USER}" \
--sign_digests="${SIGNING_USER}" \
--upload_root="${UPLOAD_ROOT}" \
--upload