This allows individual components to be better maintained following the deprecation of riscv-tools. Eliminate non-essential submodules. build-static-libfesvr.sh is no longer necessary since libfesvr.a is built as part of the riscv-isa-sim build. For simplicity, only riscv-gnu-toolchain is now pre-built instead of the entirety of riscv-tools.
126 lines
3.4 KiB
Bash
Executable File
126 lines
3.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
#this script is based on the firesim build toolchains script
|
|
|
|
# exit script if any command fails
|
|
set -e
|
|
set -o pipefail
|
|
|
|
RDIR=$(pwd)
|
|
CHIPYARD_DIR="${CHIPYARD_DIR:-$(git rev-parse --show-toplevel)}"
|
|
|
|
usage() {
|
|
echo "usage: ${0} [riscv-tools | esp-tools | ec2fast]"
|
|
echo " riscv: if set, builds the riscv toolchain (this is also the default)"
|
|
echo " hwacha: if set, builds esp-tools toolchain"
|
|
echo " ec2fast: if set, pulls in a pre-compiled RISC-V toolchain for an EC2 manager instance"
|
|
exit "$1"
|
|
}
|
|
|
|
error() {
|
|
echo "${0##*/}: ${1}" >&2
|
|
}
|
|
die() {
|
|
error "$1"
|
|
exit "${2:--1}"
|
|
}
|
|
|
|
TOOLCHAIN="riscv-tools"
|
|
EC2FASTINSTALL="false"
|
|
|
|
while getopts 'hH-:' opt ; do
|
|
case $opt in
|
|
h|H)
|
|
usage 3 ;;
|
|
-)
|
|
case $OPTARG in
|
|
help)
|
|
usage 3 ;;
|
|
ec2fast) # Preserve compatibility
|
|
EC2FASTINSTALL=true ;;
|
|
*)
|
|
error "invalid option: --${OPTARG}"
|
|
usage 1 ;;
|
|
esac ;;
|
|
*)
|
|
error "invalid option: -${opt}"
|
|
usage 1 ;;
|
|
esac
|
|
done
|
|
|
|
shift $((OPTIND - 1))
|
|
|
|
if [ "$1" = ec2fast ] ; then
|
|
EC2FASTINSTALL=true
|
|
elif [ -n "$1" ] ; then
|
|
TOOLCHAIN="$1"
|
|
fi
|
|
|
|
INSTALL_DIR="$TOOLCHAIN-install"
|
|
|
|
RISCV="$(pwd)/$INSTALL_DIR"
|
|
|
|
# install risc-v tools
|
|
export RISCV="$RISCV"
|
|
|
|
cd "${CHIPYARD_DIR}"
|
|
|
|
SRCDIR="$(pwd)/toolchains/${TOOLCHAIN}"
|
|
[ -d "${SRCDIR}" ] || die "unsupported toolchain: ${TOOLCHAIN}"
|
|
. ./scripts/build-util.sh
|
|
|
|
|
|
if [ "${EC2FASTINSTALL}" = true ] ; then
|
|
[ "${TOOLCHAIN}" = 'riscv-tools' ] ||
|
|
die "unsupported precompiled toolchain: ${TOOLCHAIN}"
|
|
|
|
echo '=> Fetching pre-built toolchain'
|
|
module=toolchains/riscv-tools/riscv-gnu-toolchain-prebuilt
|
|
git config --unset submodule."${module}".update || :
|
|
git submodule update --init --depth 1 "${module}"
|
|
|
|
echo '==> Verifying toolchain version hash'
|
|
# Find commit hash without initializing the submodule
|
|
hashsrc="$(git ls-tree -d HEAD "${SRCDIR}/riscv-gnu-toolchain" | {
|
|
unset IFS && read -r _ type obj _ &&
|
|
test -n "${obj}" && test "${type}" = 'commit' && echo "${obj}"
|
|
}; )" ||
|
|
die 'failed to obtain riscv-gnu-toolchain submodule hash' "$?"
|
|
|
|
read -r hashbin < "${module}/HASH" ||
|
|
die 'failed to obtain riscv-gnu-toolchain-prebuilt hash' "$?"
|
|
|
|
echo "==> ${hashsrc}"
|
|
[ "${hashsrc}" = "${hashbin}" ] ||
|
|
die "pre-built version mismatch: ${hashbin}"
|
|
|
|
echo '==> Installing pre-built toolchain'
|
|
"${MAKE}" -C "${module}" DESTDIR="${RISCV}" install
|
|
git submodule deinit "${module}" || :
|
|
|
|
else
|
|
module_prepare riscv-gnu-toolchain qemu
|
|
module_build riscv-gnu-toolchain --prefix="${RISCV}"
|
|
echo '==> Building GNU/Linux toolchain'
|
|
module_make riscv-gnu-toolchain linux
|
|
fi
|
|
|
|
module_all riscv-isa-sim --prefix="${RISCV}"
|
|
# build static libfesvr library for linking into firesim driver (or others)
|
|
echo '==> Installing libfesvr static library'
|
|
module_make riscv-isa-sim libfesvr.a
|
|
cp -p "${SRCDIR}/riscv-isa-sim/build/libfesvr.a" "${RISCV}/lib/"
|
|
|
|
CC= CXX= module_all riscv-pk --prefix="${RISCV}" --host=riscv64-unknown-elf
|
|
module_all riscv-tests --prefix="${RISCV}/riscv64-unknown-elf"
|
|
|
|
cd "$RDIR"
|
|
|
|
{
|
|
echo "export CHIPYARD_TOOLCHAIN_SOURCED=1"
|
|
echo "export RISCV=$(printf '%q' "$RISCV")"
|
|
echo "export PATH=\${RISCV}/bin:\${PATH}"
|
|
echo "export LD_LIBRARY_PATH=\${RISCV}/lib\${LD_LIBRARY_PATH:+":\${LD_LIBRARY_PATH}"}"
|
|
} > env.sh
|
|
echo "Toolchain Build Complete!"
|