#!/bin/bash
#
# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Install the prebuilt RISC-V GCC/LLVM toolchain.

function clean {
  if [[ ! -f "${PREINSTALL_DIR}/${TOOLCHAIN_TARBALL}" ]]; then
    rm "${DOWNLOAD_DIR}/${TOOLCHAIN_TARBALL}" \
       "${DOWNLOAD_DIR}/${TOOLCHAIN_TARBALL}.sha256sum"
  fi
}

function die {
  echo "$@" >/dev/stderr
  exit 1
}

function try {
  $@ || die "Failed to execute '$@'"
}

if [[ -z "${ROOTDIR}" ]]; then
  echo "Source build/setup.sh first"
  exit 1
fi
if [[ -z "$1" ]]; then
  cat << EOM
Usage: install-toolchain.sh target
Where target is gcc or llvm
EOM
  exit 1
fi

TARGET=${1:-gcc}
TOOLCHAIN_TARBALL=""
case "${TARGET}" in
  gcc)
    TOOLCHAIN_TARBALL="toolchain.tar.gz"
    ;;

  llvm)
    TOOLCHAIN_TARBALL="toolchain_iree_rv32.tar.gz"
    ;;

  *)
    echo "unsupported target: ${TARGET}"
    exit 1
    ;;
esac

trap clean EXIT

# Used by the CI shodan docker image
PREINSTALL_DIR=/usr/src

if [[ -f "${PREINSTALL_DIR}/${TOOLCHAIN_TARBALL}" ]]; then
  echo "${TOOLCHAIN_TARBALL} stored in the machine at ${PREINSTALL_DIR}"
  DOWNLOAD_DIR=/usr/src
else
  echo "Download ${TOOLCHAIN_TARBALL} from GCS..."
  DOWNLOAD_URL="https://storage.googleapis.com/shodan-public-artifacts/${TOOLCHAIN_TARBALL}"
  DOWNLOAD_DIR="${OUT}/tmp"
  mkdir -p "${DOWNLOAD_DIR}"

  wget --progress=dot:giga -P "${DOWNLOAD_DIR}" "${DOWNLOAD_URL}"
  wget -P "${DOWNLOAD_DIR}" "${DOWNLOAD_URL}.sha256sum"
  pushd "${DOWNLOAD_DIR}" > /dev/null
  try sha256sum -c "${TOOLCHAIN_TARBALL}.sha256sum"
  popd > /dev/null
fi

try tar -C "${CACHE}" -xf "${DOWNLOAD_DIR}/${TOOLCHAIN_TARBALL}"

# Prepare a newlib-nano directory for the default link of -lc, -lgloss, etc.
# TODO(hcindyl): Remove the duped symlink creation once we switched to a toolchain from CI.
if [[ "${TARGET}" == "llvm" ]]; then
  lib_dir="${CACHE}/toolchain_iree_rv32imf/riscv32-unknown-elf/lib/"
  try mkdir -p "${lib_dir}/newlib-nano"
  try ln -rsf "${lib_dir}/libc_nano.a" "${lib_dir}/newlib-nano/libc.a"
  try ln -rsf "${lib_dir}/libg_nano.a" "${lib_dir}/newlib-nano/libg.a"
  try ln -rsf "${lib_dir}/libm_nano.a" "${lib_dir}/newlib-nano/libm.a"
  try ln -rsf "${lib_dir}/libgloss_nano.a" "${lib_dir}/newlib-nano/libgloss.a"
fi
