1
0
mirror of https://git.yoctoproject.org/meta-arm synced 2026-06-04 14:10:01 +00:00

ci: make get-binary-toolchain run per build

In a distributed, non-homogeneous CI setup, the binary-toolchain setup
script might not run on the machine that needs the toolchains.  Make
this per-build and it will always be there, at the expense of running on
builds that might not need it (though it still should be fast).

Also, there is an issue with the directory where the binary toolchain is
located being global, and racing against other systems using, setting up,
and tearing down.  Link this to a local directory to avoid any races.

Signed-off-by: Jon Mason <jon.mason@arm.com>
This commit is contained in:
Jon Mason
2021-09-13 13:44:35 -04:00
parent 6566abf9d7
commit bf5ec4f203
3 changed files with 15 additions and 25 deletions
+4 -8
View File
@@ -18,12 +18,15 @@ stages:
BB_LOGCONFIG: $CI_PROJECT_DIR/ci/logging.yml BB_LOGCONFIG: $CI_PROJECT_DIR/ci/logging.yml
TOOLCHAIN_DIR: $CI_BUILDS_DIR/persist/toolchains TOOLCHAIN_DIR: $CI_BUILDS_DIR/persist/toolchains
IMAGE_DIR: $CI_PROJECT_DIR/work/build/tmp/deploy/images IMAGE_DIR: $CI_PROJECT_DIR/work/build/tmp/deploy/images
TOOLCHAIN_LINK_DIR: $CI_PROJECT_DIR/work/build/toolchains
before_script: before_script:
- echo KAS_WORK_DIR = $KAS_WORK_DIR - echo KAS_WORK_DIR = $KAS_WORK_DIR
- echo SSTATE_DIR = $SSTATE_DIR - echo SSTATE_DIR = $SSTATE_DIR
- echo DL_DIR = $DL_DIR - echo DL_DIR = $DL_DIR
- rm -rf $KAS_WORK_DIR - rm -rf $KAS_WORK_DIR
- mkdir --verbose --parents $KAS_WORK_DIR $KAS_REPO_REF_DIR $SSTATE_DIR $DL_DIR $TOOLCHAIN_DIR - mkdir --verbose --parents $KAS_WORK_DIR $KAS_REPO_REF_DIR $SSTATE_DIR $DL_DIR $TOOLCHAIN_DIR $TOOLCHAIN_LINK_DIR
# Must do this here, as it's the only way to make sure the toolchain is installed on the same builder
- ./ci/get-binary-toolchains $DL_DIR $TOOLCHAIN_DIR $TOOLCHAIN_LINK_DIR
# Generalised fragment to do a Kas build # Generalised fragment to do a Kas build
.build: .build:
@@ -43,13 +46,6 @@ update-repos:
script: script:
- flock --verbose --timeout 60 $KAS_REPO_REF_DIR ./ci/update-repos - flock --verbose --timeout 60 $KAS_REPO_REF_DIR ./ci/update-repos
get-binary-toolchains:
extends: .setup
stage: prep
script:
- ./ci/get-binary-toolchains $DL_DIR $TOOLCHAIN_DIR
# #
# Bootstrap stage, bootstrap and machine coverage # Bootstrap stage, bootstrap and machine coverage
# #
+1 -1
View File
@@ -5,4 +5,4 @@ local_conf_header:
cc: | cc: |
PNBLACKLIST[gcc-cross-arm] = "Using external toolchain" PNBLACKLIST[gcc-cross-arm] = "Using external toolchain"
TCMODE = "external-arm" TCMODE = "external-arm"
EXTERNAL_TOOLCHAIN = "${TOOLCHAIN_DIR}/${TARGET_ARCH}" EXTERNAL_TOOLCHAIN = "${TOPDIR}/toolchains/${TARGET_ARCH}"
+10 -16
View File
@@ -6,9 +6,10 @@ VER="10.2-2020.11"
DOWNLOAD_DIR=$1 DOWNLOAD_DIR=$1
TOOLCHAIN_DIR=$2 TOOLCHAIN_DIR=$2
TOOLCHAIN_LINK_DIR=$3
# These should be already created by .bitlab-ci.yml, but do here if run outside of that env # These should be already created by .gitlab-ci.yml, but do here if run outside of that env
mkdir -p $DOWNLOAD_DIR $TOOLCHAIN_DIR mkdir -p $DOWNLOAD_DIR $TOOLCHAIN_DIR $TOOLCHAIN_LINK_DIR
if [ $HOST_ARCH = "aarch64" ]; then if [ $HOST_ARCH = "aarch64" ]; then
#AArch64 Linux hosted cross compilers #AArch64 Linux hosted cross compilers
@@ -32,21 +33,14 @@ else
fi fi
for i in arm aarch64 aarch64_be; do for i in arm aarch64 aarch64_be; do
if [ ! -f $DOWNLOAD_DIR/gcc-arm-$VER-$HOST_ARCH-$i-none-linux-gnu*.tar.xz ]; then if [ ! -d $TOOLCHAIN_DIR/gcc-arm-$VER-$HOST_ARCH-$i-none-linux-gnu*/ ]; then
continue if [ ! -f $DOWNLOAD_DIR/gcc-arm-$VER-$HOST_ARCH-$i-none-linux-gnu*.tar.xz ]; then
fi continue
if [ -d $TOOLCHAIN_DIR/$i ]; then
echo "$TOOLCHAIN_DIR/$i EXISTS!"
MANIFEST=$(ls $TOOLCHAIN_DIR/$i | grep txt)
if [[ $MANIFEST != $VER-$HOST_ARCH-$i-none-linux-gnu*.txt ]]; then
echo "Removing old $MANIFEST for $VER-$HOST_ARCH-$i-*.txt toolchain"
rm -rf $TOOLCHAIN_DIR/$i
fi fi
tar -C $TOOLCHAIN_DIR -axvf $DOWNLOAD_DIR/gcc-arm-$VER-$HOST_ARCH-$i-none-linux-gnu*.tar.xz
fi fi
if [ ! -d $TOOLCHAIN_DIR/$i ]; then # Setup a link for the toolchain to use local to the building machine (e.g., not in a shared location)
tar -C $TOOLCHAIN_DIR -axvf $DOWNLOAD_DIR/gcc-arm-$VER-$HOST_ARCH-$i-none-linux-gnu*.tar.xz ln -s $TOOLCHAIN_DIR/gcc-arm-$VER-$HOST_ARCH-$i-none-linux-gnu* $TOOLCHAIN_LINK_DIR/$i
mv $TOOLCHAIN_DIR/gcc-arm-$VER-$HOST_ARCH-$i-none-linux-gnu*/ $TOOLCHAIN_DIR/$i
fi
done done