From 00d59bd25d0202548720f742209dd2ba28c827be Mon Sep 17 00:00:00 2001 From: abejgonzalez Date: Tue, 9 Jul 2019 16:03:25 -0700 Subject: [PATCH] use remote build server --- .circleci/build-toolchains.sh | 3 +- .circleci/build-verilator.sh | 26 +++- .circleci/config.yml | 224 ++++++++++------------------------ .circleci/defaults.sh | 28 +++++ .circleci/do-rtl-build.sh | 35 ++++-- 5 files changed, 141 insertions(+), 175 deletions(-) create mode 100755 .circleci/defaults.sh diff --git a/.circleci/build-toolchains.sh b/.circleci/build-toolchains.sh index 9b5477f6..6965da30 100755 --- a/.circleci/build-toolchains.sh +++ b/.circleci/build-toolchains.sh @@ -7,8 +7,7 @@ set -ex if [ ! -d "$HOME/$1-install" ]; then - - cd $HOME/ + cd $HOME # init all submodules including the tools CHIPYARD_DIR=$HOME/project ./project/scripts/build-toolchains.sh $1 diff --git a/.circleci/build-verilator.sh b/.circleci/build-verilator.sh index 00cd7217..5a837e1f 100755 --- a/.circleci/build-verilator.sh +++ b/.circleci/build-verilator.sh @@ -5,11 +5,27 @@ # turn echo on and error on earliest command set -ex -cd $HOME/project +# get shared variables +SCRIPT_DIR="$( cd "$( dirname "$0" )" && pwd )" +source $SCRIPT_DIR/defaults.sh -cd sims/verisim +# call clean on exit +trap clean EXIT -if [ ! -d "$HOME/project/sims/verisim/verilator" ]; then - # make verilator - make verilator_install +if [ ! -d "$LOCAL_VERILATOR_DIR" ]; then + # set stricthostkeychecking to no (must happen before rsync) + run "echo \"Ping $SERVER\"" + + clean + + run "mkdir -p $REMOTE_CHIPYARD_DIR" + copy $LOCAL_CHIPYARD_DIR/ $SERVER:$REMOTE_CHIPYARD_DIR + + run "make -C $REMOTE_CHIPYARD_DIR/sims/verisim VERILATOR_INSTALL_DIR=$REMOTE_VERILATOR_DIR verilator_install" + + # copy so that circleci can cache + mkdir -p $LOCAL_CHIPYARD_DIR + mkdir -p $LOCAL_VERILATOR_DIR + copy $SERVER:$REMOTE_CHIPYARD_DIR/ $LOCAL_CHIPYARD_DIR + copy $SERVER:$REMOTE_VERILATOR_DIR/ $LOCAL_VERILATOR_DIR fi diff --git a/.circleci/config.yml b/.circleci/config.yml index 61e73e54..0e971f74 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -7,479 +7,387 @@ version: 2 jobs: commit-on-master-check: docker: - - image: riscvboom/riscvboom-images:0.0.5 + - image: riscvboom/riscvboom-images:0.0.10 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb - steps: - # Checkout the code - checkout - - run: name: Check commits of each submodule command: | .circleci/check-commit.sh - install-riscv-toolchain: docker: - - image: riscvboom/riscvboom-images:0.0.5 + - image: riscvboom/riscvboom-images:0.0.10 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb - steps: - # Checkout the code - checkout - - run: name: Create hash of toolchains command: | .circleci/create-hash.sh - - restore_cache: keys: - riscv-tools-installed-v1-{{ 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" }} paths: - "/home/riscvuser/riscv-tools-install" - install-esp-toolchain: docker: - - image: riscvboom/riscvboom-images:0.0.5 + - image: riscvboom/riscvboom-images:0.0.10 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb - steps: - # Checkout the code - checkout - - run: name: Create hash of toolchains command: | .circleci/create-hash.sh - - restore_cache: keys: - esp-tools-installed-v1-{{ 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" }} paths: - "/home/riscvuser/esp-tools-install" - install-verilator: docker: - - image: riscvboom/riscvboom-images:0.0.5 + - image: riscvboom/riscvboom-images:0.0.10 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb - steps: - # Checkout the code + - add_ssh_keys: + fingerprints: + - "3e:c3:02:5b:ed:64:8c:b7:b0:04:43:bc:83:43:73:1e" - checkout - - restore_cache: keys: - verilator-installed-v1-{{ checksum "sims/verisim/verilator.mk" }} - - run: name: Build Verilator command: | .circleci/build-verilator.sh no_output_timeout: 120m - - save_cache: key: verilator-installed-v1-{{ checksum "sims/verisim/verilator.mk" }} paths: - - "/home/riscvuser/project/sims/verisim/verilator" - + - "/home/riscvuser/verilator" prepare-example: docker: - - image: riscvboom/riscvboom-images:0.0.5 + - image: riscvboom/riscvboom-images:0.0.10 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb - steps: - # Checkout the code + - add_ssh_keys: + fingerprints: + - "3e:c3:02:5b:ed:64:8c:b7:b0:04:43:bc:83:43:73:1e" - checkout - - run: name: Create hash of toolchains command: | .circleci/create-hash.sh - - restore_cache: keys: - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} - - restore_cache: keys: - verilator-installed-v1-{{ checksum "sims/verisim/verilator.mk" }} - - run: name: Building the example subproject using Verilator command: .circleci/do-rtl-build.sh SUB_PROJECT=example no_output_timeout: 120m - - save_cache: key: example-{{ .Branch }}-{{ .Revision }} paths: - "/home/riscvuser/project" - prepare-boomexample: docker: - - image: riscvboom/riscvboom-images:0.0.5 + - image: riscvboom/riscvboom-images:0.0.10 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb - steps: - # Checkout the code + - add_ssh_keys: + fingerprints: + - "3e:c3:02:5b:ed:64:8c:b7:b0:04:43:bc:83:43:73:1e" - checkout - - run: name: Create hash of toolchains command: | .circleci/create-hash.sh - - restore_cache: keys: - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} - - restore_cache: keys: - verilator-installed-v1-{{ checksum "sims/verisim/verilator.mk" }} - - run: name: Building the boomexample subproject using Verilator command: .circleci/do-rtl-build.sh SUB_PROJECT=example CONFIG=SmallDefaultBoomConfig no_output_timeout: 120m - - save_cache: key: boomexample-{{ .Branch }}-{{ .Revision }} paths: - "/home/riscvuser/project" - prepare-boomrocketexample: docker: - - image: riscvboom/riscvboom-images:0.0.5 + - image: riscvboom/riscvboom-images:0.0.10 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb - steps: - # Checkout the code + - add_ssh_keys: + fingerprints: + - "3e:c3:02:5b:ed:64:8c:b7:b0:04:43:bc:83:43:73:1e" - checkout - - run: name: Create hash of toolchains command: | .circleci/create-hash.sh - - restore_cache: keys: - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} - - restore_cache: keys: - verilator-installed-v1-{{ checksum "sims/verisim/verilator.mk" }} - - run: name: Building the boomrocketexample subproject using Verilator command: .circleci/do-rtl-build.sh SUB_PROJECT=example CONFIG=SmallDefaultBoomAndRocketConfig no_output_timeout: 120m - - save_cache: key: boomrocketexample-{{ .Branch }}-{{ .Revision }} paths: - "/home/riscvuser/project" - prepare-boom: docker: - - image: riscvboom/riscvboom-images:0.0.5 + - image: riscvboom/riscvboom-images:0.0.10 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb - steps: - # Checkout the code + - add_ssh_keys: + fingerprints: + - "3e:c3:02:5b:ed:64:8c:b7:b0:04:43:bc:83:43:73:1e" - checkout - - run: name: Create hash of toolchains command: | .circleci/create-hash.sh - - restore_cache: keys: - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} - - restore_cache: keys: - verilator-installed-v1-{{ checksum "sims/verisim/verilator.mk" }} - - run: name: Building the boom subproject using Verilator command: .circleci/do-rtl-build.sh SUB_PROJECT=boom no_output_timeout: 120m - - save_cache: key: boom-{{ .Branch }}-{{ .Revision }} paths: - "/home/riscvuser/project" - prepare-rocketchip: docker: - - image: riscvboom/riscvboom-images:0.0.5 + - image: riscvboom/riscvboom-images:0.0.10 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb - steps: - # Checkout the code + - add_ssh_keys: + fingerprints: + - "3e:c3:02:5b:ed:64:8c:b7:b0:04:43:bc:83:43:73:1e" - checkout - - run: name: Create hash of toolchains command: | .circleci/create-hash.sh - - restore_cache: keys: - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} - - restore_cache: keys: - verilator-installed-v1-{{ checksum "sims/verisim/verilator.mk" }} - - run: name: Building the rocketchip subproject using Verilator command: .circleci/do-rtl-build.sh SUB_PROJECT=rocketchip no_output_timeout: 120m - - save_cache: key: rocketchip-{{ .Branch }}-{{ .Revision }} paths: - "/home/riscvuser/project" - - prepare-hwacha-verilog-only: + prepare-hwacha: docker: - - image: riscvboom/riscvboom-images:0.0.5 + - image: riscvboom/riscvboom-images:0.0.10 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb - steps: - # Checkout the code + - add_ssh_keys: + fingerprints: + - "3e:c3:02:5b:ed:64:8c:b7:b0:04:43:bc:83:43:73:1e" - checkout - - run: name: Create hash of toolchains command: | .circleci/create-hash.sh - - restore_cache: keys: - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} - - restore_cache: keys: - verilator-installed-v1-{{ checksum "sims/verisim/verilator.mk" }} - - run: name: Building the hwacha subproject using Verilator - command: .circleci/do-rtl-build.sh SUB_PROJECT=hwacha verilog + command: .circleci/do-rtl-build.sh SUB_PROJECT=hwacha no_output_timeout: 120m - - save_cache: key: hwacha-{{ .Branch }}-{{ .Revision }} paths: - "/home/riscvuser/project" - example-run-benchmark-tests: docker: - - image: riscvboom/riscvboom-images:0.0.5 + - image: riscvboom/riscvboom-images:0.0.10 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb - steps: - # Checkout the code - checkout - - run: name: Create hash of toolchains command: | .circleci/create-hash.sh - - restore_cache: keys: - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} - - restore_cache: keys: - example-{{ .Branch }}-{{ .Revision }} - - run: name: Run example benchmark tests command: make run-bmark-tests -C sims/verisim SUB_PROJECT=example - boomexample-run-benchmark-tests: docker: - - image: riscvboom/riscvboom-images:0.0.5 + - image: riscvboom/riscvboom-images:0.0.10 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb - steps: - # Checkout the code - checkout - - run: name: Create hash of toolchains command: | .circleci/create-hash.sh - - restore_cache: keys: - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} - - restore_cache: keys: - boomexample-{{ .Branch }}-{{ .Revision }} - - run: name: Run boomexample benchmark tests command: make run-bmark-tests -C sims/verisim SUB_PROJECT=example CONFIG=SmallDefaultBoomConfig - boomrocketexample-run-benchmark-tests: docker: - - image: riscvboom/riscvboom-images:0.0.5 + - image: riscvboom/riscvboom-images:0.0.10 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb - steps: - # Checkout the code - checkout - - run: name: Create hash of toolchains command: | .circleci/create-hash.sh - - restore_cache: keys: - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} - - restore_cache: keys: - boomrocketexample-{{ .Branch }}-{{ .Revision }} - - run: name: Run boomrocketexample benchmark tests command: make run-bmark-tests -C sims/verisim SUB_PROJECT=example CONFIG=SmallDefaultBoomAndRocketConfig - boom-run-benchmark-tests: docker: - - image: riscvboom/riscvboom-images:0.0.5 + - image: riscvboom/riscvboom-images:0.0.10 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb - steps: - # Checkout the code - checkout - - run: name: Create hash of toolchains command: | .circleci/create-hash.sh - - restore_cache: keys: - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} - - restore_cache: keys: - boom-{{ .Branch }}-{{ .Revision }} - - run: name: Run boom benchmark tests command: make run-bmark-tests -C sims/verisim SUB_PROJECT=boom - rocketchip-run-benchmark-tests: docker: - - image: riscvboom/riscvboom-images:0.0.5 + - image: riscvboom/riscvboom-images:0.0.10 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit TERM: dumb - steps: - # Checkout the code - checkout - - run: name: Create hash of toolchains command: | .circleci/create-hash.sh - - restore_cache: keys: - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} - - restore_cache: keys: - rocketchip-{{ .Branch }}-{{ .Revision }} - - run: name: Run rocketchip benchmark tests command: make run-bmark-tests -C sims/verisim SUB_PROJECT=rocketchip - -# hwacha-run-benchmark-tests: -# docker: -# - image: riscvboom/riscvboom-images:0.0.5 -# environment: -# JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit -# TERM: dumb -# -# steps: -# # Checkout the code -# - checkout -# -# - run: -# name: Create hash of toolchains -# command: | -# .circleci/create-hash.sh -# -# - restore_cache: -# keys: -# - riscv-tools-installed-v1-{{ checksum "../riscv-tools.hash" }} -# -# - restore_cache: -# keys: -# - hwacha-{{ .Branch }}-{{ .Revision }} -# -# - run: -# name: Run hwacha benchmark tests -# command: make run-bmark-tests -C sims/verisim SUB_PROJECT=hwacha + hwacha-run-benchmark-tests: + docker: + - image: riscvboom/riscvboom-images:0.0.10 + environment: + JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit + TERM: dumb + steps: + - checkout + - run: + name: Create hash of toolchains + command: | + .circleci/create-hash.sh + - restore_cache: + keys: + - esp-tools-installed-v1-{{ checksum "../esp-tools.hash" }} + - restore_cache: + keys: + - hwacha-{{ .Branch }}-{{ .Revision }} + - run: + name: Run hwacha benchmark tests + command: export RISCV=/home/riscvuser/esp-tools-install; export LD_LIBRARY_PATH=$RISCV/lib; make run-bmark-tests -C sims/verisim SUB_PROJECT=hwacha # Order and dependencies of jobs to run workflows: @@ -523,9 +431,8 @@ workflows: - install-riscv-toolchain - install-verilator - - prepare-hwacha-verilog-only: + - prepare-hwacha: requires: - - install-riscv-toolchain # TODO: Remove when esp-tools is used - install-esp-toolchain - install-verilator @@ -557,8 +464,7 @@ workflows: - install-riscv-toolchain - prepare-rocketchip -# - hwacha-run-benchmark-tests: -# requires: -# - install-riscv-toolchain # TODO: Remove when esp-tools is used -# - install-esp-toolchain -# - prepare-hwacha + - hwacha-run-benchmark-tests: + requires: + - install-esp-toolchain + - prepare-hwacha diff --git a/.circleci/defaults.sh b/.circleci/defaults.sh new file mode 100755 index 00000000..78c4a350 --- /dev/null +++ b/.circleci/defaults.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +copy () { + rsync -avzp -e 'ssh' $1 $2 +} + +run () { + ssh -o "StrictHostKeyChecking no" -t $SERVER $1 +} + +clean () { + # remove remote work dir + run "rm -rf $REMOTE_WORK_DIR" +} + +# remote variables +REMOTE_WORK_DIR=$CI_DIR/$CIRCLE_PROJECT_REPONAME-$CIRCLE_BRANCH-$CIRCLE_SHA1-$CIRCLE_JOB +REMOTE_RISCV_DIR=$REMOTE_WORK_DIR/riscv-tools-install +REMOTE_CHIPYARD_DIR=$REMOTE_WORK_DIR/chipyard +REMOTE_VERILATOR_DIR=$REMOTE_WORK_DIR/verilator +REMOTE_SIM_DIR=$REMOTE_CHIPYARD_DIR/sims/verisim + +# local variables (aka within the docker container) +LOCAL_CHECKOUT_DIR=$HOME/project +LOCAL_RISCV_DIR=$HOME/riscv-tools-install +LOCAL_CHIPYARD_DIR=$HOME/chipyard +LOCAL_VERILATOR_DIR=$HOME/verilator +LOCAL_SIM_DIR=$LOCAL_CHIPYARD_DIR/sims/verisim diff --git a/.circleci/do-rtl-build.sh b/.circleci/do-rtl-build.sh index 51ad760b..af46dbcb 100755 --- a/.circleci/do-rtl-build.sh +++ b/.circleci/do-rtl-build.sh @@ -6,15 +6,32 @@ # turn echo on and error on earliest command set -ex -# init all submodules -cd $HOME/project -./scripts/init-submodules-no-riscv-tools.sh +# get shared variables +SCRIPT_DIR="$( cd "$( dirname "$0" )" && pwd )" +source $SCRIPT_DIR/defaults.sh -# enter the verisim directory and build the specific config -cd sims/verisim -make clean +# call clean on exit +trap clean EXIT -# run the particular build command -make JAVA_ARGS="-Xmx2G -Xss8M" $@ +# set stricthostkeychecking to no (must happen before rsync) +run "echo \"Ping $SERVER\"" -rm -rf ../../project +clean + +# copy over riscv-tools, verilator, and chipyard to remote +run "mkdir -p $REMOTE_RISCV_DIR" +run "mkdir -p $REMOTE_CHIPYARD_DIR" +run "mkdir -p $REMOTE_VERILATOR_DIR" +copy $LOCAL_RISCV_DIR/ $SERVER:$REMOTE_RISCV_DIR +copy $LOCAL_CHIPYARD_DIR/ $SERVER:$REMOTE_CHIPYARD_DIR +copy $LOCAL_VERILATOR_DIR/ $SERVER:$REMOTE_VERILATOR_DIR + +# enter the verisim directory and build the specific config on remote server +run "cd $REMOTE_CHIPYARD_DIR && ./scripts/init-submodules-no-riscv-tools.sh" +run "make -C $REMOTE_SIM_DIR clean" +run "export RISCV=\"$REMOTE_RISCV_DIR\"; make -C $REMOTE_SIM_DIR VERILATOR_INSTALL_DIR=$REMOTE_VERILATOR_DIR JAVA_ARGS=\"-Xmx8G -Xss8M\" SUB_PROJECT=boom CONFIG=$1 TOP=BoomRocketSystem" +run "rm -rf $REMOTE_CHIPYARD_DIR/project" + +# copy back the final build +mkdir -p $LOCAL_CHIPYARD_DIR +copy $SERVER:$REMOTE_CHIPYARD_DIR/ $LOCAL_CHIPYARD_DIR