blob: 85dd799122aa508578d6e1bda527fa4f5b3e4723 [file] [log] [blame]
#!/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
BOOTSTRAP_SCRIPT_PATH=$(dirname "$0")
BOOTSTRAP_WORK_DIR=${BOOTSTRAP_SCRIPT_PATH}/.bootstrap
PREBUILT_DIR=${HOME}/riscv
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}"
if [[ "${OSTYPE}" == "linux-gnu" ]]; then
RISCV_CLANG_TOOLCHAIN_FILE_ID=13q6sYVlae-hRrgj7SNlvbJFYI3Q8sCI4
RISCV_CLANG_TOOLCHAIN_FILE_NAME=rvv-llvm-toolchain.tar.bz2
QEMU_FILE_ID=1JkLana7CGeD2wfwn8shHQxcYrv3j1l9s
QEMU_FILE_NAME=riscv-qemu-v5.2.0-rvv-rvb-zfh-856da0e-linux-ubuntu.tar.gz
TOOLCHAIN_PATH_PREFIX=${PREBUILT_DIR}/toolchain/clang/linux/RISCV
QEMU_PATH_PREFIX=${PREBUILT_DIR}/qemu/linux/RISCV
elif [[ "${OSTYPE}" == "darwin"* ]]; then
RISCV_CLANG_TOOLCHAIN_FILE_ID=empty
RISCV_CLANG_TOOLCHAIN_FILE_NAME=empty
QEMU_FILE_ID=empty
QEMU_FILE_NAME=empty
TOOLCHAIN_PATH_PREFIX=${PREBUILT_DIR}/toolchain/clang/darwin/RISCV
QEMU_PATH_PREFIX=${PREBUILT_DIR}/qemu/darwin/RISCV
echo "We haven't had the darwin prebuilt binary yet. Skip this script."
exit 1
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
wget_google_drive() {
local file_id="$1"
local file_name="$2"
local install_path="$3"
local tar_option="$4"
wget --save-cookies ${BOOTSTRAP_WORK_DIR}/cookies.txt \
"https://docs.google.com/uc?export=download&id="$file_id -O- | \
sed -En "s/.*confirm=([0-9A-Za-z_]+).*/\1/p" > ${BOOTSTRAP_WORK_DIR}/confirm.txt
wget --progress=bar:force:noscroll --load-cookies ${BOOTSTRAP_WORK_DIR}/cookies.txt \
"https://docs.google.com/uc?export=download&id=$file_id&confirm=`cat ${BOOTSTRAP_WORK_DIR}/confirm.txt`" -O- | \
tar $tar_option - --no-same-owner --strip-components=1 -C $install_path
}
download_file() {
# server name or google drive file_id
local file_download_info="$1"
local file_name="$2"
local install_path="$3"
# download method(e.g. wget_google_drive)
local download_method="$4"
echo "Install $2 to $3"
if [[ -e $3/file_info.txt ]]; then
read -p "The file already exists. Keep it (y/n)? " replaced
case ${replaced:0:1} in
y|Y )
echo "Skip download $2."
return
;;
* )
rm -rf $3
;;
esac
fi
local tar_option=""
if [[ "${file_name##*.}" == "gz" ]]; then
tar_option="zxpf"
elif [[ "${file_name##*.}" == "bz2" ]]; then
tar_option="jxpf"
fi
echo "tar option: $tar_option"
echo "Download $file_name ..."
mkdir -p $install_path
$download_method $file_download_info $file_name $install_path $tar_option
echo "$file_download_info $file_name" > $install_path/file_info.txt
}
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_ID} \
${RISCV_CLANG_TOOLCHAIN_FILE_NAME} \
${TOOLCHAIN_PATH_PREFIX} \
wget_google_drive
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_ID \
${QEMU_FILE_NAME} \
${QEMU_PATH_PREFIX} \
wget_google_drive
;;
* )
echo "Skip RISCV qemu."
;;
esac
echo "Bootstrap finished."