Files
tubestation/taskcluster/scripts/misc/build-sysroot.sh
Mike Hommey a213924b5d Bug 1719229 - Rename the bootstrappable sysroot toolchains. r=firefox-build-system-reviewers,andi
In cross-compilation setups (x86_64 host, i686 or aarch64 target), we're
going to need two sysroots. Obviously, we need the sysroot paths to be
different in that case, so the sysroot path themselves need to contain
some distinctive name, and we'll use the `target.toolchain` name for
that (the target triplet with the vendor/machine stripped out).

Because the path name needs to be reflected in the artifact name as well
as the toolchain name, we also change them.

And because the current prefix in the toolchain name is now redundant
with the suffix, we remove the prefix, and allow the bootstrapping
mechanism to try toolchains without the prefix.

Differential Revision: https://phabricator.services.mozilla.com/D119846
2021-07-14 08:54:43 +00:00

101 lines
2.5 KiB
Bash
Executable File

#!/bin/sh
set -x
set -e
arch=$1
shift
SNAPSHOT=20210208T213147Z
sysroot=$(basename $TOOLCHAIN_ARTIFACT)
sysroot=${sysroot%%.*}
case "$arch" in
i386|amd64)
dist=jessie
if [ -n "$PACKAGES_TASKS" ]; then
gcc_version=7
else
gcc_version=4.9
fi
;;
arm64)
dist=buster
gcc_version=8
;;
*)
echo "$arch is not supported." >&2
exit 1
;;
esac
packages="
linux-libc-dev
libstdc++-${gcc_version}-dev
libdbus-glib-1-dev
libdrm-dev
libfontconfig1-dev
libfreetype6-dev
libgconf2-dev
libgcc-${gcc_version}-dev
libgtk-3-dev
libpango1.0-dev
libpulse-dev
libx11-xcb-dev
libxt-dev
valgrind
$*
"
# --keyring=... works around https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=981710
# For a sysroot, we don't need everything. Essentially only libraries and headers, as
# well as pkgconfig files. We exclude debug info files and valgrind files that are not
# useful to build.
queue_base="$TASKCLUSTER_ROOT_URL/api/queue/v1"
(
echo "deb http://snapshot.debian.org/archive/debian/$SNAPSHOT $dist main"
for task in $PACKAGES_TASKS; do
echo "deb [trusted=yes] $queue_base/task/$task/artifacts/public/build/ apt/"
done
) | mmdebstrap \
--architectures=$arch \
--variant=extract \
--include=$(echo $packages | tr ' ' ,) \
$dist \
$sysroot \
- \
--dpkgopt=path-exclude="*" \
--dpkgopt=path-include="/lib/*" \
--dpkgopt=path-include="/lib32/*" \
--dpkgopt=path-include="/usr/include/*" \
--dpkgopt=path-include="/usr/lib/*" \
--dpkgopt=path-include="/usr/lib32/*" \
--dpkgopt=path-exclude="/usr/lib/debug/*" \
--dpkgopt=path-exclude="/usr/lib/valgrind/*" \
--dpkgopt=path-include="/usr/share/pkgconfig/*" \
--keyring=/usr/share/keyrings/debian-archive-removed-keys.gpg \
-v
# Adjust symbolic links to link into the sysroot instead of absolute
# paths that end up pointing at the host system.
find $sysroot -type l | while read l; do
t=$(readlink $l)
case "$t" in
/*)
# We have a path in the form "$sysroot/a/b/c/d" and we want ../../..,
# which is how we get from d to the root of the sysroot. For that,
# we start from the directory containing d ("$sysroot/a/b/c"), remove
# all non-slash characters, leaving is with "///", replace each slash
# with "../", which gives us "../../../", and then we remove the last
# slash.
rel=$(dirname $l | sed 's,[^/],,g;s,/,../,g;s,/$,,')
ln -sf $rel$t $l
;;
esac
done
tar caf $sysroot.tar.zst $sysroot
mkdir -p "$UPLOAD_DIR"
mv "$sysroot.tar.zst" "$UPLOAD_DIR"