blob: 010888f18275eff2abdcf9d44d789c36c149e019 [file] [log] [blame]
Sam Elliottd2028282020-06-02 18:18:54 +01001# Copyright lowRISC contributors.
2# Licensed under the Apache License, Version 2.0, see LICENSE for details.
3# SPDX-License-Identifier: Apache-2.0
4#
lowRISC Contributors802543a2019-08-31 12:12:56 +01005# Azure Pipelines CI build configuration
6# Documentation at https://aka.ms/yaml
7
8variables:
Rupert Swarbrickdf237122021-04-20 14:43:48 +01009 #
Alphan Ulusoye2205892021-05-13 09:36:17 -040010 # If updating VERILATOR_VERSION, OPENOCD_VERSION, TOOLCHAIN_VERSION or RUST_VERSION
11 # update the definitions in util/container/Dockerfile as well.
Rupert Swarbrickdf237122021-04-20 14:43:48 +010012 #
Philipp Wagnerb27f72d2021-07-23 14:41:20 +010013 VERILATOR_VERSION: 4.210
Philipp Wagnerb02d9c82021-02-24 15:00:54 +000014 OPENOCD_VERSION: 0.11.0
Miguel Osorio88179fc2019-09-19 23:37:48 -070015 TOOLCHAIN_PATH: /opt/buildcache/riscv
Michael Schaffner6c1f1da2022-04-19 12:40:58 -070016 VERIBLE_VERSION: v0.0-2135-gb534c1fe
Jon Flatleyaa91c772022-02-16 17:00:27 -050017 RUST_VERSION: 1.58.0
Miguel Osorio88179fc2019-09-19 23:37:48 -070018 # Release tag from https://github.com/lowRISC/lowrisc-toolchains/releases
Luís Marques01b2cac2022-02-10 21:48:11 +000019 TOOLCHAIN_VERSION: 20220210-1
Miguel Young de la Sotab5be8c62019-11-20 10:01:09 -060020 # This controls where builds happen, and gets picked up by build_consts.sh.
21 BUILD_ROOT: $(Build.ArtifactStagingDirectory)
Philipp Wagnerb8b053f2021-05-25 09:26:34 +010022 VIVADO_VERSION: "2020.2"
lowRISC Contributors802543a2019-08-31 12:12:56 +010023
24trigger:
lowRISC Contributors802543a2019-08-31 12:12:56 +010025 batch: true
26 branches:
27 include:
Philipp Wagnerf565b662020-07-22 14:04:40 +010028 - "*"
Philipp Wagnerdd1706e2020-03-15 14:39:59 +000029 tags:
30 include:
31 - "*"
32pr:
33 branches:
34 include:
Philipp Wagnerf565b662020-07-22 14:04:40 +010035 - "*"
lowRISC Contributors802543a2019-08-31 12:12:56 +010036
Philipp Wagnerbd9ae432019-11-01 14:33:30 +000037jobs:
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -060038- job: lint
Sam Elliott67e30fa2020-10-06 18:08:05 +010039 displayName: Run code quality checks (quick lint)
Philipp Wagnerbd9ae432019-11-01 14:33:30 +000040 pool:
Philipp Wagner5d1450c2020-10-06 12:26:36 +010041 vmImage: ubuntu-18.04
Philipp Wagnerbd9ae432019-11-01 14:33:30 +000042 steps:
43 - bash: |
Garret Kellyf5608d02019-11-01 16:28:11 -040044 sudo apt-get remove -y clang-6.0 libclang-common-6.0-dev libclang1-6.0 libllvm6.0
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -060045 displayName: Remove existing Clang installation
46 - template: ci/install-package-dependencies.yml
Rupert Swarbrick105df012021-01-29 11:33:13 +000047 ## !!!
48 ##
49 ## The steps below here are duplicated in ci/jobs/quick-lint.sh
50 ## to allow developers to "run CI" locally. Keep them in sync.
51 ##
52 ## !!!
53 - bash: ci/scripts/show-env.sh
Philipp Wagner99862392020-07-22 13:32:34 +010054 displayName: Display environment information
Rupert Swarbrick105df012021-01-29 11:33:13 +000055 - bash: ci/scripts/lint-commits.sh $SYSTEM_PULLREQUEST_TARGETBRANCH
Philipp Wagner93cdcef2021-01-19 14:31:47 +000056 condition: eq(variables['Build.Reason'], 'PullRequest')
57 displayName: Check commit metadata
Rupert Swarbrick105df012021-01-29 11:33:13 +000058 - bash: ci/scripts/check-licence-headers.sh $SYSTEM_PULLREQUEST_TARGETBRANCH
Philipp Wagner93cdcef2021-01-19 14:31:47 +000059 condition: eq(variables['Build.Reason'], 'PullRequest')
60 displayName: Check Licence Headers
Rupert Swarbrickf0d5b0c2021-03-26 11:48:42 +000061 - bash: ci/scripts/exec-check.sh
62 condition: eq(variables['Build.Reason'], 'PullRequest')
63 displayName: Check executable bits
Rupert Swarbrick5dc62b02021-04-28 09:39:18 +010064 - bash: ci/scripts/check-ascii.sh
65 condition: eq(variables['Build.Reason'], 'PullRequest')
66 displayName: Check for non-ASCII characters in source code
Rupert Swarbrick105df012021-01-29 11:33:13 +000067 - bash: ci/scripts/python-lint.sh $SYSTEM_PULLREQUEST_TARGETBRANCH
Rupert Swarbrickfb9fdb62021-02-01 17:30:48 +000068 condition: eq(variables['Build.Reason'], 'PullRequest')
Rupert Swarbrick746f9b12021-03-26 17:19:00 +000069 displayName: Run Python lint (flake8)
Rupert Swarbrick2d70c752020-03-24 17:23:40 +000070 continueOnError: true
Rupert Swarbrick746f9b12021-03-26 17:19:00 +000071 - bash: ci/scripts/mypy.sh
72 condition: eq(variables['Build.Reason'], 'PullRequest')
73 displayName: Run Python lint (mypy)
Rupert Swarbrick105df012021-01-29 11:33:13 +000074 - bash: ci/scripts/check-generated.sh
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -060075 displayName: Ensure all generated files are clean and up-to-date
Rupert Swarbrick105df012021-01-29 11:33:13 +000076 - bash: ci/scripts/clang-format.sh $SYSTEM_PULLREQUEST_TARGETBRANCH
Philipp Wagnerbd9ae432019-11-01 14:33:30 +000077 condition: eq(variables['Build.Reason'], 'PullRequest')
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -060078 displayName: Use clang-format to check C/C++ coding style
Michał Mazureka7f3bad2022-04-22 20:35:58 +020079 - bash: ci/scripts/rust-format.sh $SYSTEM_PULLREQUEST_TARGETBRANCH
80 condition: eq(variables['Build.Reason'], 'PullRequest')
81 displayName: Use rustfmt to check Rust coding style
Rupert Swarbrick105df012021-01-29 11:33:13 +000082 - bash: ci/scripts/include-guard.sh $SYSTEM_PULLREQUEST_TARGETBRANCH
Miguel Young de la Sotab23dc8c2020-01-14 13:52:33 -050083 condition: eq(variables['Build.Reason'], 'PullRequest')
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -060084 displayName: Check formatting on header guards
Miguel Young de la Sotacf77e212022-04-21 12:03:48 -040085 - bash: ci/scripts/whitespace.sh $SYSTEM_PULLREQUEST_TARGETBRANCH
86 condition: eq(variables['Build.Reason'], 'PullRequest')
87 displayName: Check trailing whitespace
Rupert Swarbrick105df012021-01-29 11:33:13 +000088 - bash: ci/scripts/verible-lint.sh rtl
Michael Schaffnerde326062020-07-14 17:50:35 -070089 condition: eq(variables['Build.Reason'], 'PullRequest')
Michael Schaffnera94241f2020-08-03 15:50:14 -070090 displayName: Style-Lint RTL Verilog source files with Verible
Rupert Swarbrick105df012021-01-29 11:33:13 +000091 - bash: ci/scripts/verible-lint.sh dv
Michael Schaffnera94241f2020-08-03 15:50:14 -070092 condition: eq(variables['Build.Reason'], 'PullRequest')
93 displayName: Style-Lint DV Verilog source files with Verible
Philipp Wagnerd5837ab2021-10-01 16:59:49 +010094 - bash: ci/scripts/verible-lint.sh fpv
95 condition: eq(variables['Build.Reason'], 'PullRequest')
96 displayName: Style-Lint FPV Verilog source files with Verible
Rupert Swarbrick105df012021-01-29 11:33:13 +000097 - bash: ci/scripts/build-docs.sh
Philipp Wagner93cdcef2021-01-19 14:31:47 +000098 displayName: Render documentation
Rupert Swarbrick105df012021-01-29 11:33:13 +000099 - bash: ci/scripts/build-site.sh
Philipp Wagner93cdcef2021-01-19 14:31:47 +0000100 displayName: Render landing site
Rupert Swarbrickfb9fdb62021-02-01 17:30:48 +0000101 - bash: ci/scripts/get-build-type.sh "$SYSTEM_PULLREQUEST_TARGETBRANCH" "$(Build.Reason)"
Greg Chadwick99fe0642020-08-04 15:42:45 +0100102 displayName: Check what kinds of changes the PR contains
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000103 name: DetermineBuildType
Philipp Wagner1e643552019-09-04 15:39:14 +0100104
Sam Elliott67e30fa2020-10-06 18:08:05 +0100105- job: slow_lints
106 displayName: Run code quality checks (in-depth lint)
107 dependsOn: lint
108 pool:
Philipp Wagner5d1450c2020-10-06 12:26:36 +0100109 vmImage: ubuntu-18.04
Sam Elliott67e30fa2020-10-06 18:08:05 +0100110 steps:
111 - template: ci/install-package-dependencies.yml
Miguel Young de la Sota369e0272022-04-21 13:14:23 -0400112 - bash: ci/bazelisk.sh run buildifier_check
Drew Macrae932a70a2022-04-18 16:34:13 -0400113 displayName: Use buildifier to check Bazel coding style
Rupert Swarbrick2aff11b2021-02-16 17:11:37 +0000114 - bash: ci/scripts/check-vendoring.sh
Sam Elliott67e30fa2020-10-06 18:08:05 +0100115 displayName: Check vendored directories are up-to-date
116
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600117- job: sw_build
Pirmin Vogel2f42ccd2020-12-22 20:19:30 +0100118 displayName: Build Software for Earl Grey toplevel design
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000119 dependsOn: lint
Philipp Wagner9d20ee62019-11-29 14:27:28 +0000120 condition: and(succeeded(), eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0'))
Miles Dai9125a782022-04-13 11:35:09 -0400121 pool: ci-public
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000122 steps:
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600123 - template: ci/install-package-dependencies.yml
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000124 - bash: |
125 set -x
126 sudo util/get-toolchain.py \
Srikrishna Iyer98333ba2020-11-16 23:12:29 -0800127 --install-dir="$TOOLCHAIN_PATH" \
Sam Elliotteb8ace42020-06-03 17:47:55 +0100128 --release-version="$TOOLCHAIN_VERSION" \
Philipp Wagner1c514412019-11-27 14:48:47 +0000129 --update
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600130 displayName: Install toolchain
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000131 - bash: |
Miguel Young de la Sota63793572019-11-13 14:18:51 -0600132 . util/build_consts.sh
Miguel Young de la Sota4a4946d2019-11-21 10:44:18 -0600133 ./meson_init.sh -A
Miguel Young de la Sota76526c32020-01-28 10:24:41 -0500134 ninja -C "$OBJ_DIR" all
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600135 displayName: Build embedded targets
Miguel Young de la Sota9d20b3d2020-02-03 16:35:31 -0500136 - bash: |
137 . util/build_consts.sh
138 ninja -C "$OBJ_DIR" test
Sam Elliotteb8ace42020-06-03 17:47:55 +0100139 displayName: Run unit tests
140 - template: ci/upload-artifacts-template.yml
Miguel Young de la Sotab4df8602019-11-21 12:44:11 -0600141 parameters:
Philipp Wagner5aa7ed32021-02-02 18:53:36 +0000142 includePatterns:
143 - "/sw/***"
lowRISC Contributors802543a2019-08-31 12:12:56 +0100144
Greg Chadwickb045dd82022-02-15 11:29:24 +0000145- job: cw310_sw_build
146 displayName: Build Software required for CW310 FPGA synthesis
147 dependsOn: lint
148 condition: and(succeeded(), eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0'))
149 pool:
150 vmImage: ubuntu-18.04
151 steps:
152 - template: ci/install-package-dependencies.yml
153 - bash: |
154 set -x
155 sudo util/get-toolchain.py \
156 --install-dir="$TOOLCHAIN_PATH" \
157 --release-version="$TOOLCHAIN_VERSION" \
158 --update
159 displayName: Install toolchain
160 - bash: |
161 . util/build_consts.sh
162 ./meson_init.sh -A
163 ninja -C "$OBJ_DIR" \
164 sw/device/otp_img/otp_img_export_fpga_cw310 \
165 sw/device/lib/testing/test_rom/test_rom_export_fpga_cw310
166 displayName: Build embedded targets
167 - template: ci/upload-artifacts-template.yml
168 parameters:
169 includePatterns:
170 - "/sw/***"
171
Pirmin Vogel18d8e132021-08-03 14:35:29 +0200172# Software targeting the English Breakfast top level is produced by patching
173# the source tree before building. This builds a selected subset of software
174# only.
175# TODO: This is a rather ugly hack, which will go away once we properly support
176# building more than one top-level design with different parametrizations.
177# Work towards this goal is tracked in issue #4669.
178- job: sw_build_englishbreakfast
179 displayName: Build Software for English Breakfast toplevel design
180 dependsOn: lint
181 condition: and(succeeded(), eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0'))
182 pool:
183 vmImage: ubuntu-18.04
184 steps:
185 - template: ci/install-package-dependencies.yml
186 - bash: |
187 set -x
188 sudo util/get-toolchain.py \
189 --install-dir="$TOOLCHAIN_PATH" \
190 --release-version="$TOOLCHAIN_VERSION" \
191 --update
192 displayName: Install toolchain
193 - bash: |
194 . util/build_consts.sh
195 ./meson_init.sh -A
196 # Patch software.
197 ./hw/top_englishbreakfast/util/prepare_sw.py
198 # Build FPGA boot ROM and aes_serial binary for FPGA SCA.
Timothy Trippel961b2cd2021-12-14 22:28:58 +0000199 ninja -C "$OBJ_DIR" sw/device/lib/testing/test_rom/test_rom_export_fpga_nexysvideo
Pirmin Vogel18d8e132021-08-03 14:35:29 +0200200 ninja -C "$OBJ_DIR" sw/device/sca/aes_serial_export_fpga_nexysvideo
201 # Build binaries for Verilator simulation.
Timothy Trippel961b2cd2021-12-14 22:28:58 +0000202 ninja -C "$OBJ_DIR" sw/device/lib/testing/test_rom/test_rom_export_sim_verilator
Timothy Trippel0703f962021-09-02 21:08:20 +0000203 ninja -C "$OBJ_DIR" sw/device/tests/aes_smoketest_export_sim_verilator
Pirmin Vogel18d8e132021-08-03 14:35:29 +0200204 ninja -C "$OBJ_DIR" sw/device/examples/hello_world/hello_world_export_sim_verilator
205 displayName: Build embedded targets
206 - template: ci/upload-artifacts-template.yml
207 parameters:
208 includePatterns:
209 - "/sw/device/***"
210
Michael Schaffner93fe50c2021-03-31 16:25:42 -0700211- job: chip_earlgrey_verilator
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600212 displayName: Build Verilator simulation of the Earl Grey toplevel design
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000213 dependsOn: lint
Philipp Wagner9d20ee62019-11-29 14:27:28 +0000214 condition: and(succeeded(), eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0'))
Greg Chadwick424a57d2022-02-15 16:33:00 +0000215 pool: ci-public
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000216 steps:
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600217 - template: ci/install-package-dependencies.yml
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000218 - bash: |
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000219 python3 --version
220 fusesoc --version
221 verilator --version
Michael Schaffneraa193f92020-12-16 11:16:17 -0800222 verible-verilog-lint --version
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600223 displayName: Display environment
Rupert Swarbricke77e2f12021-09-03 18:09:53 +0100224 - bash: ci/scripts/build-chip-verilator.sh earlgrey
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600225 displayName: Build simulation with Verilator
226 - template: ci/upload-artifacts-template.yml
Miguel Young de la Sotab4df8602019-11-21 12:44:11 -0600227 parameters:
Philipp Wagner5aa7ed32021-02-02 18:53:36 +0000228 includePatterns:
Michael Schaffner93fe50c2021-03-31 16:25:42 -0700229 - "/hw/top_earlgrey/Vchip_earlgrey_verilator"
Philipp Wagnerf4655a12019-10-30 11:59:15 +0000230
Michael Schaffner93fe50c2021-03-31 16:25:42 -0700231- job: chip_englishbreakfast_verilator
Pirmin Vogel2f42ccd2020-12-22 20:19:30 +0100232 displayName: Build Verilator simulation of the English Breakfast toplevel design
233 dependsOn: lint
234 condition: and(succeeded(), eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0'))
235 pool:
236 vmImage: ubuntu-18.04
237 steps:
238 - template: ci/install-package-dependencies.yml
239 - bash: |
240 python3 --version
241 fusesoc --version
242 verilator --version
243 verible-verilog-lint --version
244 displayName: Display environment
Rupert Swarbricke77e2f12021-09-03 18:09:53 +0100245 - bash: ci/scripts/build-chip-verilator.sh englishbreakfast
Pirmin Vogel2f42ccd2020-12-22 20:19:30 +0100246 displayName: Build simulation with Verilator
247 - template: ci/upload-artifacts-template.yml
248 parameters:
Philipp Wagner5aa7ed32021-02-02 18:53:36 +0000249 includePatterns:
Michael Schaffner93fe50c2021-03-31 16:25:42 -0700250 - "/hw/top_englishbreakfast/Vchip_englishbreakfast_verilator"
Pirmin Vogel2f42ccd2020-12-22 20:19:30 +0100251
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600252- job: execute_verilated_tests
Alphan Ulusoya628be12021-05-14 16:24:02 -0400253 displayName: Execute tests on the Verilated system (excl. slow tests)
Philipp Wagnera4b89b92021-05-20 22:25:42 +0100254 pool: ci-public
Philipp Wagnere7d41342021-10-18 12:19:52 +0100255 timeoutInMinutes: 120
Timothy Chen7d1436d2019-12-04 17:26:14 -0800256 dependsOn:
Michael Schaffner93fe50c2021-03-31 16:25:42 -0700257 - chip_earlgrey_verilator
Timothy Chen7d1436d2019-12-04 17:26:14 -0800258 - sw_build
259 steps:
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600260 - template: ci/install-package-dependencies.yml
261 - template: ci/download-artifacts-template.yml
Philipp Wagnerbdfb9332021-02-02 18:10:06 +0000262 parameters:
263 downloadPartialBuildBinFrom:
Michael Schaffner93fe50c2021-03-31 16:25:42 -0700264 - chip_earlgrey_verilator
Philipp Wagnerbdfb9332021-02-02 18:10:06 +0000265 - sw_build
Timothy Chen7d1436d2019-12-04 17:26:14 -0800266 - bash: |
Philipp Wagner33fadd02020-09-09 19:39:25 +0100267 # Install an additional pytest dependency for result upload.
268 pip3 install pytest-azurepipelines
269
Timothy Chen7d1436d2019-12-04 17:26:14 -0800270 . util/build_consts.sh
Philipp Wagner57418e72019-12-02 21:25:27 +0000271 pytest --version
Philipp Wagner03aaf322020-09-09 19:11:44 +0100272 pytest test/systemtest/earlgrey/test_sim_verilator.py \
Alphan Ulusoya628be12021-05-14 16:24:02 -0400273 -m "not slow" \
Philipp Wagner33fadd02020-09-09 19:39:25 +0100274 --log-cli-level=DEBUG \
Alphan Ulusoya628be12021-05-14 16:24:02 -0400275 --test-run-title="Run system tests with Verilator simulation (excl. slow tests)" \
Philipp Wagner33fadd02020-09-09 19:39:25 +0100276 --napoleon-docstrings
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600277 displayName: Execute tests
Timothy Chen7d1436d2019-12-04 17:26:14 -0800278
Pirmin Vogel18d8e132021-08-03 14:35:29 +0200279- job: execute_verilated_tests_englishbreakfast
280 displayName: Execute tests on the Verilated English Breakfast toplevel design
281 pool: ci-public
282 dependsOn:
283 - chip_englishbreakfast_verilator
284 - sw_build_englishbreakfast
285 steps:
286 - template: ci/install-package-dependencies.yml
287 - template: ci/download-artifacts-template.yml
288 parameters:
289 downloadPartialBuildBinFrom:
290 - chip_englishbreakfast_verilator
291 - sw_build_englishbreakfast
292 - bash: |
293 # Install an additional pytest dependency for result upload.
294 pip3 install pytest-azurepipelines
295
296 . util/build_consts.sh
297 pytest --version
298 pytest test/systemtest/englishbreakfast/test_sim_verilator.py \
299 -m "not slow" \
300 --log-cli-level=DEBUG \
301 --test-run-title="Run English Breakfast system tests with Verilator simulation" \
302 --napoleon-docstrings
303 displayName: Execute tests
304
Greg Chadwick99fe0642020-08-04 15:42:45 +0100305- job: otbn_standalone_tests
306 displayName: Run OTBN Smoke Test
307 dependsOn: lint
Philipp Wagner8d3e5632020-08-19 14:31:39 +0100308 pool:
Philipp Wagner5d1450c2020-10-06 12:26:36 +0100309 vmImage: ubuntu-18.04
Philipp Wagnerbf0ab0a2020-12-15 12:03:42 +0000310 timeoutInMinutes: 10
Greg Chadwick99fe0642020-08-04 15:42:45 +0100311 steps:
312 - template: ci/install-package-dependencies.yml
313 - bash: |
314 set -x
315 sudo util/get-toolchain.py \
Srikrishna Iyer98333ba2020-11-16 23:12:29 -0800316 --install-dir="$TOOLCHAIN_PATH" \
Greg Chadwick99fe0642020-08-04 15:42:45 +0100317 --release-version="$TOOLCHAIN_VERSION" \
318 --update
Rupert Swarbrick54278382020-08-25 12:45:47 +0100319 echo "##vso[task.prependpath]$TOOLCHAIN_PATH/bin"
Greg Chadwick99fe0642020-08-04 15:42:45 +0100320 displayName: Install toolchain
321 - bash: |
Greg Chadwick99fe0642020-08-04 15:42:45 +0100322 python3 --version
323 fusesoc --version
324 verilator --version
325 displayName: Display environment
326 - bash: |
Rupert Swarbrick7bd2a372020-10-02 12:36:12 +0100327 make -C hw/ip/otbn/dv/otbnsim test
328 displayName: OTBN ISS Test
329 - bash: |
Greg Chadwick99fe0642020-08-04 15:42:45 +0100330 ./hw/ip/otbn/dv/smoke/run_smoke.sh
331 displayName: OTBN Smoke Test
Rupert Swarbrick54278382020-08-25 12:45:47 +0100332 - bash: |
Rupert Swarbrick7087ed82020-11-13 18:16:46 +0000333 make -C hw/ip/otbn/util asm-check
Rupert Swarbrick54278382020-08-25 12:45:47 +0100334 displayName: Assemble and link code snippets
Greg Chadwick99fe0642020-08-04 15:42:45 +0100335
Pirmin Vogelad2afea2021-05-20 10:43:40 +0200336- job: chip_earlgrey_cw310
337 displayName: Build CW310 variant of the Earl Grey toplevel design using Vivado
338 dependsOn:
339 - lint
340 # The bootrom is built into the FPGA image at synthesis time.
Greg Chadwickb045dd82022-02-15 11:29:24 +0000341 - cw310_sw_build
Pirmin Vogelad2afea2021-05-20 10:43:40 +0200342 condition: and(succeeded(), eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0'), eq(dependencies.lint.outputs['DetermineBuildType.onlyDvChanges'], '0'))
343 pool: ci-public
344 timeoutInMinutes: 120 # 2 hours
345 steps:
346 - template: ci/install-package-dependencies.yml
347 - template: ci/download-artifacts-template.yml
348 parameters:
349 downloadPartialBuildBinFrom:
Greg Chadwickb045dd82022-02-15 11:29:24 +0000350 - cw310_sw_build
Pirmin Vogelad2afea2021-05-20 10:43:40 +0200351 - bash: |
352 set -e
Pirmin Vogelad2afea2021-05-20 10:43:40 +0200353 module load "xilinx/vivado/$(VIVADO_VERSION)"
Rupert Swarbrickd9b83ce2022-04-07 14:27:59 +0100354 ci/scripts/build-bitstream-vivado.sh top_earlgrey cw310
Pirmin Vogelad2afea2021-05-20 10:43:40 +0200355 displayName: Build bitstream with Vivado
356 - bash: |
357 . util/build_consts.sh
358 echo Synthesis log
359 cat $OBJ_DIR/hw/synth-vivado/lowrisc_systems_chip_earlgrey_cw310_0.1.runs/synth_1/runme.log || true
360
361 echo Implementation log
362 cat $OBJ_DIR/hw/synth-vivado/lowrisc_systems_chip_earlgrey_cw310_0.1.runs/impl_1/runme.log || true
363 condition: always()
364 displayName: Display synthesis and implementation logs
365 - template: ci/upload-artifacts-template.yml
366 parameters:
367 includePatterns:
Miguel Osorio45e08ff2021-11-30 20:39:32 -0800368 - "/hw/***"
Philipp Wagner9b37c342021-02-01 16:21:38 +0000369 - publish: "$(Build.ArtifactStagingDirectory)"
370 artifact: chip_earlgrey_cw310-build-out
371 displayName: Upload all Vivado artifacts for CW310
372 condition: failed()
Pirmin Vogelad2afea2021-05-20 10:43:40 +0200373
Miguel Osorio45e08ff2021-11-30 20:39:32 -0800374- job: chip_earlgrey_cw310_splice_mask_rom
375 displayName: Splice mask ROM binary into CW310 bitstream using Vivado
376 dependsOn:
377 - chip_earlgrey_cw310
378 - sw_build
379 condition: and(succeeded(), eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0'), eq(dependencies.lint.outputs['DetermineBuildType.onlyDvChanges'], '0'))
380 pool: ci-public
381 timeoutInMinutes: 10
382 steps:
383 - template: ci/install-package-dependencies.yml
384 - template: ci/download-artifacts-template.yml
385 parameters:
386 downloadPartialBuildBinFrom:
387 - chip_earlgrey_cw310
388 - sw_build
389 - bash: |
390 set -e
391 . util/build_consts.sh
392
393 module load "xilinx/vivado/$(VIVADO_VERSION)"
394
395 util/fpga/splice_rom.sh -t cw310 -T earlgrey -b PROD
396
397 displayName: Splicing bitstream with Vivado
398 - template: ci/upload-artifacts-template.yml
399 parameters:
400 includePatterns:
401 - "/hw/***"
Miles Daica6be0f2022-04-06 15:27:05 -0400402 - ${{ if eq(variables['Build.SourceBranchName'], 'master') }}:
403 - template: ci/gcp-upload-bitstream-template.yml
404 parameters:
405 parentDir: "$BIN_DIR/hw/top_earlgrey"
406 includeFiles:
407 - "lowrisc_systems_chip_earlgrey_cw310_0.1.bit.orig"
408 - "lowrisc_systems_chip_earlgrey_cw310_0.1.bit.splice"
409 gcpKeyFile: "gcpkey.json"
410 bucketURI: "gs://opentitan-bitstreams/master"
Miguel Osorio45e08ff2021-11-30 20:39:32 -0800411 - publish: "$(Build.ArtifactStagingDirectory)"
412 artifact: chip_earlgrey_cw310-splice-mask-rom-build-out
413 displayName: Upload all Vivado artifacts for CW310
414 condition: failed()
415
Michael Schaffner93fe50c2021-03-31 16:25:42 -0700416- job: chip_englishbreakfast_cw305
Pirmin Vogel2f42ccd2020-12-22 20:19:30 +0100417 displayName: Build CW305 variant of the English Breakfast toplevel design using Vivado
418 dependsOn:
419 - lint
Pirmin Vogel18d8e132021-08-03 14:35:29 +0200420 - sw_build_englishbreakfast
Timothy Chen64f6a5a2021-02-05 17:04:40 -0800421 condition: and(succeeded(), eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0'), eq(dependencies.lint.outputs['DetermineBuildType.onlyDvChanges'], '0'))
Pirmin Vogel2f42ccd2020-12-22 20:19:30 +0100422 pool: ci-public
423 timeoutInMinutes: 120 # 2 hours
424 steps:
425 - template: ci/install-package-dependencies.yml
426 - template: ci/download-artifacts-template.yml
Philipp Wagnerbdfb9332021-02-02 18:10:06 +0000427 parameters:
428 downloadPartialBuildBinFrom:
Pirmin Vogel18d8e132021-08-03 14:35:29 +0200429 - sw_build_englishbreakfast
Pirmin Vogel2f42ccd2020-12-22 20:19:30 +0100430 - bash: |
431 set -e
Pirmin Vogel2f42ccd2020-12-22 20:19:30 +0100432 module load "xilinx/vivado/$(VIVADO_VERSION)"
Rupert Swarbrickd9b83ce2022-04-07 14:27:59 +0100433 ci/scripts/build-bitstream-vivado.sh top_englishbreakfast cw305
Pirmin Vogel2f42ccd2020-12-22 20:19:30 +0100434 displayName: Build bitstream with Vivado
435 - template: ci/upload-artifacts-template.yml
436 parameters:
Philipp Wagner5aa7ed32021-02-02 18:53:36 +0000437 includePatterns:
Michael Schaffner93fe50c2021-03-31 16:25:42 -0700438 - "/hw/top_englishbreakfast/lowrisc_systems_chip_englishbreakfast_cw305_0.1.bit"
Pirmin Vogel2f42ccd2020-12-22 20:19:30 +0100439
Pirmin Vogelad2afea2021-05-20 10:43:40 +0200440- job: execute_fpga_tests_cw310
441 displayName: Execute tests on ChipWhisperer CW310 FPGA board
442 pool: FPGA
Miles Daid6691ca2022-04-13 11:28:05 -0400443 timeoutInMinutes: 8
Pirmin Vogelad2afea2021-05-20 10:43:40 +0200444 dependsOn:
445 - chip_earlgrey_cw310
Pirmin Vogelad2afea2021-05-20 10:43:40 +0200446 - sw_build
447 steps:
448 - template: ci/install-package-dependencies.yml
449 - template: ci/download-artifacts-template.yml
450 parameters:
451 downloadPartialBuildBinFrom:
452 - chip_earlgrey_cw310
Pirmin Vogelad2afea2021-05-20 10:43:40 +0200453 - sw_build
454 - bash: |
455 set -e
456
457 # Install an additional pytest dependency for result upload.
458 pip3 install pytest-azurepipelines
459
460 . util/build_consts.sh
461 pytest --version
462 pytest test/systemtest/earlgrey/test_fpga_cw310.py \
463 --log-cli-level=DEBUG \
464 --test-run-title="Run system tests on ChipWhisperer CW310 FPGA board" \
465 --napoleon-docstrings
466 displayName: Execute tests
467
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600468- job: deploy_release_artifacts
469 displayName: Package and deploy release distribution
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000470 pool:
Philipp Wagner5d1450c2020-10-06 12:26:36 +0100471 vmImage: ubuntu-18.04
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000472 dependsOn:
473 - lint
Miguel Young de la Sotab5be8c62019-11-20 10:01:09 -0600474 - sw_build
Michael Schaffner93fe50c2021-03-31 16:25:42 -0700475 - chip_earlgrey_verilator
Philipp Wagnera0a35a52021-08-04 16:39:35 +0100476 - chip_earlgrey_cw310
Timothy Chen64f6a5a2021-02-05 17:04:40 -0800477 condition: and(eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0'), eq(dependencies.lint.outputs['DetermineBuildType.onlyDvChanges'], '0'))
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000478 steps:
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600479 - template: ci/install-package-dependencies.yml
480 - template: ci/download-artifacts-template.yml
Philipp Wagnerbdfb9332021-02-02 18:10:06 +0000481 parameters:
482 downloadPartialBuildBinFrom:
483 - sw_build
Michael Schaffner93fe50c2021-03-31 16:25:42 -0700484 - chip_earlgrey_verilator
Philipp Wagnera0a35a52021-08-04 16:39:35 +0100485 - chip_earlgrey_cw310
Michael Schaffner93fe50c2021-03-31 16:25:42 -0700486 - chip_englishbreakfast_verilator
Miguel Young de la Sotad42948c2019-11-18 13:56:55 -0600487 - bash: |
Miguel Young de la Sotad42948c2019-11-18 13:56:55 -0600488 . util/build_consts.sh
Miguel Young de la Sotab5be8c62019-11-20 10:01:09 -0600489
Miguel Young de la Sotad42948c2019-11-18 13:56:55 -0600490 util/make_distribution.sh
Philipp Wagner542e2202019-10-30 13:10:16 +0000491
Miguel Young de la Sotad42948c2019-11-18 13:56:55 -0600492 tar --list -f $BIN_DIR/opentitan-*.tar.xz
493 # Put the resulting tar file into a directory the |publish| step below can reference.
494 mkdir "$BUILD_ROOT/dist-final"
495 mv $BIN_DIR/opentitan-*.tar.xz "$BUILD_ROOT/dist-final"
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600496 displayName: Create final dist directory out of partial ones
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000497 - publish: $(Build.ArtifactStagingDirectory)/dist-final
498 artifact: opentitan-dist
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600499 displayName: Upload release artifacts as Azure artifact
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000500 - task: GithubRelease@0
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600501 displayName: Upload to GitHub releases (only tags)
Philipp Wagner0b20f5d2019-11-01 16:24:52 +0000502 condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000503 inputs:
504 gitHubConnection: opentitan-release-upload
505 repositoryName: lowrisc/opentitan
506 addChangeLog: false
507 assets: |
508 $(Build.ArtifactStagingDirectory)/dist-final/*
Sam Elliotte257cd02020-09-10 13:49:38 +0100509
510
511- job: build_docker_containers
512 displayName: "Build Docker Containers"
513 pool:
Philipp Wagner5d1450c2020-10-06 12:26:36 +0100514 vmImage: ubuntu-18.04
Sam Elliotte257cd02020-09-10 13:49:38 +0100515 dependsOn:
516 - lint
517 steps:
518 - task: Docker@2
519 displayName: Build Developer Utility Container
520 inputs:
521 command: build
522 Dockerfile: ./util/container/Dockerfile
523 buildContext: .
524 - task: Docker@2
525 displayName: Build Documentation Builder Container
526 inputs:
527 command: build
528 tags: gcr.io/active-premise-257318/builder
529 Dockerfile: ./site/docs/builder.Dockerfile
530 buildContext: .
531 - task: Docker@2
532 displayName: Build Documentation Redirector Container
533 inputs:
534 command: build
535 Dockerfile: ./site/redirector/Dockerfile
536 buildContext: ./site/redirector
Drew Macrae8a358142022-01-26 07:20:04 -0800537
Drew Macraeb90a49c2022-04-05 12:17:49 -0400538- job: bazel_test
539 displayName: Bazel Software Build and Test
Miles Dai28acbee2022-04-22 16:52:17 -0400540 timeoutInMinutes: 120
Drew Macraeb90a49c2022-04-05 12:17:49 -0400541 dependsOn: lint
542 pool:
543 vmImage: ubuntu-18.04
Miles Dai1c42d292022-04-16 00:33:23 -0400544 variables:
545 - name: bazelCacheGcpKeyPath
546 value: ''
Drew Macraeb90a49c2022-04-05 12:17:49 -0400547 steps:
548 - template: ci/install-package-dependencies.yml
Miles Dai1c42d292022-04-16 00:33:23 -0400549 - task: DownloadSecureFile@1
550 condition: eq(variables['Build.SourceBranchName'], 'master')
551 name: bazelCacheGcpKey
552 inputs:
553 secureFile: "bazel_cache_gcp_key.json"
554 - bash: echo "##vso[task.setvariable variable=bazelCacheGcpKeyPath]$(bazelCacheGcpKey.secureFilePath)"
555 condition: eq(variables['Build.SourceBranchName'], 'master')
556 displayName: Set the remote cache GCP key path
Miguel Young de la Sota369e0272022-04-21 13:14:23 -0400557 - bash: |
558 # This command builds all software and runs all unit tests that run on
559 # the host.
560 export GCP_BAZEL_CACHE_KEY=$(bazelCacheGcpKeyPath)
561 ci/bazelisk.sh test \
562 --build_tests_only=false \
Miguel Young de la Sota634aceb2022-04-21 13:38:37 -0400563 --define DISABLE_VERILATOR_BUILD=true \
Miguel Young de la Sota369e0272022-04-21 13:14:23 -0400564 --test_tag_filters=-broken,-cw310,-verilator,-dv \
565 //sw/...
566 displayName: "Build and Unit Test Software with Bazel"