diff --git a/.circleci/build-toolchains.sh b/.circleci/build-toolchains.sh index 63f47505..b43d2eda 100755 --- a/.circleci/build-toolchains.sh +++ b/.circleci/build-toolchains.sh @@ -14,5 +14,5 @@ if [ ! -d "$HOME/$1-install" ]; then cd $HOME # init all submodules including the tools - CHIPYARD_DIR=$LOCAL_CHIPYARD_DIR $LOCAL_CHIPYARD_DIR/scripts/build-toolchains.sh $1 + CHIPYARD_DIR="$LOCAL_CHIPYARD_DIR" NPROC=2 $LOCAL_CHIPYARD_DIR/scripts/build-toolchains.sh $1 fi diff --git a/.circleci/config.yml b/.circleci/config.yml index 88ec3e45..d0453176 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -7,7 +7,7 @@ version: 2 jobs: commit-on-master-check: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -19,7 +19,7 @@ jobs: .circleci/check-commit.sh install-riscv-toolchain: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -31,19 +31,19 @@ jobs: .circleci/create-hash.sh - restore_cache: keys: - - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} + - riscv-tools-installed-v2-{{ checksum "../riscv-tools.hash" }} - run: name: Building riscv-tools toolchain command: | .circleci/build-toolchains.sh riscv-tools no_output_timeout: 120m - save_cache: - key: riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} + key: riscv-tools-installed-v2-{{ checksum "../riscv-tools.hash" }} paths: - "/home/riscvuser/riscv-tools-install" install-esp-toolchain: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -55,19 +55,19 @@ jobs: .circleci/create-hash.sh - restore_cache: keys: - - esp-tools-installed-v1-{{ checksum "../esp-tools.hash" }} + - esp-tools-installed-v2-{{ checksum "../esp-tools.hash" }} - run: name: Building esp-tools toolchain command: | .circleci/build-toolchains.sh esp-tools no_output_timeout: 120m - save_cache: - key: esp-tools-installed-v1-{{ checksum "../esp-tools.hash" }} + key: esp-tools-installed-v2-{{ checksum "../esp-tools.hash" }} paths: - "/home/riscvuser/esp-tools-install" install-verilator: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -90,7 +90,7 @@ jobs: - "/home/riscvuser/verilator" build-extra-tests: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -105,7 +105,7 @@ jobs: .circleci/create-hash.sh - restore_cache: keys: - - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} + - riscv-tools-installed-v2-{{ checksum "../riscv-tools.hash" }} - run: name: Build extra tests command: .circleci/build-extra-tests.sh @@ -116,7 +116,7 @@ jobs: - "/home/riscvuser/project/tests" prepare-example: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -131,7 +131,7 @@ jobs: .circleci/create-hash.sh - restore_cache: keys: - - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} + - riscv-tools-installed-v2-{{ checksum "../riscv-tools.hash" }} - restore_cache: keys: - verilator-installed-v3-{{ checksum "sims/verilator/verilator.mk" }} @@ -145,7 +145,7 @@ jobs: - "/home/riscvuser/project" prepare-boomrocketexample: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -160,7 +160,7 @@ jobs: .circleci/create-hash.sh - restore_cache: keys: - - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} + - riscv-tools-installed-v2-{{ checksum "../riscv-tools.hash" }} - restore_cache: keys: - verilator-installed-v3-{{ checksum "sims/verilator/verilator.mk" }} @@ -174,7 +174,7 @@ jobs: - "/home/riscvuser/project" prepare-boom: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -189,7 +189,7 @@ jobs: .circleci/create-hash.sh - restore_cache: keys: - - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} + - riscv-tools-installed-v2-{{ checksum "../riscv-tools.hash" }} - restore_cache: keys: - verilator-installed-v3-{{ checksum "sims/verilator/verilator.mk" }} @@ -203,7 +203,7 @@ jobs: - "/home/riscvuser/project" prepare-rocketchip: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -218,7 +218,7 @@ jobs: .circleci/create-hash.sh - restore_cache: keys: - - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} + - riscv-tools-installed-v2-{{ checksum "../riscv-tools.hash" }} - restore_cache: keys: - verilator-installed-v3-{{ checksum "sims/verilator/verilator.mk" }} @@ -232,7 +232,7 @@ jobs: - "/home/riscvuser/project" prepare-blockdevrocketchip: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -247,7 +247,7 @@ jobs: .circleci/create-hash.sh - restore_cache: keys: - - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} + - riscv-tools-installed-v2-{{ checksum "../riscv-tools.hash" }} - restore_cache: keys: - verilator-installed-v3-{{ checksum "sims/verilator/verilator.mk" }} @@ -261,7 +261,7 @@ jobs: - "/home/riscvuser/project" prepare-hwacha: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -276,7 +276,7 @@ jobs: .circleci/create-hash.sh - restore_cache: keys: - - esp-tools-installed-v1-{{ checksum "../esp-tools.hash" }} + - esp-tools-installed-v2-{{ checksum "../esp-tools.hash" }} - restore_cache: keys: - verilator-installed-v3-{{ checksum "sims/verilator/verilator.mk" }} @@ -290,7 +290,7 @@ jobs: - "/home/riscvuser/project" prepare-firesim: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -305,7 +305,7 @@ jobs: .circleci/create-hash.sh - restore_cache: keys: - - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} + - riscv-tools-installed-v2-{{ checksum "../riscv-tools.hash" }} - restore_cache: keys: - verilator-installed-v3-{{ checksum "sims/verilator/verilator.mk" }} @@ -319,7 +319,7 @@ jobs: - "/home/riscvuser/project" prepare-fireboom: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -334,7 +334,7 @@ jobs: .circleci/create-hash.sh - restore_cache: keys: - - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} + - riscv-tools-installed-v2-{{ checksum "../riscv-tools.hash" }} - restore_cache: keys: - verilator-installed-v3-{{ checksum "sims/verilator/verilator.mk" }} @@ -348,7 +348,7 @@ jobs: - "/home/riscvuser/project" prepare-firesim-clockdiv: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -363,7 +363,7 @@ jobs: .circleci/create-hash.sh - restore_cache: keys: - - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} + - riscv-tools-installed-v2-{{ checksum "../riscv-tools.hash" }} - restore_cache: keys: - verilator-installed-v3-{{ checksum "sims/verilator/verilator.mk" }} @@ -377,7 +377,7 @@ jobs: - "/home/riscvuser/project" midasexamples-run-tests: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -389,7 +389,7 @@ jobs: .circleci/create-hash.sh - restore_cache: keys: - - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} + - riscv-tools-installed-v2-{{ checksum "../riscv-tools.hash" }} - restore_cache: keys: - verilator-installed-v3-{{ checksum "sims/verilator/verilator.mk" }} @@ -398,7 +398,7 @@ jobs: command: .circleci/run-midasexamples-tests.sh example-run-tests: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -410,7 +410,7 @@ jobs: .circleci/create-hash.sh - restore_cache: keys: - - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} + - riscv-tools-installed-v2-{{ checksum "../riscv-tools.hash" }} - restore_cache: keys: - example-{{ .Branch }}-{{ .Revision }} @@ -422,7 +422,7 @@ jobs: command: .circleci/run-tests.sh example boomrocketexample-run-tests: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -434,7 +434,7 @@ jobs: .circleci/create-hash.sh - restore_cache: keys: - - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} + - riscv-tools-installed-v2-{{ checksum "../riscv-tools.hash" }} - restore_cache: keys: - boomrocketexample-{{ .Branch }}-{{ .Revision }} @@ -446,7 +446,7 @@ jobs: command: .circleci/run-tests.sh boomrocketexample boom-run-tests: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -458,7 +458,7 @@ jobs: .circleci/create-hash.sh - restore_cache: keys: - - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} + - riscv-tools-installed-v2-{{ checksum "../riscv-tools.hash" }} - restore_cache: keys: - boom-{{ .Branch }}-{{ .Revision }} @@ -470,7 +470,7 @@ jobs: command: .circleci/run-tests.sh boom rocketchip-run-tests: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -482,7 +482,7 @@ jobs: .circleci/create-hash.sh - restore_cache: keys: - - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} + - riscv-tools-installed-v2-{{ checksum "../riscv-tools.hash" }} - restore_cache: keys: - rocketchip-{{ .Branch }}-{{ .Revision }} @@ -494,7 +494,7 @@ jobs: command: .circleci/run-tests.sh rocketchip hwacha-run-tests: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -506,7 +506,7 @@ jobs: .circleci/create-hash.sh - restore_cache: keys: - - esp-tools-installed-v1-{{ checksum "../esp-tools.hash" }} + - esp-tools-installed-v2-{{ checksum "../esp-tools.hash" }} - restore_cache: keys: - hwacha-{{ .Branch }}-{{ .Revision }} @@ -518,7 +518,7 @@ jobs: command: .circleci/run-tests.sh hwacha firesim-run-tests: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -530,7 +530,7 @@ jobs: .circleci/create-hash.sh - restore_cache: keys: - - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} + - riscv-tools-installed-v2-{{ checksum "../riscv-tools.hash" }} - restore_cache: keys: - firesim-{{ .Branch }}-{{ .Revision }} @@ -545,7 +545,7 @@ jobs: command: .circleci/run-firesim-tests.sh firesim fireboom-run-tests: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -557,7 +557,7 @@ jobs: .circleci/create-hash.sh - restore_cache: keys: - - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} + - riscv-tools-installed-v2-{{ checksum "../riscv-tools.hash" }} - restore_cache: keys: - fireboom-{{ .Branch }}-{{ .Revision }} @@ -573,7 +573,7 @@ jobs: no_output_timeout: 20m firesim-clockdiv-run-tests: docker: - - image: riscvboom/riscvboom-images:0.0.10 + - image: riscvboom/riscvboom-images:0.0.11 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb @@ -585,7 +585,7 @@ jobs: .circleci/create-hash.sh - restore_cache: keys: - - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} + - riscv-tools-installed-v2-{{ checksum "../riscv-tools.hash" }} - restore_cache: keys: - firesim-clockdiv-{{ .Branch }}-{{ .Revision }} diff --git a/.circleci/create-hash.sh b/.circleci/create-hash.sh index 84a75244..63dfa242 100755 --- a/.circleci/create-hash.sh +++ b/.circleci/create-hash.sh @@ -4,6 +4,7 @@ # turn echo on and error on earliest command set -ex +set -o pipefail # get shared variables SCRIPT_DIR="$( cd "$( dirname "$0" )" && pwd )" @@ -12,10 +13,10 @@ source $SCRIPT_DIR/defaults.sh # enter bhd repo cd $LOCAL_CHIPYARD_DIR -# get the version of riscv-tools from the git submodule hash -git submodule status | grep "riscv-tools" | awk '{print$1}' | grep -o "[[:alnum:]]*" >> $HOME/riscv-tools.hash -git submodule status | grep "esp-tools" | awk '{print$1}' | grep -o "[[:alnum:]]*" >> $HOME/esp-tools.hash - +# Use normalized output of git-submodule status as hashfile +for tools in 'riscv-tools' 'esp-tools' ; do + git submodule status "toolchains/${tools}" | while read -r line ; do + echo "${line#[!0-9a-f]}" + done > "${HOME}/${tools}.hash" +done echo "Hashfile for riscv-tools and esp-tools created in $HOME" -echo "Contents: riscv-tools:$(cat $HOME/riscv-tools.hash)" -echo "Contents: esp-tools:$(cat $HOME/esp-tools.hash)" diff --git a/.gitignore b/.gitignore index fe0f53ff..7c1463a4 100644 --- a/.gitignore +++ b/.gitignore @@ -12,5 +12,6 @@ target .DS_Store env.sh riscv-tools-install +esp-tools-install tags *~ diff --git a/.gitmodules b/.gitmodules index 35addf76..4c23765e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -34,12 +34,37 @@ [submodule "generators/block-inclusivecache-sifive"] path = generators/sifive-cache url = https://github.com/sifive/block-inclusivecache-sifive.git -[submodule "toolchains/riscv-tools"] - path = toolchains/riscv-tools - url = https://github.com/freechipsproject/rocket-tools.git -[submodule "toolchains/esp-tools"] - path = toolchains/esp-tools - url = https://github.com/ucb-bar/esp-tools.git +[submodule "toolchains/riscv-tools/riscv-gnu-toolchain"] + path = toolchains/riscv-tools/riscv-gnu-toolchain + url = https://github.com/riscv/riscv-gnu-toolchain.git +[submodule "toolchains/riscv-tools/riscv-gnu-toolchain-prebuilt"] + path = toolchains/riscv-tools/riscv-gnu-toolchain-prebuilt + url = https://github.com/ucb-bar/chipyard-toolchain-prebuilt.git + shallow = true +[submodule "toolchains/riscv-tools/riscv-isa-sim"] + path = toolchains/riscv-tools/riscv-isa-sim + url = https://github.com/riscv/riscv-isa-sim.git +[submodule "toolchains/riscv-tools/riscv-pk"] + path = toolchains/riscv-tools/riscv-pk + url = https://github.com/riscv/riscv-pk.git +[submodule "toolchains/riscv-tools/riscv-tests"] + path = toolchains/riscv-tools/riscv-tests + url = https://github.com/riscv/riscv-tests.git +[submodule "toolchains/riscv-tools/riscv-openocd"] + path = toolchains/riscv-tools/riscv-openocd + url = https://github.com/riscv/riscv-openocd.git +[submodule "toolchains/esp-tools/riscv-gnu-toolchain"] + path = toolchains/esp-tools/riscv-gnu-toolchain + url = https://github.com/ucb-bar/esp-gnu-toolchain.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/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 "vlsi/hammer"] path = vlsi/hammer url = https://github.com/ucb-bar/hammer.git diff --git a/scripts/build-openocd.sh b/scripts/build-openocd.sh new file mode 100755 index 00000000..0075fdbe --- /dev/null +++ b/scripts/build-openocd.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +# exit script if any command fails +set -e +set -o pipefail + +RDIR=$(git rev-parse --show-toplevel) + +if [ -z "${RISCV}" ] ; then + ! [ -r "${RDIR}/env.sh" ] || . "${RDIR}/env.sh" + if [ -z "${RISCV}" ] ; then + echo "${0}: set the RISCV environment variable to desired install path" + exit 1 + fi +fi + +SRCDIR="${RDIR}/toolchains/riscv-tools" +. "${RDIR}/scripts/build-util.sh" + +git config --unset submodule.toolchains/riscv-tools/riscv-openocd.update || : +module_prepare riscv-openocd +module_run riscv-openocd ./bootstrap +module_build riscv-openocd --prefix="${RISCV}" \ + --enable-remote-bitbang --enable-jtag_vpi --disable-werror diff --git a/scripts/build-static-libfesvr.sh b/scripts/build-static-libfesvr.sh deleted file mode 100755 index d5b7f896..00000000 --- a/scripts/build-static-libfesvr.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash - -# This ungodly script surreptitiously builds an archive from existing fesvr objects -# Invoke from riscv-fesvr/build - -if [ "x$RISCV" = "x" ] -then - echo "Please set the RISCV environment variable to your preferred install path." - exit 1 -fi - -set -e - -objs=$(make -n -f <( - echo 'include Makefile' - echo '$(info $(value fesvr_objs))' - ) | head -n 1) - -ar rcs -o libfesvr.a $objs -cp -f libfesvr.a "${RISCV}/lib" - diff --git a/scripts/build-toolchains.sh b/scripts/build-toolchains.sh index 76680f79..738b5ae7 100755 --- a/scripts/build-toolchains.sh +++ b/scripts/build-toolchains.sh @@ -6,11 +6,8 @@ set -e set -o pipefail -unamestr=$(uname) RDIR=$(pwd) -: ${CHIPYARD_DIR:=$(pwd)} #default value is the PWD unless overridden - -PRECOMPILED_REPO_HASH=56a40961c98db5e8f904f15dc6efd0870bfefd9e +CHIPYARD_DIR="${CHIPYARD_DIR:-$(git rev-parse --show-toplevel)}" usage() { echo "usage: ${0} [riscv-tools | esp-tools | ec2fast]" @@ -23,18 +20,13 @@ usage() { error() { echo "${0##*/}: ${1}" >&2 } - -#taken from riscv-tools to check for open-ocd autoconf versions -check_version() { - "$1" --version | awk "NR==1 {if (\$NF>$2) {exit 0} exit 1}" || { - error "${3} requires at least ${1} version ${2}" - exit 1 - } +die() { + error "$1" + exit "${2:--1}" } TOOLCHAIN="riscv-tools" EC2FASTINSTALL="false" -FASTINSTALL="false" while getopts 'hH-:' opt ; do case $opt in @@ -64,33 +56,6 @@ elif [ -n "$1" ] ; then TOOLCHAIN="$1" fi - -if [ "$EC2FASTINSTALL" = "true" ]; then - if [ "$TOOLCHAIN" = "riscv-tools" ]; then - cd "$RDIR" - git clone https://github.com/firesim/firesim-riscv-tools-prebuilt.git - cd firesim-riscv-tools-prebuilt - git checkout "$PRECOMPILED_REPO_HASH" - PREBUILTHASH="$(cat HASH)" - git -C "${CHIPYARD_DIR}" submodule update --init "toolchains/${TOOLCHAIN}" - cd "$CHIPYARD_DIR/toolchains/$TOOLCHAIN" - GITHASH="$(git rev-parse HEAD)" - cd "$RDIR" - echo "prebuilt hash: $PREBUILTHASH" - echo "git hash: $GITHASH" - if [[ $PREBUILTHASH == $GITHASH && "$EC2FASTINSTALL" == "true" ]]; then - FASTINSTALL=true - echo "Using fast pre-compiled install for riscv-tools" - else - error 'error: hash of precompiled toolchain does not match the riscv-tools submodule hash' - exit -1 - fi - else - error "error: unsupported precompiled toolchain: ${TOOLCHAIN}" - exit -1 - fi -fi - INSTALL_DIR="$TOOLCHAIN-install" RISCV="$(pwd)/$INSTALL_DIR" @@ -98,52 +63,64 @@ RISCV="$(pwd)/$INSTALL_DIR" # install risc-v tools export RISCV="$RISCV" -if [ "$FASTINSTALL" = true ]; then - cd firesim-riscv-tools-prebuilt - ./installrelease.sh - mv distrib "$RISCV" - # copy HASH in case user wants it later - cp HASH "$RISCV" - cd "$RDIR" - rm -rf firesim-riscv-tools-prebuilt +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 - mkdir -p "$RISCV" - git -C "${CHIPYARD_DIR}" submodule update --init --recursive "toolchains/${TOOLCHAIN}" #--jobs 8 - cd "$CHIPYARD_DIR/toolchains/$TOOLCHAIN" - - # Scale number of parallel make jobs by hardware thread count - ncpu="$(getconf _NPROCESSORS_ONLN || # GNU - getconf NPROCESSORS_ONLN || # *BSD, Solaris - nproc --all || # Linux - sysctl -n hw.ncpu || # *BSD, OS X - :)" 2>/dev/null - case ${ncpu} in - ''|*[^0-9]*) ;; # Ignore non-integer values - *) export MAKEFLAGS="-j ${ncpu}" ;; - esac - - #build the actual toolchain - #./build.sh - source build.common - echo "Starting RISC-V Toolchain build process" - build_project riscv-fesvr --prefix="${RISCV}" - build_project riscv-isa-sim --prefix="${RISCV}" --with-fesvr="${RISCV}" - build_project riscv-gnu-toolchain --prefix="${RISCV}" - CC= CXX= build_project riscv-pk --prefix="${RISCV}" --host=riscv64-unknown-elf - build_project riscv-tests --prefix="${RISCV}/riscv64-unknown-elf" - echo -e "\\nRISC-V Toolchain installation completed!" - - # build static libfesvr library for linking into firesim driver (or others) - cd riscv-fesvr/build - "${CHIPYARD_DIR}/scripts/build-static-libfesvr.sh" - cd "$RDIR" - # build linux toolchain - cd "$CHIPYARD_DIR/toolchains/$TOOLCHAIN/riscv-gnu-toolchain/build" - make linux - echo -e "\\nRISC-V Linux GNU Toolchain installation completed!" + "${MAKE}" --version | ( + read -r makever + case ${makever} in + 'GNU Make '[4-9]\.*|'GNU Make '[1-9][0-9]) ;; + *) false ;; + esac; ) || die 'obsolete make version; need GNU make 4.x or later' + 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" { @@ -153,20 +130,3 @@ cd "$RDIR" echo "export LD_LIBRARY_PATH=\${RISCV}/lib\${LD_LIBRARY_PATH:+":\${LD_LIBRARY_PATH}"}" } > env.sh echo "Toolchain Build Complete!" - -if [ "$FASTINSTALL" = "false" ]; then - # commands that can't run on EC2 (specifically, OpenOCD because of autoconf version_ - # see if the instance info page exists. if not, we are not on ec2. - # this is one of the few methods that works without sudo - if wget -T 1 -t 3 -O /dev/null http://169.254.169.254/; then - echo "Skipping RISC-V OpenOCD" - else - echo "Building RISC-V OpenOCD" - cd "$CHIPYARD_DIR/toolchains/$TOOLCHAIN" - check_version automake 1.14 "OpenOCD build" - check_version autoconf 2.64 "OpenOCD build" - build_project riscv-openocd --prefix="${RISCV}" --enable-remote-bitbang --enable-jtag_vpi --disable-werror - echo -e "\\nRISC-V OpenOCD installation completed!" - cd "$RDIR" - fi -fi diff --git a/scripts/build-util.sh b/scripts/build-util.sh new file mode 100644 index 00000000..be58a6a1 --- /dev/null +++ b/scripts/build-util.sh @@ -0,0 +1,89 @@ +# Derived from +# https://github.com/riscv/riscv-tools/blob/master/build.common + +[ -n "${SRCDIR}" ] || exit 1 + +# Scale number of parallel make jobs by hardware thread count +ncpu="${NPROC:-$(getconf _NPROCESSORS_ONLN || # GNU + getconf NPROCESSORS_ONLN || # *BSD, Solaris + nproc --all || # Linux + sysctl -n hw.ncpu || # *BSD, OS X + :)}" 2>/dev/null +case ${ncpu} in +''|*[!0-9]*) ;; # Ignore non-integer values +*) export MAKEFLAGS="-j ${ncpu} ${MAKEFLAGS}" ;; +esac + +MAKE=$(command -v gnumake || command -v gmake || command -v make) +readonly MAKE + + +module_prepare() ( # [ignored-submodule..] + set -e + name=$1 + shift + + dir="${SRCDIR}/${name}" + echo "=> Starting ${name} build" + echo "==> Initializing ${name} submodule" + if [ $# -gt 0 ] ; then + git submodule update --init "${dir}" + while [ -n "$1" ] ; do + git -C "${dir}" config submodule."${1}".update none + shift + done + fi + git submodule update --init --recursive "${dir}" +) + +module_run() ( # + set -e + cd "${SRCDIR}/${1}" + shift + "$@" +) + +module_make() ( # + set -e -o pipefail + cd "${SRCDIR}/${1}/build" + shift + "${MAKE}" "$@" | tee "build-${1:-make}.log" +) + +module_build() ( # [configure-arg..] + set -e -o pipefail + name=$1 + shift + + cd "${SRCDIR}/${name}" + + if [ -e build ] ; then + echo "==> Removing existing ${name}/build directory" + rm -rf build + fi + if ! [ -e configure ] ; then + echo "==> Updating autoconf files for ${name}" + find . -iname configure.ac -type f -print0 | + while read -r -d '' file ; do + mkdir -p -- "${file%/*}/m4" + done + autoreconf -i + fi + + mkdir -p build + cd build + { + export PATH="${RISCV:+${RISCV}/bin:}${PATH}" + echo "==> Configuring ${name}" + ../configure "$@" + echo "==> Building ${name}" + "${MAKE}" + echo "==> Installing ${name}" + "${MAKE}" install + } 2>&1 | tee build.log +) + +module_all() { # [configure-arg..] + module_prepare "$1" + module_build "$@" +} diff --git a/scripts/init-submodules-no-riscv-tools.sh b/scripts/init-submodules-no-riscv-tools.sh index 627c9285..e17b67ef 100755 --- a/scripts/init-submodules-no-riscv-tools.sh +++ b/scripts/init-submodules-no-riscv-tools.sh @@ -4,16 +4,13 @@ set -e set -o pipefail -unamestr=$(uname) -RDIR=$(pwd) -scripts_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +RDIR=$(git rev-parse --show-toplevel) -# ignore riscv-tools for submodule init recursive -# you must do this globally (otherwise riscv-tools deep -# in the submodule tree will get pulled anyway -git config submodule.toolchains/riscv-tools.update none -git config submodule.toolchains/esp-tools.update none -git config --global submodule.experimental-blocks.update none +# Ignore toolchain submodules +cd "$RDIR" +for name in toolchains/*/*/ ; do + git config submodule."${name%/}".update none +done # Disable updates to the FireSim submodule until explicitly requested git config submodule.sims/firesim.update none # Disable updates to the hammer tool plugins repos @@ -21,10 +18,10 @@ git config submodule.vlsi/hammer-cadence-plugins.update none git config submodule.vlsi/hammer-synopsys-plugins.update none git config submodule.vlsi/hammer-mentor-plugins.update none git submodule update --init --recursive #--jobs 8 -# unignore riscv-tools,catapult-shell2 globally -git config --unset submodule.toolchains/riscv-tools.update -git config --unset submodule.toolchains/esp-tools.update -git config --global --unset submodule.experimental-blocks.update +# Un-ignore toolchain submodules +for name in toolchains/*/*/ ; do + git config --unset submodule."${name%/}".update +done git config --unset submodule.vlsi/hammer-cadence-plugins.update git config --unset submodule.vlsi/hammer-synopsys-plugins.update git config --unset submodule.vlsi/hammer-mentor-plugins.update @@ -32,9 +29,6 @@ git config --unset submodule.vlsi/hammer-mentor-plugins.update # Renable firesim and init only the required submodules to provide # all required scala deps, without doing a full build-setup git config --unset submodule.sims/firesim.update -cd "${scripts_dir}/../sims" -git submodule update --init firesim -cd firesim/sim -git submodule update --init midas -cd "$RDIR" +git submodule update --init sims/firesim +git -C sims/firesim submodule update --init sim/midas git config submodule.sims/firesim.update none diff --git a/sims/firesim b/sims/firesim index 4769e5d8..26ffba7c 160000 --- a/sims/firesim +++ b/sims/firesim @@ -1 +1 @@ -Subproject commit 4769e5d86acf6a9508d2b5a63141dc80a6ef20a6 +Subproject commit 26ffba7cbca2982fef6b221a7abbc51d5cdc4b62 diff --git a/sims/vcs/Makefile b/sims/vcs/Makefile index 6a65d0a2..aeda8a1b 100644 --- a/sims/vcs/Makefile +++ b/sims/vcs/Makefile @@ -48,8 +48,7 @@ VCS_CC_OPTS = \ -CC "-I$(VCS_HOME)/include" \ -CC "-I$(RISCV)/include" \ -CC "-std=c++11" \ - -CC "-Wl,-rpath,$(RISCV)/lib" \ - $(RISCV)/lib/libfesvr.so + $(RISCV)/lib/libfesvr.a VCS_NONCC_OPTS = \ +lint=all,noVCDE,noONGS,noUI \ diff --git a/toolchains/esp-tools b/toolchains/esp-tools deleted file mode 160000 index dcb6012f..00000000 --- a/toolchains/esp-tools +++ /dev/null @@ -1 +0,0 @@ -Subproject commit dcb6012f77101e793948cc90ac31b3735a9f3f6d diff --git a/toolchains/esp-tools/riscv-gnu-toolchain b/toolchains/esp-tools/riscv-gnu-toolchain new file mode 160000 index 00000000..9f532293 --- /dev/null +++ b/toolchains/esp-tools/riscv-gnu-toolchain @@ -0,0 +1 @@ +Subproject commit 9f532293985d08b0c176d96c7b650e5f433780e1 diff --git a/toolchains/esp-tools/riscv-isa-sim b/toolchains/esp-tools/riscv-isa-sim new file mode 160000 index 00000000..92f2f467 --- /dev/null +++ b/toolchains/esp-tools/riscv-isa-sim @@ -0,0 +1 @@ +Subproject commit 92f2f467c00caa991379ba55ece7118f068c2218 diff --git a/toolchains/esp-tools/riscv-pk b/toolchains/esp-tools/riscv-pk new file mode 160000 index 00000000..a3e4ac61 --- /dev/null +++ b/toolchains/esp-tools/riscv-pk @@ -0,0 +1 @@ +Subproject commit a3e4ac61d2b1ff37a22b9193b85d3b94273e80cb diff --git a/toolchains/esp-tools/riscv-tests b/toolchains/esp-tools/riscv-tests new file mode 160000 index 00000000..f1370d05 --- /dev/null +++ b/toolchains/esp-tools/riscv-tests @@ -0,0 +1 @@ +Subproject commit f1370d054389fc83974fc820985b5c51693b8f9d diff --git a/toolchains/riscv-tools b/toolchains/riscv-tools deleted file mode 160000 index bce7b5e3..00000000 --- a/toolchains/riscv-tools +++ /dev/null @@ -1 +0,0 @@ -Subproject commit bce7b5e363957c134f944769e677354467b7e4ed diff --git a/toolchains/riscv-tools/riscv-gnu-toolchain b/toolchains/riscv-tools/riscv-gnu-toolchain new file mode 160000 index 00000000..2855d823 --- /dev/null +++ b/toolchains/riscv-tools/riscv-gnu-toolchain @@ -0,0 +1 @@ +Subproject commit 2855d823a6e93d50af604264b02ced951e80de67 diff --git a/toolchains/riscv-tools/riscv-gnu-toolchain-prebuilt b/toolchains/riscv-tools/riscv-gnu-toolchain-prebuilt new file mode 160000 index 00000000..5e32a015 --- /dev/null +++ b/toolchains/riscv-tools/riscv-gnu-toolchain-prebuilt @@ -0,0 +1 @@ +Subproject commit 5e32a0157f91ebfb5c7ea7113fce28bf40016fa4 diff --git a/toolchains/riscv-tools/riscv-isa-sim b/toolchains/riscv-tools/riscv-isa-sim new file mode 160000 index 00000000..9443c1db --- /dev/null +++ b/toolchains/riscv-tools/riscv-isa-sim @@ -0,0 +1 @@ +Subproject commit 9443c1dbac0301faf3a47c5e6914cc7dcb34983e diff --git a/toolchains/riscv-tools/riscv-openocd b/toolchains/riscv-tools/riscv-openocd new file mode 160000 index 00000000..7c82a7b9 --- /dev/null +++ b/toolchains/riscv-tools/riscv-openocd @@ -0,0 +1 @@ +Subproject commit 7c82a7b9d5b7d8b71e0a66826705ec141db718c3 diff --git a/toolchains/riscv-tools/riscv-pk b/toolchains/riscv-tools/riscv-pk new file mode 160000 index 00000000..a3e4ac61 --- /dev/null +++ b/toolchains/riscv-tools/riscv-pk @@ -0,0 +1 @@ +Subproject commit a3e4ac61d2b1ff37a22b9193b85d3b94273e80cb diff --git a/toolchains/riscv-tools/riscv-tests b/toolchains/riscv-tools/riscv-tests new file mode 160000 index 00000000..249796ce --- /dev/null +++ b/toolchains/riscv-tools/riscv-tests @@ -0,0 +1 @@ +Subproject commit 249796cec94d75ff10ca034153e206a319e87158