#!/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://storage.googleapis.com/iree-shared-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 "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo " PLEASE run 'export RISCV_TOOLCHAIN_ROOT=${TOOLCHAIN_PATH_PREFIX}' " echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" ;; * ) 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."