blob: e180b481d1ce2b00a55c97f5286f17b14e8f8582 [file] [log] [blame] [edit]
# 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:
#
# If updating VERILATOR_VERSION, TOOLCHAIN_VERSION or RUST_VERSION, update the
# definitions in util/container/Dockerfile as well.
#
VERILATOR_VERSION: 4.210
TOOLCHAIN_PATH: /opt/buildcache/riscv
VERIBLE_VERSION: v0.0-2135-gb534c1fe
RUST_VERSION: 1.60.0
# Release tag from https://github.com/lowRISC/lowrisc-toolchains/releases
TOOLCHAIN_VERSION: 20220210-1
# This controls where builds happen, and gets picked up by build_consts.sh.
BUILD_ROOT: $(Build.ArtifactStagingDirectory)
VIVADO_VERSION: "2020.2"
trigger:
batch: true
branches:
include:
- "*"
tags:
include:
- "*"
pr:
branches:
include:
- "*"
jobs:
- job: checkout
displayName: Checkout repository
pool:
vmImage: ubuntu-20.04
steps:
- checkout: self
path: opentitan-repo
- bash: |
tar -C $(Pipeline.Workspace)/opentitan-repo -czf $(Pipeline.Workspace)/opentitan-repo.tar.gz .
displayName: Pack up repository
- publish: $(Pipeline.Workspace)/opentitan-repo.tar.gz
artifact: opentitan-repo
displayName: Upload repository
- job: lint
displayName: Quality (quick lint)
# Run code quality checks (quick lint)
dependsOn: checkout
pool:
vmImage: ubuntu-20.04
steps:
- template: ci/checkout-template.yml
- bash: |
sudo apt-get remove -y clang-6.0 libclang-common-6.0-dev libclang1-6.0 libllvm6.0
displayName: Uninstall Clang
# Remove existing Clang installation
- template: ci/install-package-dependencies.yml
## !!!
##
## The steps below here are duplicated in ci/jobs/quick-lint.sh
## to allow developers to "run CI" locally. Keep them in sync.
##
## !!!
- bash: ci/scripts/show-env.sh
displayName: Environment Info
# Display environment information
- bash: ci/scripts/lint-commits.sh $SYSTEM_PULLREQUEST_TARGETBRANCH
condition: eq(variables['Build.Reason'], 'PullRequest')
displayName: Commit metadata
- bash: ci/scripts/check-licence-headers.sh $SYSTEM_PULLREQUEST_TARGETBRANCH
condition: eq(variables['Build.Reason'], 'PullRequest')
displayName: Licence Headers
- bash: ci/scripts/exec-check.sh
condition: eq(variables['Build.Reason'], 'PullRequest')
displayName: Executable Bits
- bash: ci/scripts/check-ascii.sh
condition: eq(variables['Build.Reason'], 'PullRequest')
displayName: ASCII Chars
# Check for non-ASCII characters in source code
- bash: ci/scripts/python-lint.sh $SYSTEM_PULLREQUEST_TARGETBRANCH
condition: eq(variables['Build.Reason'], 'PullRequest')
displayName: flake8 (Python lint)
# Run Python lint (flake8)
- bash: ci/scripts/mypy.sh
condition: eq(variables['Build.Reason'], 'PullRequest')
displayName: mypy (Python lint)
# Run Python lint (mypy)
- bash: ci/scripts/clang-format.sh $SYSTEM_PULLREQUEST_TARGETBRANCH
condition: eq(variables['Build.Reason'], 'PullRequest')
displayName: clang-format (C/C++ lint)
# Use clang-format to check C/C++ coding style
- bash: ci/scripts/rust-format.sh $SYSTEM_PULLREQUEST_TARGETBRANCH
condition: eq(variables['Build.Reason'], 'PullRequest')
displayName: rustfmt
- bash: |
set -e
# Azure-specific installation:
# The latest version of shellcheck available to ubuntu-18.04 is 0.4.6-1.
# We need a newer version that provides the --warning flag.
SC_VERSION="v0.8.0"
SHELLCHECK_FILE="shellcheck-$SC_VERSION.linux.x86_64.tar.xz"
SHELLCHECK_URL="https://github.com/koalaman/shellcheck/releases/download/$SC_VERSION/$SHELLCHECK_FILE"
SC_SHA256=ab6ee1b178f014d1b86d1e24da20d1139656c8b0ed34d2867fbb834dad02bf0a
echo "Installing Shellcheck $SC_VERSION"
curl -L -o "$SHELLCHECK_FILE" "$SHELLCHECK_URL" --silent --show-error
echo "${SC_SHA256} ${SHELLCHECK_FILE}" | sha256sum -c
tar -xJf $SHELLCHECK_FILE
sudo cp "shellcheck-$SC_VERSION/shellcheck" /usr/bin
# Run shellcheck
echo "Checking shell scripts..."
ci/scripts/run-shellcheck.sh || {
echo -n "##vso[task.logissue type=error]"
echo "Shellcheck failed. Run ci/scripts/run-shellcheck.sh to see errors."
exit 1
}
displayName: shellcheck
- bash: ci/scripts/include-guard.sh $SYSTEM_PULLREQUEST_TARGETBRANCH
condition: eq(variables['Build.Reason'], 'PullRequest')
displayName: Header guards
# Check formatting on header guards
- bash: ci/scripts/whitespace.sh $SYSTEM_PULLREQUEST_TARGETBRANCH
condition: eq(variables['Build.Reason'], 'PullRequest')
displayName: Check trailing whitespace
- bash: ci/scripts/build-docs.sh
displayName: Render documentation
- bash: ci/scripts/get-build-type.sh "$SYSTEM_PULLREQUEST_TARGETBRANCH" "$(Build.Reason)"
displayName: Type of change
# Check what kinds of changes the PR contains
name: DetermineBuildType
- bash: ci/scripts/check-no-bazelrc-site.sh
condition: eq(variables['Build.Reason'], 'PullRequest')
displayName: Confirm no .bazelrc-site files
- job: airgapped_bazel_build
displayName: Test an airgapped Bazel build
timeoutInMinutes: 90
dependsOn: checkout
condition: eq(variables['Build.Reason'], 'PullRequest')
pool:
vmImage: ubuntu-20.04
steps:
- template: ci/checkout-template.yml
- template: ci/install-package-dependencies.yml
- bash: ci/scripts/test-airgapped-build.sh
- job: slow_lints
displayName: Quality (in-depth lint)
# Run code quality checks (in-depth lint)
dependsOn: lint
pool:
vmImage: ubuntu-20.04
steps:
- template: ci/checkout-template.yml
- template: ci/install-package-dependencies.yml
# Bazel test suites are a common cause of problematic tags. Check test suites
# before checking for other tag issues.
- bash: ci/scripts/check_bazel_test_suites.py
displayName: Check Bazel test suites (Experimental)
continueOnError: True
- bash: ci/scripts/check-bazel-tags.sh
displayName: Check Bazel Tags (Experimental)
continueOnError: True
- bash: ci/scripts/check-bazel-banned-rules.sh
displayName: Check for banned rules
- bash: ci/scripts/check_bazel_target_names.py
displayName: Check Bazel target names (Experimental)
continueOnError: True
- bash: ci/scripts/check-generated.sh
displayName: Check Generated
# Ensure all generated files are clean and up-to-date
- bash: ci/bazelisk.sh test //quality:buildifier_check --test_output=streamed
displayName: Buildifier (Bazel lint)
- bash: ci/scripts/check-vendoring.sh
displayName: Vendored directories
- bash: ci/scripts/verible-lint.sh rtl
condition: eq(variables['Build.Reason'], 'PullRequest')
displayName: Verible RTL (Verilog lint)
- bash: ci/scripts/verible-lint.sh dv
condition: eq(variables['Build.Reason'], 'PullRequest')
displayName: Verible DV (Verilog lint)
- bash: ci/scripts/verible-lint.sh fpv
condition: eq(variables['Build.Reason'], 'PullRequest')
displayName: Verible FPV (Verilog lint)
- job: sw_build
displayName: Earl Grey SW Build & Test
# Build and test Software for Earl Grey toplevel design
timeoutInMinutes: 180
dependsOn: lint
condition: and(succeeded(), eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0'), eq(dependencies.lint.outputs['DetermineBuildType.onlyCdcChanges'], '0'))
pool: ci-public-general
variables:
- name: bazelCacheGcpKeyPath
value: ''
steps:
- template: ci/checkout-template.yml
- template: ci/install-package-dependencies.yml
- task: DownloadSecureFile@1
condition: eq(variables['Build.SourceBranchName'], 'master')
name: bazelCacheGcpKey
inputs:
secureFile: "bazel_cache_gcp_key.json"
- bash: echo "##vso[task.setvariable variable=bazelCacheGcpKeyPath]$(bazelCacheGcpKey.secureFilePath)"
condition: eq(variables['Build.SourceBranchName'], 'master')
displayName: GCP key path
# Set the remote cache GCP key path
- bash: |
set -x -e
# This command builds all software and runs all unit tests that run on the
# host, with a few exceptions:
# * It excludes //quality because that's the purview of `slow_lints`.
# * It excludes the tests from //third_party/riscv-compliance because
# they're already covered by `execute_fpga_tests_cw310`.
# * It excludes //hw:all to avoid building Verilator, which is pulled in
# because //... effectively asks to build //hw:verilator_real and other
# targets in //hw:all that depend on it. Note that this is only a
# shallow exclusion; tests deeper under //hw will still be found.
# * It excludes targets that depend on bitstream_splice rules, since the
# environment does not have access to Vivado.
export GCP_BAZEL_CACHE_KEY=$(bazelCacheGcpKeyPath)
TARGET_PATTERN_FILE=$(mktemp)
echo //... > "${TARGET_PATTERN_FILE}"
echo -//quality/... >> "${TARGET_PATTERN_FILE}"
echo -//third_party/riscv-compliance/... >> "${TARGET_PATTERN_FILE}"
echo -//hw:all >> "${TARGET_PATTERN_FILE}"
./bazelisk.sh cquery \
--noinclude_aspects \
--output=starlark \
--starlark:expr='"-{}".format(target.label)' \
--define DISABLE_VERILATOR_BUILD=true \
-- "rdeps(//..., kind(bitstream_splice, //...))" \
>> "${TARGET_PATTERN_FILE}"
ci/bazelisk.sh test \
--build_tests_only=false \
--test_output=errors \
--define DISABLE_VERILATOR_BUILD=true \
--test_tag_filters=-broken,-cw310,-verilator,-dv \
--target_pattern_file="${TARGET_PATTERN_FILE}"
displayName: Build & test SW
- bash: |
set -x -e
. util/build_consts.sh
# copy the rom to a specific location
ROM_TARGET=${BIN_DIR}/sw/device/silicon_creator/rom
mkdir -p ${ROM_TARGET}
ROM=$(ci/scripts/target-location.sh //sw/device/silicon_creator/rom:rom_with_fake_keys_fpga_cw310_scr_vmem)
cp $ROM $ROM_TARGET/rom_with_fake_keys_fpga_cw310.scr.39.vmem
ROM_DIR=$(dirname $ROM)
cp $ROM_DIR/rom_with_fake_keys_fpga_cw310.elf $ROM_TARGET/rom_with_fake_keys_fpga_cw310.elf
cp $ROM_DIR/rom_with_fake_keys_fpga_cw310.bin $ROM_TARGET/rom_with_fake_keys_fpga_cw310.bin
- template: ci/upload-artifacts-template.yml
parameters:
includePatterns:
- "/sw/***"
- job: chip_englishbreakfast_verilator
displayName: Verilated English Breakfast (Build)
# Build Verilator simulation of the English Breakfast toplevel design
dependsOn: lint
condition: and(succeeded(), eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0'), eq(dependencies.lint.outputs['DetermineBuildType.onlyCdcChanges'], '0'))
pool:
vmImage: ubuntu-20.04
steps:
- template: ci/checkout-template.yml
- template: ci/install-package-dependencies.yml
- bash: |
python3 --version
fusesoc --version
verilator --version
verible-verilog-lint --version
displayName: Display environment
- bash: ci/scripts/build-chip-verilator.sh englishbreakfast
displayName: Build simulation with Verilator
- template: ci/upload-artifacts-template.yml
parameters:
includePatterns:
- "/hw/top_englishbreakfast/Vchip_englishbreakfast_verilator"
- job: execute_verilated_tests
displayName: Fast Verilated Earl Grey tests
# Build and run fast tests on sim_verilator
pool: ci-public
timeoutInMinutes: 180
dependsOn: lint
steps:
- template: ci/checkout-template.yml
- template: ci/install-package-dependencies.yml
- task: DownloadSecureFile@1
condition: eq(variables['Build.SourceBranchName'], 'master')
name: bazelCacheGcpKey
inputs:
secureFile: "bazel_cache_gcp_key.json"
- bash: echo "##vso[task.setvariable variable=bazelCacheGcpKeyPath]$(bazelCacheGcpKey.secureFilePath)"
condition: eq(variables['Build.SourceBranchName'], 'master')
displayName: GCP key path
# Set the remote cache GCP key path
- bash: |
set -x -e
export GCP_BAZEL_CACHE_KEY=$(bazelCacheGcpKeyPath)
ci/scripts/run-verilator-tests.sh
displayName: Build & execute tests
# TODO: build and cache the verilator model to avoid building twice (#12574)
- bash: |
. util/build_consts.sh
mkdir -p "$BIN_DIR/hw/top_earlgrey/"
cp $(ci/scripts/target-location.sh //hw:verilator) \
"$BIN_DIR/hw/top_earlgrey/Vchip_earlgrey_verilator"
displayName: Copy //hw:verilator to $BIN_DIR
- template: ci/upload-artifacts-template.yml
parameters:
includePatterns:
- "/hw/top_earlgrey/Vchip_earlgrey_verilator"
# Software targeting the English Breakfast top level is produced by patching
# the source tree before building. This builds a selected subset of software
# only.
# TODO: This is a rather ugly hack, which will go away once we properly support
# building more than one top-level design with different parametrizations.
# Work towards this goal is tracked in issue #4669.
- job: build_and_execute_verilated_tests_englishbreakfast
displayName: Verilated English Breakfast (Execute)
# Build and execute tests on the Verilated English Breakfast toplevel design with Bazel
pool:
vmImage: ubuntu-20.04
dependsOn: chip_englishbreakfast_verilator
steps:
- template: ci/checkout-template.yml
- template: ci/install-package-dependencies.yml
- template: ci/download-artifacts-template.yml
parameters:
downloadPartialBuildBinFrom:
- chip_englishbreakfast_verilator
- bash: |
. util/build_consts.sh
ci/scripts/run-english-breakfast-verilator-tests.sh
displayName: Execute tests
- bash: |
. util/build_consts.sh
mkdir -p "$BIN_DIR/sw/device/lib/testing/test_rom"
cp $(ci/scripts/target-location.sh //sw/device/lib/testing/test_rom:test_rom_fpga_cw305_vmem) \
"$BIN_DIR/sw/device/lib/testing/test_rom"
displayName: Copy test_rom_fpga_cw305_vmem to $BIN_DIR
- template: ci/upload-artifacts-template.yml
parameters:
includePatterns:
- "/sw/device/lib/testing/test_rom/test_rom_fpga_cw305.32.vmem"
- job: otbn_standalone_tests
displayName: Run OTBN Smoke Test
dependsOn: lint
condition: and(succeeded(), eq(dependencies.lint.outputs['DetermineBuildType.onlyCdcChanges'], '0'))
pool:
vmImage: ubuntu-20.04
timeoutInMinutes: 10
steps:
- template: ci/checkout-template.yml
- template: ci/install-package-dependencies.yml
- bash: |
set -x
sudo util/get-toolchain.py \
--install-dir="$TOOLCHAIN_PATH" \
--release-version="$TOOLCHAIN_VERSION" \
--update
echo "##vso[task.prependpath]$TOOLCHAIN_PATH/bin"
displayName: Install toolchain
- bash: |
python3 --version
fusesoc --version
verilator --version
displayName: Display environment
- bash: |
make -C hw/ip/otbn/dv/otbnsim test
displayName: OTBN ISS Test
- bash: |
./hw/ip/otbn/dv/smoke/run_smoke.sh
displayName: OTBN Smoke Test
- bash: |
make -C hw/ip/otbn/util asm-check
displayName: Assemble & link code snippets
- job: chip_earlgrey_cw310
displayName: CW310's Earl Grey Bitstream
# Build CW310 variant of the Earl Grey toplevel design using Vivado
dependsOn:
- lint
condition: and(succeeded(), eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0'), eq(dependencies.lint.outputs['DetermineBuildType.onlyDvChanges'], '0'), eq(dependencies.lint.outputs['DetermineBuildType.onlyCdcChanges'], '0'))
pool: ci-public-eda
timeoutInMinutes: 240
steps:
- template: ci/checkout-template.yml
- template: ci/install-package-dependencies.yml
- bash: |
ci/scripts/get-bitstream-strategy.sh "@bitstreams//:chip_earlgrey_cw310_bitstream" ':!/sw/' ':!/*testplan.hjson' ':!/site/' ':!/doc/' ':!/COMMITTERS' ':!/CLA' ':!/*.md' ':!/hw/**/dv/*'
displayName: Configure bitstream strategy
- bash: |
set -ex
module load "xilinx/vivado/$(VIVADO_VERSION)"
ci/scripts/prepare-cached-bitstream.sh
condition: eq(variables.bitstreamStrategy, 'cached')
displayName: Splice cached bitstream
- bash: |
set -ex
trap 'get_logs' EXIT
get_logs() {
SUB_PATH="hw/top_earlgrey"
mkdir -p "$OBJ_DIR/$SUB_PATH" "$BIN_DIR/$SUB_PATH"
cp -rLvt "$OBJ_DIR/$SUB_PATH/" \
$($REPO_TOP/bazelisk.sh outquery-all //hw/bitstream/vivado:fpga_cw310)
cp -rLvt "$BIN_DIR/$SUB_PATH/" \
$($REPO_TOP/bazelisk.sh outquery-all //hw/bitstream/vivado:standard)
# Rename bitstreams to be compatible with subsequent steps
# TODO(#13807): replace this after choosing a naming scheme
mv "$BIN_DIR/$SUB_PATH/lowrisc_systems_chip_earlgrey_cw310_0.1.bit" "$BIN_DIR/$SUB_PATH/lowrisc_systems_chip_earlgrey_cw310_0.1.bit.orig"
}
. util/build_consts.sh
module load "xilinx/vivado/$(VIVADO_VERSION)"
ci/bazelisk.sh build //hw/bitstream/vivado:standard
condition: ne(variables.bitstreamStrategy, 'cached')
displayName: Build and splice bitstream with Vivado
- bash: |
. util/build_consts.sh
echo "Synthesis log"
cat $OBJ_DIR/hw/top_earlgrey/build.fpga_cw310/synth-vivado/lowrisc_systems_chip_earlgrey_cw310_0.1.runs/synth_1/runme.log || true
echo "Implementation log"
cat $OBJ_DIR/hw/top_earlgrey/build.fpga_cw310/synth-vivado/lowrisc_systems_chip_earlgrey_cw310_0.1.runs/impl_1/runme.log || true
condition: ne(variables.bitstreamStrategy, 'cached')
displayName: Display synthesis & implementation logs
- template: ci/upload-artifacts-template.yml
parameters:
includePatterns:
- "/hw/***"
- publish: "$(Build.ArtifactStagingDirectory)"
artifact: chip_earlgrey_cw310-build-out
displayName: Upload artifacts for CW310
condition: failed()
- job: chip_earlgrey_cw310_hyperdebug
displayName: CW310's Earl Grey Bitstream for Hyperdebug
# Build CW310-hyperdebug variant of the Earl Grey toplevel design using Vivado
dependsOn:
- lint
condition: and(succeeded(), eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0'), eq(dependencies.lint.outputs['DetermineBuildType.onlyDvChanges'], '0'), eq(dependencies.lint.outputs['DetermineBuildType.onlyCdcChanges'], '0'), eq(variables['Build.SourceBranchName'], 'master'))
pool: ci-public-eda
timeoutInMinutes: 240
steps:
- template: ci/checkout-template.yml
- template: ci/install-package-dependencies.yml
- bash: |
set -ex
trap 'get_logs' EXIT
get_logs() {
mkdir -p $OBJ_DIR/hw/top_earlgrey/chip_earlgrey_cw310_hyperdebug/
mkdir -p $BIN_DIR/hw/top_earlgrey/chip_earlgrey_cw310_hyperdebug/
cp -rLvt $OBJ_DIR/hw/top_earlgrey/chip_earlgrey_cw310_hyperdebug/ \
$($REPO_TOP/bazelisk.sh outquery-all //hw/bitstream/vivado:fpga_cw310_hyperdebug)
cp -rLvt $BIN_DIR/hw/top_earlgrey/chip_earlgrey_cw310_hyperdebug/ \
$($REPO_TOP/bazelisk.sh outquery-all //hw/bitstream/vivado:hyperdebug)
}
. util/build_consts.sh
module load "xilinx/vivado/$(VIVADO_VERSION)"
ci/bazelisk.sh build //hw/bitstream/vivado:fpga_cw310_hyperdebug
displayName: Build bitstream with Vivado
- bash: |
. util/build_consts.sh
echo "Synthesis log"
cat $OBJ_DIR/hw/top_earlgrey/chip_earlgrey_cw310_hyperdebug/build.fpga_cw310_hyperdebug/synth-vivado/lowrisc_systems_chip_earlgrey_cw310_hyperdebug_0.1.runs/synth_1/runme.log || true
echo "Implementation log"
cat $OBJ_DIR/hw/top_earlgrey/chip_earlgrey_cw310_hyperdebug/build.fpga_cw310_hyperdebug/synth-vivado/lowrisc_systems_chip_earlgrey_cw310_hyperdebug_0.1.runs/impl_1/runme.log || true
displayName: Display synthesis & implementation logs
condition: succeededOrFailed()
- template: ci/upload-artifacts-template.yml
parameters:
includePatterns:
- "/hw/***"
- publish: "$(Build.ArtifactStagingDirectory)"
artifact: chip_earlgrey_cw310_hyperdebug-build-out
displayName: Upload artifacts for CW310
condition: failed()
- job: chip_englishbreakfast_cw305
displayName: CW305's Bitstream
# Build CW305 variant of the English Breakfast toplevel design using Vivado
dependsOn: build_and_execute_verilated_tests_englishbreakfast
condition: and(succeeded(), eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0'), eq(dependencies.lint.outputs['DetermineBuildType.onlyDvChanges'], '0'), eq(dependencies.lint.outputs['DetermineBuildType.onlyCdcChanges'], '0'))
pool: ci-public-eda
timeoutInMinutes: 120 # 2 hours
steps:
- template: ci/checkout-template.yml
- template: ci/install-package-dependencies.yml
- template: ci/download-artifacts-template.yml
parameters:
downloadPartialBuildBinFrom:
- build_and_execute_verilated_tests_englishbreakfast
- bash: |
set -e
module load "xilinx/vivado/$(VIVADO_VERSION)"
ci/scripts/build-bitstream-vivado.sh top_englishbreakfast cw305
displayName: Build bitstream
- template: ci/upload-artifacts-template.yml
parameters:
includePatterns:
- "/hw/top_englishbreakfast/lowrisc_systems_chip_englishbreakfast_cw305_0.1.bit"
- job: cache_bitstreams
displayName: Cache bitstreams to GCP
pool:
vmImage: ubuntu-20.04
dependsOn:
- chip_earlgrey_cw310
- chip_earlgrey_cw310_hyperdebug
condition: eq(variables['Build.SourceBranchName'], 'master')
steps:
- template: ci/download-artifacts-template.yml
parameters:
downloadPartialBuildBinFrom:
- chip_earlgrey_cw310
- chip_earlgrey_cw310_hyperdebug
- bash: |
set -x
. util/build_consts.sh
- template: ci/gcp-upload-bitstream-template.yml
parameters:
parentDir: "$BIN_DIR/hw/top_earlgrey"
includeFiles:
- "lowrisc_systems_chip_earlgrey_cw310_0.1.bit.orig"
- "rom.mmi"
- "otp.mmi"
- "chip_earlgrey_cw310_hyperdebug/lowrisc_systems_chip_earlgrey_cw310_hyperdebug_0.1.bit"
- "chip_earlgrey_cw310_hyperdebug/rom.mmi"
- "chip_earlgrey_cw310_hyperdebug/otp.mmi"
gcpKeyFile: "gcpkey.json"
bucketURI: "gs://opentitan-bitstreams/master"
- job: execute_test_rom_fpga_tests_cw310
displayName: CW310 Test ROM Tests
pool: FPGA
timeoutInMinutes: 45
dependsOn:
- chip_earlgrey_cw310
- sw_build
condition: succeeded( 'chip_earlgrey_cw310', 'sw_build' )
steps:
- template: ci/checkout-template.yml
- template: ci/install-package-dependencies.yml
- template: ci/download-artifacts-template.yml
parameters:
downloadPartialBuildBinFrom:
- chip_earlgrey_cw310
- sw_build
- bash: |
set -e
. util/build_consts.sh
module load "xilinx/vivado/$(VIVADO_VERSION)"
ci/scripts/run-fpga-cw310-tests.sh cw310_test_rom,-jtag || { res=$?; echo "To reproduce failures locally, follow the instructions at https://docs.opentitan.org/doc/getting_started/setup_fpga/#reproducing-fpga-ci-failures-locally"; exit "${res}"; }
displayName: Execute tests
- job: execute_rom_fpga_jtag_tests_cw310
displayName: Experimental CW310 ROM JTAG Tests
pool: FPGA
timeoutInMinutes: 45
dependsOn:
- chip_earlgrey_cw310
- sw_build
condition: succeeded( 'chip_earlgrey_cw310', 'sw_build' )
steps:
- template: ci/checkout-template.yml
- template: ci/install-package-dependencies.yml
- template: ci/download-artifacts-template.yml
parameters:
downloadPartialBuildBinFrom:
- chip_earlgrey_cw310
- sw_build
- bash: |
set -e
. util/build_consts.sh
module load "xilinx/vivado/$(VIVADO_VERSION)"
ci/scripts/run-fpga-cw310-tests.sh jtag || { res=$?; echo "To reproduce failures locally, follow the instructions at https://docs.opentitan.org/doc/getting_started/setup_fpga/#reproducing-fpga-ci-failures-locally"; exit "${res}"; }
displayName: Execute tests
# TODO(lowRISC/opentitan#16067) Fail CI when JTAG tests fail.
continueOnError: True
- job: execute_rom_fpga_tests_cw310
displayName: CW310 ROM Tests
pool: FPGA
timeoutInMinutes: 45
dependsOn:
- chip_earlgrey_cw310
- sw_build
condition: succeeded( 'chip_earlgrey_cw310', 'sw_build' )
steps:
- template: ci/checkout-template.yml
- template: ci/install-package-dependencies.yml
- template: ci/download-artifacts-template.yml
parameters:
downloadPartialBuildBinFrom:
- chip_earlgrey_cw310
- sw_build
- bash: |
set -e
. util/build_consts.sh
module load "xilinx/vivado/$(VIVADO_VERSION)"
ci/scripts/run-fpga-cw310-tests.sh cw310_rom,-jtag || { res=$?; echo "To reproduce failures locally, follow the instructions at https://docs.opentitan.org/doc/getting_started/setup_fpga/#reproducing-fpga-ci-failures-locally"; exit "${res}"; }
displayName: Execute tests
- job: deploy_release_artifacts
displayName: Package & deploy release
pool:
vmImage: ubuntu-20.04
dependsOn:
- lint
- sw_build
- execute_verilated_tests
- chip_earlgrey_cw310
condition: and(eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0'), eq(dependencies.lint.outputs['DetermineBuildType.onlyDvChanges'], '0'), eq(dependencies.lint.outputs['DetermineBuildType.onlyCdcChanges'], '0'))
steps:
- template: ci/checkout-template.yml
- template: ci/install-package-dependencies.yml
- template: ci/download-artifacts-template.yml
parameters:
downloadPartialBuildBinFrom:
- sw_build
- execute_verilated_tests
- chip_earlgrey_cw310
- chip_englishbreakfast_verilator
- bash: |
. util/build_consts.sh
ci/scripts/make_distribution.sh
tar --list -f $BIN_DIR/opentitan-*.tar.xz
# Put the resulting tar file into a directory the |publish| step below can reference.
mkdir "$BUILD_ROOT/dist-final"
mv $BIN_DIR/opentitan-*.tar.xz "$BUILD_ROOT/dist-final"
displayName: Create final dist
- publish: $(Build.ArtifactStagingDirectory)/dist-final
artifact: opentitan-dist
displayName: Upload release
- task: GithubRelease@0
displayName: Upload to GitHub releases (only tags)
condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))
inputs:
gitHubConnection: opentitan-release-upload
repositoryName: lowrisc/opentitan
addChangeLog: false
assets: |
$(Build.ArtifactStagingDirectory)/dist-final/*
- job: build_docker_containers
displayName: "Build Docker Containers"
pool:
vmImage: ubuntu-20.04
dependsOn:
- lint
steps:
- template: ci/checkout-template.yml
- task: Docker@2
displayName: Build Developer Utility Container
continueOnError: True
inputs:
command: build
Dockerfile: ./util/container/Dockerfile
buildContext: .
- task: Docker@2
displayName: Build Documentation Builder Container
inputs:
command: build
tags: gcr.io/active-premise-257318/builder
Dockerfile: ./util/site/site-builder/builder.Dockerfile
buildContext: .
- task: Docker@2
displayName: Build Documentation Redirector Container
inputs:
command: build
Dockerfile: ./site/redirector/landing/Dockerfile
buildContext: ./site/redirector/landing