| # Copyright lowRISC contributors. |
| # Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| # Azure Pipelines CI build configuration |
| # Documentation at https://aka.ms/yaml |
| |
| variables: |
| VERILATOR_VERSION: 4.032 |
| RISCV_TOOLCHAIN_TAR_VERSION: 20200323-1 |
| RISCV_COMPLIANCE_GIT_VERSION: 844c6660ef3f0d9b96957991109dfd80cc4938e2 |
| VERIBLE_VERSION: v0.0-459-g4d6929e |
| |
| trigger: |
| batch: true |
| branches: |
| include: |
| - '*' |
| tags: |
| include: |
| - '*' |
| pr: |
| branches: |
| include: |
| - '*' |
| |
| # Note: All tests run as part of one job to avoid copying intermediate build |
| # artifacts around (e.g. Verilator and toolchain builds). Once more builds/tests |
| # are added, we need to re-evaluate this decision to parallelize jobs and |
| # improve end-to-end CI times. |
| |
| jobs: |
| - job: lint_dv |
| displayName: Run quality checks (Lint and DV) |
| pool: |
| vmImage: "ubuntu-16.04" |
| steps: |
| # Installing six is a workaround for pip dependency resolution: six is already |
| # installed as system package with a version below the required one. |
| # Explicitly installing six through pip gets us a supported version. |
| # |
| # Updating pip and setuptools is required to have these tools properly parse |
| # Python-version metadata, which some packages uses to specify that an older |
| # version of a package must be used for a certain Python version. If that |
| # information is not read, pip installs the latest version, which then fails |
| # to run. |
| - bash: | |
| curl -L https://download.opensuse.org/repositories/home:phiwag:edatools/xUbuntu_16.04/Release.key | sudo apt-key add - |
| sudo sh -c "echo 'deb http://download.opensuse.org/repositories/home:/phiwag:/edatools/xUbuntu_16.04/ /' > /etc/apt/sources.list.d/edatools.list" |
| # Uninstall distribution-provided version to get a newer version through pip |
| sudo apt-get remove -y python3-yaml |
| sudo apt-get update |
| sudo apt-get install -y \ |
| python3 \ |
| python3-pip \ |
| python3-setuptools \ |
| python3-wheel \ |
| srecord \ |
| zlib1g-dev \ |
| git \ |
| make \ |
| autoconf \ |
| g++ \ |
| flex \ |
| bison \ |
| curl \ |
| libelf-dev \ |
| clang-format \ |
| verilator-$(VERILATOR_VERSION) \ |
| && sudo pip3 install -U setuptools pip six \ |
| && sudo pip3 install -U -r python-requirements.txt |
| displayName: Install dependencies |
| |
| - bash: | |
| set -e |
| mkdir -p build/verible |
| cd build/verible |
| curl -Ls -o verible.tar.gz https://github.com/google/verible/releases/download/$(VERIBLE_VERSION)/verible-$(VERIBLE_VERSION)-Ubuntu-16.04-xenial-x86_64.tar.gz |
| sudo mkdir -p /tools/verible && sudo chmod 777 /tools/verible |
| tar -C /tools/verible -xf verible.tar.gz --strip-components=1 |
| echo "##vso[task.setvariable variable=PATH]/tools/verible/bin:$PATH" |
| displayName: Install Verible |
| |
| - bash: | |
| export TOOLCHAIN_URL=https://github.com/lowRISC/lowrisc-toolchains/releases/download/${RISCV_TOOLCHAIN_TAR_VERSION}/lowrisc-toolchain-gcc-rv32imc-${RISCV_TOOLCHAIN_TAR_VERSION}.tar.xz |
| mkdir -p build/toolchain |
| curl -Ls -o build/toolchain/rv32-toolchain.tar.xz $TOOLCHAIN_URL |
| sudo mkdir -p /tools/riscv && sudo chmod 777 /tools/riscv |
| tar -C /tools/riscv -xf build/toolchain/rv32-toolchain.tar.xz --strip-components=1 |
| echo "##vso[task.setvariable variable=PATH]/tools/riscv/bin:$PATH" |
| displayName: Get precompiled RISC-V toolchain |
| |
| - bash: | |
| echo $PATH |
| python3 --version |
| echo -n "fusesoc " |
| fusesoc --version |
| verilator --version |
| riscv32-unknown-elf-gcc --version |
| verible-verilog-lint --version |
| displayName: Display environment |
| |
| # Verible format is experimental so only run on default config for now, |
| # will eventually become part of the per-config CI |
| - bash: | |
| fusesoc --cores-root . run --no-export --target=format --tool=veribleformat lowrisc:ibex:ibex_core_tracing |
| if [ $? != 0 ]; then |
| echo -n "##vso[task.logissue type=error]" |
| echo "Verilog format with Verible failed. Run 'fusesoc --cores-root . run --no-export --target=format --tool=veribleformat lowrisc:ibex:ibex_core_tracing' to check and fix all errors." |
| echo "This flow is currently experimental and failures can be ignored." |
| fi |
| # Show diff of what verilog_format would have changed, and then revert. |
| git diff |
| git reset --hard HEAD |
| continueOnError: true |
| displayName: Format all source code with Verible format (experimental) |
| |
| - bash: | |
| fork_origin=$(git merge-base --fork-point origin/master) |
| changed_files=$(git diff --name-only $fork_origin | grep -v '^vendor' | grep -E '\.(cpp|cc|c|h)$') |
| test -z "$changed_files" || git diff -U0 $fork_origin $changed_files | clang-format-diff -p1 | tee clang-format-output |
| if [ -s clang-format-output ]; then |
| echo -n "##vso[task.logissue type=error]" |
| echo "C/C++ lint failed. Use 'git clang-format' with appropriate options to reformat the changed code." |
| exit 1 |
| fi |
| # This check is not idempotent, but checks changes to a base branch. |
| # Run it only on pull requests. |
| condition: eq(variables['Build.Reason'], 'PullRequest') |
| displayName: 'Use clang-format to check C/C++ coding style' |
| |
| - bash: | |
| # Build and run CSR testbench, chosen Ibex configuration does not effect |
| # this so doesn't need to be part of per-config CI |
| fusesoc --cores-root=. run --target=sim --tool=verilator lowrisc:ibex:tb_cs_registers |
| displayName: Build and run CSR testbench with Verilator |
| |
| - bash: | |
| cd build |
| git clone https://github.com/riscv/riscv-compliance.git |
| cd riscv-compliance |
| git checkout "$(RISCV_COMPLIANCE_GIT_VERSION)" |
| displayName: Get RISC-V Compliance test suite |
| |
| # Run Ibex RTL CI per supported configuration |
| - template : ci/ibex-rtl-ci-steps.yml |
| parameters: |
| ibex_configs: |
| - small |
| - experimental-maxperf-pmp |
| - experimental-maxperf-pmp-bmfull |
| |
| # Run lint on simple system |
| - bash: | |
| fusesoc --cores-root . run --target=lint --tool=verilator lowrisc:ibex:ibex_simple_system |
| if [ $? != 0 ]; then |
| echo -n "##vso[task.logissue type=error]" |
| echo "Verilog lint with Verilator failed. Run 'fusesoc --cores-root . run --target=lint --tool=verilator lowrisc:ibex:ibex_simple_system' to check and fix all errors." |
| exit 1 |
| fi |
| displayName: Run Verilator lint on simple system |
| |
| - bash: | |
| fusesoc --cores-root . run --target=lint --tool=veriblelint lowrisc:ibex:ibex_simple_system |
| if [ $? != 0 ]; then |
| echo -n "##vso[task.logissue type=error]" |
| echo "Verilog lint with Verible failed. Run 'fusesoc --cores-root . run --target=lint --tool=veriblelint lowrisc:ibex:ibex_simple_system' to check and fix all errors." |
| exit 1 |
| fi |
| displayName: Run Verible lint on simple system |