#!/bin/bash

# Copyright 2020 The IREE Authors
#
# Licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

# This script will download and setup the riscv-linux required toolchain and tool.

set -e
set -o pipefail

PREBUILT_DIR="${HOME}/riscv"
IREE_ARTIFACT_URL="https://sharkpublic.blob.core.windows.net/sharkpublic/GCP-Migration-Files"

read -p "Enter the riscv tools root path(press enter to use default path:${PREBUILT_DIR}): " INPUT_PATH
if [[ "${INPUT_PATH}" ]]; then
  PREBUILT_DIR=${INPUT_PATH}
fi
echo "The riscv tool prefix path: ${PREBUILT_DIR}"

BOOTSTRAP_WORK_DIR="${PREBUILT_DIR}/.bootstrap"

if [[ "${OSTYPE}" == "linux-gnu" ]]; then
  RISCV_CLANG_TOOLCHAIN_FILE_NAME="toolchain_iree_manylinux_2_28_20231012.tar.gz"
  RISCV_CLANG_TOOLCHAIN_FILE_SHA="3af56a58551ed5ae7441214822461a5368fee9403d7c883762fa902489bfbff0"

  QEMU_FILE_NAME="qemu-riscv_8.1.2_manylinux_2.28_20231026.tar.gz"
  QEMU_FILE_SHA="dd77b39820d45b80bafab9155581578b4c625cb92fd6db9e9adbb9798fde3597"

  TOOLCHAIN_PATH_PREFIX=${PREBUILT_DIR}/toolchain/clang/linux/RISCV
  QEMU_PATH_PREFIX=${PREBUILT_DIR}/qemu/linux/RISCV
else
  echo "${OSTYPE} is not supported."
  exit 1
fi

function cleanup {
  if [[ -d "${BOOTSTRAP_WORK_DIR}" ]]; then
    rm -rf "${BOOTSTRAP_WORK_DIR}"
  fi
}

# Call the cleanup function when this tool exits.
trap cleanup EXIT

# Download and install the toolchain from IREE-OSS GCS
download_file() {
  local file_name="$1"
  local install_path="$2"
  local file_sha="$3"

  echo "Install $1 to $2"
  if [[ "$(ls -A $2)" ]]; then
    read -p "The file already exists. Keep it (y/n)? " replaced
    case ${replaced:0:1} in
      y|Y )
        echo "Skip download $1."
        return
      ;;
      * )
        rm -rf "$2"
      ;;
    esac
  fi

  echo "Download ${file_name} ..."
  mkdir -p $install_path
  wget --progress=bar:force:noscroll --directory-prefix="${BOOTSTRAP_WORK_DIR}" \
    "${IREE_ARTIFACT_URL}/${file_name}" && \
    echo "${file_sha} ${BOOTSTRAP_WORK_DIR}/${file_name}" | sha256sum -c -
  echo "Extract ${file_name} ..."
  tar -C "${install_path}" -xf "${BOOTSTRAP_WORK_DIR}/${file_name}" --no-same-owner \
    --strip-components=1
}

mkdir -p "${BOOTSTRAP_WORK_DIR}"

read -p "Install RISCV clang toolchain(y/n)? " answer
case ${answer:0:1} in
  y|Y )
    download_file "${RISCV_CLANG_TOOLCHAIN_FILE_NAME}" \
                  "${TOOLCHAIN_PATH_PREFIX}" \
                  "${RISCV_CLANG_TOOLCHAIN_FILE_SHA}"
  ;;
  * )
    echo "Skip RISCV clang toolchain."
  ;;
esac

read -p "Install RISCV qemu(y/n)? " answer
case ${answer:0:1} in
  y|Y )
    download_file "${QEMU_FILE_NAME}" \
                  "${QEMU_PATH_PREFIX}" \
                  "${QEMU_FILE_SHA}"
  ;;
  * )
    echo "Skip RISCV qemu."
  ;;
esac

echo "Bootstrap finished."
