From 88ff36852d5a6ecc8f78dc2899953fe5644026b9 Mon Sep 17 00:00:00 2001 From: Abraham Gonzalez Date: Mon, 29 Aug 2022 22:52:21 +0000 Subject: [PATCH] Build Spike/Pk/Tests/Libgloss from src --- .github/actions/create-conda-env/action.yml | 10 +- .gitmodules | 30 +++++ scripts/build-toolchain-extra.sh | 117 +++++++++++++++++++ scripts/conda-requirements.yaml | 1 - toolchains/esp-tools/esp-tools-feedstock | 1 + toolchains/esp-tools/riscv-isa-sim | 1 + toolchains/esp-tools/riscv-pk | 1 + toolchains/esp-tools/riscv-tests | 1 + toolchains/libgloss | 1 + toolchains/riscv-tools/riscv-isa-sim | 1 + toolchains/riscv-tools/riscv-openocd | 1 + toolchains/riscv-tools/riscv-pk | 1 + toolchains/riscv-tools/riscv-tests | 1 + toolchains/riscv-tools/riscv-tools-feedstock | 1 + 14 files changed, 166 insertions(+), 2 deletions(-) create mode 100755 scripts/build-toolchain-extra.sh create mode 160000 toolchains/esp-tools/esp-tools-feedstock create mode 160000 toolchains/esp-tools/riscv-isa-sim create mode 160000 toolchains/esp-tools/riscv-pk create mode 160000 toolchains/esp-tools/riscv-tests create mode 160000 toolchains/libgloss create mode 160000 toolchains/riscv-tools/riscv-isa-sim create mode 160000 toolchains/riscv-tools/riscv-openocd create mode 160000 toolchains/riscv-tools/riscv-pk create mode 160000 toolchains/riscv-tools/riscv-tests create mode 160000 toolchains/riscv-tools/riscv-tools-feedstock diff --git a/.github/actions/create-conda-env/action.yml b/.github/actions/create-conda-env/action.yml index 61bd0dd5..ba5b70cc 100644 --- a/.github/actions/create-conda-env/action.yml +++ b/.github/actions/create-conda-env/action.yml @@ -9,10 +9,18 @@ runs: if conda env list | grep -q "envs/${{ env.conda-env-name-no-time }}"; then echo "Using pre-existing conda environments with prefix ${{ env.conda-env-name-no-time }}" else - echo "Creating a conda environment for each toolchain" + echo "Creating a conda environment for each toolchain with the toolchain installed" conda env create -f ./scripts/conda-requirements.yaml -n ${{ env.conda-env-name-no-time }}-$(date --date "${{ env.workflow-timestamp }}" +%Y%m%d)-riscv-tools conda install -n ${{ env.conda-env-name-no-time }}-$(date --date "${{ env.workflow-timestamp }}" +%Y%m%d)-riscv-tools -c ucb-bar -y riscv-tools conda env create -f ./scripts/conda-requirements.yaml -n ${{ env.conda-env-name-no-time }}-$(date --date "${{ env.workflow-timestamp }}" +%Y%m%d)-esp-tools conda install -n ${{ env.conda-env-name-no-time }}-$(date --date "${{ env.workflow-timestamp }}" +%Y%m%d)-esp-tools -c ucb-bar -y esp-tools + + echo "Add source collateral to RISC-V area" + conda activate ${{ env.conda-env-name-no-time }}-$(date --date "${{ env.workflow-timestamp }}" +%Y%m%d)-riscv-tools + ./scripts/build-toolchain-extra.sh riscv-tools + conda deactivate + conda activate ${{ env.conda-env-name-no-time }}-$(date --date "${{ env.workflow-timestamp }}" +%Y%m%d)-esp-tools + ./scripts/build-toolchain-extra.sh esp-tools + conda deactivate fi shell: bash -leo pipefail {0} diff --git a/.gitmodules b/.gitmodules index 01aa80c0..a685a684 100644 --- a/.gitmodules +++ b/.gitmodules @@ -97,3 +97,33 @@ [submodule "generators/fft-generator"] path = generators/fft-generator url = https://github.com/ucb-bar/FFTGenerator.git +[submodule "toolchains/riscv-tools/riscv-tests"] + path = toolchains/riscv-tools/riscv-tests + url = https://github.com/riscv-software-src/riscv-tests.git +[submodule "toolchains/riscv-tools/riscv-pk"] + path = toolchains/riscv-tools/riscv-pk + url = https://github.com/riscv-software-src/riscv-pk.git +[submodule "toolchains/riscv-tools/riscv-openocd"] + path = toolchains/riscv-tools/riscv-openocd + url = https://github.com/riscv/riscv-openocd.git +[submodule "toolchains/riscv-tools/riscv-isa-sim"] + path = toolchains/riscv-tools/riscv-isa-sim + url = https://github.com/riscv-software-src/riscv-isa-sim.git +[submodule "toolchains/riscv-tools/riscv-tools-feedstock"] + path = toolchains/riscv-tools/riscv-tools-feedstock + url = https://github.com/ucb-bar/riscv-tools-feedstock.git +[submodule "toolchains/esp-tools/esp-tools-feedstock"] + path = toolchains/esp-tools/esp-tools-feedstock + url = https://github.com/ucb-bar/esp-tools-feedstock.git +[submodule "toolchains/esp-tools/riscv-isa-sim"] + path = toolchains/esp-tools/riscv-isa-sim + url = https://github.com/ucb-bar/esp-isa-sim.git +[submodule "toolchains/esp-tools/riscv-pk"] + path = toolchains/esp-tools/riscv-pk + url = https://github.com/riscv-software-src/riscv-pk.git +[submodule "toolchains/esp-tools/riscv-tests"] + path = toolchains/esp-tools/riscv-tests + url = https://github.com/ucb-bar/esp-tests.git +[submodule "toolchains/libgloss"] + path = toolchains/libgloss + url = https://github.com/ucb-bar/libgloss-htif.git diff --git a/scripts/build-toolchain-extra.sh b/scripts/build-toolchain-extra.sh new file mode 100755 index 00000000..c347d4ac --- /dev/null +++ b/scripts/build-toolchain-extra.sh @@ -0,0 +1,117 @@ +#!/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 + +# On macOS, use GNU readlink from 'coreutils' package in Homebrew/MacPorts +if [ "$(uname -s)" = "Darwin" ] ; then + READLINK=greadlink +else + READLINK=readlink +fi + +# If BASH_SOURCE is undefined, we may be running under zsh, in that case +# provide a zsh-compatible alternative +DIR="$(dirname "$($READLINK -f "${BASH_SOURCE[0]:-${(%):-%x}}")")" +CHIPYARD_DIR="$(dirname "$DIR")" + +# Allow user to override MAKE +[ -n "${MAKE:+x}" ] || MAKE=$(command -v gnumake || command -v gmake || command -v make) +readonly MAKE + +usage() { + echo "usage: ${0} [OPTIONS] [riscv-tools | esp-tools]" + echo "" + echo "Installation Types" + echo " riscv-tools: if set, builds the riscv toolchain (this is also the default)" + echo " esp-tools: if set, builds esp-tools toolchain used for the hwacha vector accelerator" + echo "" + echo "Options" + echo " --prefix PREFIX : Install destination. If unset, defaults to $CONDA_PREFIX/riscv-tools" + echo " or $CONDA_PREFIX/esp-tools" + echo " --clean-after-install : Run make clean in calls to module_make and module_build" + echo " --help -h : Display this message" + exit "$1" +} + +error() { + echo "${0##*/}: ${1}" >&2 +} +die() { + error "$1" + exit "${2:--1}" +} + +TOOLCHAIN="riscv-tools" +CLEANAFTERINSTALL="" +RISCV="" + +# getopts does not support long options, and is inflexible +while [ "$1" != "" ]; +do + case $1 in + -h | --help | help ) + usage 3 ;; + -p | --prefix ) + shift + RISCV=$(realpath $1) ;; + --clean-after-install ) + CLEANAFTERINSTALL="true" ;; + riscv-tools | esp-tools) + TOOLCHAIN=$1 ;; + * ) + error "invalid option $1" + usage 1 ;; + esac + shift +done + +if [ -z ${CONDA_DEFAULT_ENV+x} ]; then + error "ERROR: No conda environment detected. Did you activate the conda environment (e.x. 'conda activate chipyard')?" + exit 1 +fi + +if [ -z "$RISCV" ] ; then + RISCV="$CONDA_PREFIX/$TOOLCHAIN" +fi + +XLEN=64 + +echo "Installing extra toolchain utilities/tests to $RISCV" + +# install risc-v tools +export RISCV="$RISCV" + +cd "${CHIPYARD_DIR}" + +SRCDIR="$(pwd)/toolchains/${TOOLCHAIN}" +[ -d "${SRCDIR}" ] || die "unsupported toolchain: ${TOOLCHAIN}" +. ./scripts/build-util.sh + +echo '==> Installing Spike' +# disable boost explicitly for https://github.com/riscv-software-src/riscv-isa-sim/issues/834 +# since we don't have it in our requirements +module_all riscv-isa-sim --prefix="${RISCV}" --with-boost=no --with-boost-asio=no --with-boost-regex=no +# build static libfesvr library for linking into firesim driver (or others) +echo '==> Installing libfesvr static library' +OLDCLEANAFTERINSTALL=$CLEANAFTERINSTALL +CLEANAFTERINSTALL="" +module_make riscv-isa-sim libfesvr.a +cp -p "${SRCDIR}/riscv-isa-sim/build/libfesvr.a" "${RISCV}/lib/" +CLEANAFTERINSTALL=$OLDCLEANAFTERINSTALL + +echo '==> Installing Proxy Kernel' +CC= CXX= module_all riscv-pk --prefix="${RISCV}" --host=riscv${XLEN}-unknown-elf + +echo '==> Installing RISC-V tests' +module_all riscv-tests --prefix="${RISCV}/riscv${XLEN}-unknown-elf" --with-xlen=${XLEN} + +# Common tools (not in any particular toolchain dir) + +echo '==> Installing libgloss' +CC= CXX= SRCDIR="$(pwd)/toolchains" module_all libgloss --prefix="${RISCV}/riscv${XLEN}-unknown-elf" --host=riscv${XLEN}-unknown-elf + +echo "Extra Toolchain Utilities/Tests Build Complete!" diff --git a/scripts/conda-requirements.yaml b/scripts/conda-requirements.yaml index 31220e4c..bbcf3de5 100644 --- a/scripts/conda-requirements.yaml +++ b/scripts/conda-requirements.yaml @@ -1,4 +1,3 @@ -name: chipyard channels: - ucb-bar - conda-forge diff --git a/toolchains/esp-tools/esp-tools-feedstock b/toolchains/esp-tools/esp-tools-feedstock new file mode 160000 index 00000000..f82a43bc --- /dev/null +++ b/toolchains/esp-tools/esp-tools-feedstock @@ -0,0 +1 @@ +Subproject commit f82a43bc6218db3402ce91261b28b2f84312b782 diff --git a/toolchains/esp-tools/riscv-isa-sim b/toolchains/esp-tools/riscv-isa-sim new file mode 160000 index 00000000..34741e07 --- /dev/null +++ b/toolchains/esp-tools/riscv-isa-sim @@ -0,0 +1 @@ +Subproject commit 34741e07bc6b56f1762ce579537948d58e28cd5a diff --git a/toolchains/esp-tools/riscv-pk b/toolchains/esp-tools/riscv-pk new file mode 160000 index 00000000..e8e6b3aa --- /dev/null +++ b/toolchains/esp-tools/riscv-pk @@ -0,0 +1 @@ +Subproject commit e8e6b3aaee44d43b48164fbd377864c3a682dbd3 diff --git a/toolchains/esp-tools/riscv-tests b/toolchains/esp-tools/riscv-tests new file mode 160000 index 00000000..7c3dfd32 --- /dev/null +++ b/toolchains/esp-tools/riscv-tests @@ -0,0 +1 @@ +Subproject commit 7c3dfd3205fa90104db06346e797a8eeea149207 diff --git a/toolchains/libgloss b/toolchains/libgloss new file mode 160000 index 00000000..04b24976 --- /dev/null +++ b/toolchains/libgloss @@ -0,0 +1 @@ +Subproject commit 04b249764b1bc0b784b9f7ff422084f4b53a07ef diff --git a/toolchains/riscv-tools/riscv-isa-sim b/toolchains/riscv-tools/riscv-isa-sim new file mode 160000 index 00000000..ce42f1b5 --- /dev/null +++ b/toolchains/riscv-tools/riscv-isa-sim @@ -0,0 +1 @@ +Subproject commit ce42f1b55a3fa5a3a522439b5370be2256f68862 diff --git a/toolchains/riscv-tools/riscv-openocd b/toolchains/riscv-tools/riscv-openocd new file mode 160000 index 00000000..cbb15587 --- /dev/null +++ b/toolchains/riscv-tools/riscv-openocd @@ -0,0 +1 @@ +Subproject commit cbb15587dc782ac8ade7ae252e7b760cfba4a178 diff --git a/toolchains/riscv-tools/riscv-pk b/toolchains/riscv-tools/riscv-pk new file mode 160000 index 00000000..e8e6b3aa --- /dev/null +++ b/toolchains/riscv-tools/riscv-pk @@ -0,0 +1 @@ +Subproject commit e8e6b3aaee44d43b48164fbd377864c3a682dbd3 diff --git a/toolchains/riscv-tools/riscv-tests b/toolchains/riscv-tools/riscv-tests new file mode 160000 index 00000000..1ce128fa --- /dev/null +++ b/toolchains/riscv-tools/riscv-tests @@ -0,0 +1 @@ +Subproject commit 1ce128fa78c24bb0ed399c647e7139322b5353a7 diff --git a/toolchains/riscv-tools/riscv-tools-feedstock b/toolchains/riscv-tools/riscv-tools-feedstock new file mode 160000 index 00000000..dcddb84a --- /dev/null +++ b/toolchains/riscv-tools/riscv-tools-feedstock @@ -0,0 +1 @@ +Subproject commit dcddb84a6d27bbff0ed22ab1fb3c38d64e80c4bd