| #!/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}" |