# CircleCI Configuration File # version of circleci version: 2.1 parameters: tools-cache-version: type: string default: "v4" # default execution env.s executors: main-env: docker: - image: ucbbar/chipyard-image:1.0.1 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit # re-usable commands commands: toolchain-build: description: "Build a toolchain" parameters: tools-version: type: string default: "riscv-tools" steps: - checkout - run: name: Create hash of toolchains command: | .circleci/create-hash.sh - restore_cache: keys: - << parameters.tools-version >>-installed-<< pipeline.parameters.tools-cache-version >>-{{ checksum "../<< parameters.tools-version >>.hash" }} - run: name: Building << parameters.tools-version >> command: | .circleci/build-toolchains.sh << parameters.tools-version >> no_output_timeout: 120m - save_cache: key: << parameters.tools-version >>-installed-<< pipeline.parameters.tools-cache-version >>-{{ checksum "../<< parameters.tools-version >>.hash" }} paths: - "/home/riscvuser/<< parameters.tools-version >>-install" ssh-checkout: description: "Add SSH key and checkout code" steps: - add_ssh_keys: fingerprints: - "3e:c3:02:5b:ed:64:8c:b7:b0:04:43:bc:83:43:73:1e" - checkout setup-tools: description: "Get toolchain" parameters: tools-version: type: string default: "riscv-tools" steps: - ssh-checkout - run: name: Create hash of toolchains command: | .circleci/create-hash.sh - restore_cache: keys: - << parameters.tools-version >>-installed-<< pipeline.parameters.tools-cache-version >>-{{ checksum "../<< parameters.tools-version >>.hash" }} prepare-rtl: description: "Run the prepare step of RTL" parameters: tools-version: type: string default: "riscv-tools" project-key: type: string timeout: type: string default: "120m" build-script: type: string default: "do-rtl-build.sh" steps: - setup-tools: tools-version: "<< parameters.tools-version >>" - run: name: Building << parameters.project-key >> subproject using Verilator command: .circleci/<< parameters.build-script >> << parameters.project-key >> no_output_timeout: << parameters.timeout >> - save_cache: key: << parameters.project-key >>-{{ .Branch }}-{{ .Revision }} paths: - "/home/riscvuser/project" run-tests: description: "Run a set of tests" parameters: tools-version: type: string default: "riscv-tools" project-key: type: string extra-cache-restore: type: string default: "" run-script: type: string default: "run-tests.sh" timeout: type: string default: "10m" steps: - setup-tools: tools-version: "<< parameters.tools-version >>" - restore_cache: keys: - << parameters.project-key >>-{{ .Branch }}-{{ .Revision }} - when: condition: << parameters.extra-cache-restore >> steps: - restore_cache: keys: - << parameters.extra-cache-restore >>-{{ .Branch }}-{{ .Revision }} - run: name: Run << parameters.project-key >> subproject tests command: .circleci/<< parameters.run-script >> << parameters.project-key >> no_output_timeout: << parameters.timeout >> # set of jobs to run jobs: commit-on-master-check: executor: main-env steps: - checkout - run: name: Check commits of each submodule command: | .circleci/check-commit.sh tutorial-setup-check: executor: main-env steps: - checkout - run: name: Check that the tutorial-setup patches apply command: | scripts/tutorial-setup.sh documentation-check: executor: main-env steps: - checkout - run: name: Check that documentation builds with no warnings/errors command: | sudo apt-get update -y sudo apt-get install -y python3-pip sudo pip3 install -r docs/requirements.txt make -C docs html install-riscv-toolchain: executor: main-env steps: - toolchain-build: tools-version: "riscv-tools" install-esp-toolchain: executor: main-env steps: - toolchain-build: tools-version: "esp-tools" install-verilator: executor: main-env steps: - ssh-checkout - run: name: Install Verilator to remote command: | .circleci/install-verilator.sh build-extra-tests: executor: main-env steps: - ssh-checkout - run: name: Create hash of toolchains command: | .circleci/create-hash.sh - restore_cache: keys: - riscv-tools-installed-<< pipeline.parameters.tools-cache-version >>-{{ checksum "../riscv-tools.hash" }} - run: name: Build extra tests command: .circleci/build-extra-tests.sh no_output_timeout: 120m - save_cache: key: extra-tests-{{ .Branch }}-{{ .Revision }} paths: - "/home/riscvuser/project/tests" prepare-chipyard-rocket: executor: main-env steps: - prepare-rtl: project-key: "chipyard-rocket" prepare-chipyard-sha3: executor: main-env steps: - prepare-rtl: project-key: "chipyard-sha3" prepare-chipyard-hetero: executor: main-env steps: - prepare-rtl: project-key: "chipyard-hetero" timeout: "240m" prepare-chipyard-boom: executor: main-env steps: - prepare-rtl: project-key: "chipyard-boom" prepare-rocketchip: executor: main-env steps: - prepare-rtl: project-key: "rocketchip" prepare-chipyard-blkdev: executor: main-env steps: - prepare-rtl: project-key: "chipyard-blkdev" prepare-chipyard-hwacha: executor: main-env steps: - prepare-rtl: tools-version: "esp-tools" project-key: "chipyard-hwacha" prepare-chipyard-gemmini: executor: main-env steps: - prepare-rtl: tools-version: "esp-tools" project-key: "chipyard-gemmini" prepare-tracegen: executor: main-env steps: - prepare-rtl: project-key: "tracegen" prepare-tracegen-boom: executor: main-env steps: - prepare-rtl: project-key: "tracegen-boom" prepare-chipyard-ariane: executor: main-env steps: - prepare-rtl: project-key: "chipyard-ariane" prepare-icenet: executor: main-env steps: - prepare-rtl: project-key: "icenet" prepare-testchipip: executor: main-env steps: - prepare-rtl: project-key: "testchipip" prepare-chipyard-spiflashwrite: executor: main-env steps: - prepare-rtl: project-key: "chipyard-spiflashwrite" prepare-chipyard-spiflashread: executor: main-env steps: - prepare-rtl: project-key: "chipyard-spiflashread" chipyard-rocket-run-tests: executor: main-env steps: - run-tests: project-key: "chipyard-rocket" chipyard-sha3-run-tests: executor: main-env steps: - run-tests: project-key: "chipyard-sha3" chipyard-hetero-run-tests: executor: main-env steps: - run-tests: project-key: "chipyard-hetero" timeout: "15m" chipyard-boom-run-tests: executor: main-env steps: - run-tests: project-key: "chipyard-boom" rocketchip-run-tests: executor: main-env steps: - run-tests: project-key: "rocketchip" chipyard-hwacha-run-tests: executor: main-env steps: - run-tests: tools-version: "esp-tools" project-key: "chipyard-hwacha" chipyard-gemmini-run-tests: executor: main-env steps: - run-tests: tools-version: "esp-tools" project-key: "chipyard-gemmini" chipyard-spiflashwrite-run-tests: executor: main-env steps: - run-tests: project-key: "chipyard-spiflashwrite" chipyard-spiflashread-run-tests: executor: main-env steps: - run-tests: project-key: "chipyard-spiflashread" tracegen-run-tests: executor: main-env steps: - run-tests: project-key: "tracegen" tracegen-boom-run-tests: executor: main-env steps: - run-tests: project-key: "tracegen-boom" firesim-run-tests: executor: main-env steps: - run-tests: extra-cache-restore: "extra-tests" project-key: "firesim" run-script: "run-firesim-scala-tests.sh" timeout: "20m" fireboom-run-tests: executor: main-env steps: - run-tests: extra-cache-restore: "extra-tests" project-key: "fireboom" run-script: "run-firesim-scala-tests.sh" timeout: "45m" firesim-multiclock-run-tests: executor: main-env steps: - run-tests: extra-cache-restore: "extra-tests" project-key: "firesim-multiclock" run-script: "run-firesim-scala-tests.sh" timeout: "20m" midasexamples-run-tests: executor: main-env steps: - setup-tools - run: name: Run midasexamples tests command: .circleci/run-midasexamples-tests.sh no_output_timeout: 20m chipyard-ariane-run-tests: executor: main-env steps: - run-tests: project-key: "chipyard-ariane" timeout: "30m" icenet-run-tests: executor: main-env steps: - run-tests: project-key: "icenet" timeout: "30m" testchipip-run-tests: executor: main-env steps: - run-tests: project-key: "testchipip" timeout: "30m" # Order and dependencies of jobs to run workflows: version: 2 submodules-on-master: jobs: # Check to make sure submodule commits are on master branches - commit-on-master-check triggers: - schedule: cron: "0 0 * * *" filters: branches: only: - master build-and-test-chipyard-integration: jobs: # Make the toolchains - install-riscv-toolchain - install-esp-toolchain - install-verilator - commit-on-master-check # Attempt to apply the tutorial patches - tutorial-setup-check # Check that documentation builds - documentation-check # Build extra tests - build-extra-tests: requires: - install-riscv-toolchain # Prepare the verilator builds - prepare-chipyard-rocket: requires: - install-riscv-toolchain - install-verilator - prepare-chipyard-sha3: requires: - install-riscv-toolchain - install-verilator - prepare-chipyard-hetero: requires: - install-riscv-toolchain - install-verilator - prepare-chipyard-boom: requires: - install-riscv-toolchain - install-verilator - prepare-rocketchip: requires: - install-riscv-toolchain - install-verilator - prepare-chipyard-blkdev: requires: - install-riscv-toolchain - install-verilator - prepare-chipyard-hwacha: requires: - install-esp-toolchain - install-verilator - prepare-chipyard-gemmini: requires: - install-esp-toolchain - install-verilator - prepare-tracegen: requires: - install-riscv-toolchain - install-verilator - prepare-tracegen-boom: requires: - install-riscv-toolchain - install-verilator - prepare-chipyard-ariane: requires: - install-riscv-toolchain - install-verilator - prepare-icenet: requires: - install-riscv-toolchain - install-verilator - prepare-testchipip: requires: - install-riscv-toolchain - install-verilator - prepare-chipyard-spiflashwrite: requires: - install-riscv-toolchain - install-verilator - prepare-chipyard-spiflashread: requires: - install-riscv-toolchain - install-verilator # Run the respective tests # Run midasexamples test - midasexamples-run-tests: requires: - install-riscv-toolchain # Run the example tests - chipyard-rocket-run-tests: requires: - prepare-chipyard-rocket - chipyard-sha3-run-tests: requires: - prepare-chipyard-sha3 - chipyard-hetero-run-tests: requires: - prepare-chipyard-hetero - chipyard-boom-run-tests: requires: - prepare-chipyard-boom - rocketchip-run-tests: requires: - prepare-rocketchip - chipyard-hwacha-run-tests: requires: - prepare-chipyard-hwacha - chipyard-gemmini-run-tests: requires: - prepare-chipyard-gemmini - tracegen-run-tests: requires: - prepare-tracegen - tracegen-boom-run-tests: requires: - prepare-tracegen-boom - chipyard-spiflashwrite-run-tests: requires: - prepare-chipyard-spiflashwrite - chipyard-spiflashread-run-tests: requires: - prepare-chipyard-spiflashread # Run the firesim tests - firesim-run-tests: requires: - install-riscv-toolchain - install-verilator - build-extra-tests - firesim-multiclock-run-tests: requires: - install-riscv-toolchain - install-verilator - build-extra-tests - fireboom-run-tests: requires: - install-riscv-toolchain - install-verilator - build-extra-tests - chipyard-ariane-run-tests: requires: - prepare-chipyard-ariane - icenet-run-tests: requires: - prepare-icenet - testchipip-run-tests: requires: - prepare-testchipip