blob: 1e93e14b5230b4635117854be0e7f252bae3779e [file] [log] [blame]
#!/usr/bin/env bash
# Copyright 2016 The Fuchsia Authors
#
# Use of this source code is governed by a MIT-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/MIT
# This script builds the Zircon toolchain and uploads it to Google Storage.
# This script is expected to be executed on Jenkins, as part of a continuous
# builds infrastructure. As such, it it organized to accept the arch target
# as an environment variable, since that is how Jenkins passes arguments from
# matrix build configurations.
# This script also assumes a directory structure based on the Zircon Jiri
# manifests. Jenkins uses these manifests to sync the code.
set -e
set -x
# We assume the following directory structure:
# ./zircon/scripts
# ./third_party/gcc_none_toolchains
readonly SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "${SCRIPT_DIR}/../../third_party/gcc_none_toolchains"
# We require the ARCH variable to be set when calling this script. Passing arguments
# via environment variables is how Jenkins does things :/
if [[ -z "${ARCH}" ]]; then
echo "ARCH environment variable must be set!"
exit 99
fi
# Sanity check the value of ARCH.
if [[ "${ARCH}" != "${ARCH// /}" ]]; then
echo "ARCH appears to contain spaces; provide only one ARCH at a time"
exit 99
fi
# Build the toolchain: `do-build` will fetch source, apply patches and build gcc and friends.
./do-build --target "${ARCH}-none" -j2 --strip
# Figure out where the toolchains got generated. They end up in a directory with the
# structure $ARCH-$ABI-$VERSION-$OS-$HOSTARCH.
readonly OS="$(uname)"
readonly HOSTARCH="$(uname -m)"
readonly ABI="elf"
readonly TOOLCHAIN_DIR="$(ls -td ${ARCH}-${ABI}-*-${OS}-${HOSTARCH} | head -1)"
# Fetch the current git SHA: we upload the prebuilts with a SHA that corresponds
# to the SHA of the tree we built from.
readonly GIT_SHA="$(git log -1 --format=%H)"
readonly TARBALL="/tmp/${GIT_SHA}"
# Write the README file.
cp "${SCRIPT_DIR}/upload-toolchain.README.md" "${TOOLCHAIN_DIR}/README.md"
echo "${GIT_SHA}" >> "${TOOLCHAIN_DIR}/README.md"
# Tar up the toolchain.
tar jcvf "${TARBALL}" "${TOOLCHAIN_DIR}"
# Upload the prebuilts to Google Storage. We don't do any authentication here because
# we assume that the environment has been set up with auth already. For notes on
# how to do that, see: https://cloud.google.com/storage/docs/authentication
readonly GS_BUCKET="gs://fuchsia-build/magenta/toolchain/${ARCH}-${ABI}/${OS}-${HOSTARCH}"
gsutil cp "${TARBALL}" "${GS_BUCKET}/${GIT_SHA}"