#!/usr/bin/env bash

# script/toolchain-download: Download and extract the GNU Arm Embedded toolchain
#                            for building the Trezor firmware.

set -e

cd "$(dirname "$0")/../vendor"

readonly URL="https://launchpad.net/gcc-arm-embedded/5.0/5-2016-q2-update/+download/gcc-arm-none-eabi-5_4-2016q2-20160622-linux.tar.bz2"
readonly SHA256SUM="9910b6b5df12efe564dbb3856bf1599d4c16178a6f28bd8a23c9e5c3edc219e4"

readonly FILENAME="$(basename "$URL")"
readonly DIRECTORY="gcc-arm-none-eabi-5_4-2016q2"

if [ "$(uname)" != "Linux" ]; then
    printf "Unsupported platform\n" >&2
    exit 1
fi

validate_download() {
    printf "$SHA256SUM $FILENAME" | sha256sum -c
}

download_file() {
    curl -LC- "$URL" -o "$FILENAME"
}

extract_download() {
    local temporary_dir="$(mktemp -d ./toolchain.XXXXXXXXXX)"
    trap "rm -rf $temporary_dir" EXIT

    tar -xf "$FILENAME" -C "$temporary_dir"
    mv "$temporary_dir/$DIRECTORY" .
    rm -f "$FILENAME"
}

if [ ! -d "$DIRECTORY" ]; then
    if ! validate_download; then
        download_file
        validate_download
    fi

    extract_download
fi

# init toolchain as repository so Git will skip it
git init -q "$DIRECTORY"

# update toolchain symlink
ln -snf "$DIRECTORY" toolchain

# sanity-check extracted toolchain
toolchain/bin/arm-none-eabi-gcc --version >/dev/null