Sam Elliott | d202828 | 2020-06-02 18:18:54 +0100 | [diff] [blame] | 1 | # 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 Contributors | 802543a | 2019-08-31 12:12:56 +0100 | [diff] [blame] | 5 | # Azure Pipelines CI build configuration |
| 6 | # Documentation at https://aka.ms/yaml |
| 7 | |
| 8 | variables: |
Pirmin Vogel | eaf8b4b | 2020-03-03 14:51:03 +0100 | [diff] [blame] | 9 | VERILATOR_VERSION: 4.028 |
lowRISC Contributors | 802543a | 2019-08-31 12:12:56 +0100 | [diff] [blame] | 10 | VERILATOR_PATH: /opt/buildcache/verilator/$(VERILATOR_VERSION) |
Miguel Osorio | 88179fc | 2019-09-19 23:37:48 -0700 | [diff] [blame] | 11 | TOOLCHAIN_PATH: /opt/buildcache/riscv |
Michael Schaffner | de32606 | 2020-07-14 17:50:35 -0700 | [diff] [blame] | 12 | VERIBLE_VERSION: v0.0-469-gb458ff6 |
Miguel Osorio | 88179fc | 2019-09-19 23:37:48 -0700 | [diff] [blame] | 13 | # Release tag from https://github.com/lowRISC/lowrisc-toolchains/releases |
Sam Elliott | 0088155 | 2020-05-04 16:46:55 +0100 | [diff] [blame] | 14 | # if you update this, update the definition in util/container/Dockerfile |
Luís Marques | 5849cd1 | 2020-06-26 10:33:55 +0100 | [diff] [blame] | 15 | TOOLCHAIN_VERSION: 20200626-1 |
Miguel Young de la Sota | b5be8c6 | 2019-11-20 10:01:09 -0600 | [diff] [blame] | 16 | # This controls where builds happen, and gets picked up by build_consts.sh. |
| 17 | BUILD_ROOT: $(Build.ArtifactStagingDirectory) |
lowRISC Contributors | 802543a | 2019-08-31 12:12:56 +0100 | [diff] [blame] | 18 | |
| 19 | trigger: |
lowRISC Contributors | 802543a | 2019-08-31 12:12:56 +0100 | [diff] [blame] | 20 | batch: true |
| 21 | branches: |
| 22 | include: |
Philipp Wagner | f565b66 | 2020-07-22 14:04:40 +0100 | [diff] [blame] | 23 | - "*" |
Philipp Wagner | dd1706e | 2020-03-15 14:39:59 +0000 | [diff] [blame] | 24 | tags: |
| 25 | include: |
| 26 | - "*" |
| 27 | pr: |
| 28 | branches: |
| 29 | include: |
Philipp Wagner | f565b66 | 2020-07-22 14:04:40 +0100 | [diff] [blame] | 30 | - "*" |
lowRISC Contributors | 802543a | 2019-08-31 12:12:56 +0100 | [diff] [blame] | 31 | |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 32 | jobs: |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 33 | - job: lint |
| 34 | displayName: Run code quality checks (lint) |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 35 | pool: |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 36 | vmImage: ubuntu-16.04 |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 37 | steps: |
| 38 | - bash: | |
Garret Kelly | f5608d0 | 2019-11-01 16:28:11 -0400 | [diff] [blame] | 39 | sudo apt-get remove -y clang-6.0 libclang-common-6.0-dev libclang1-6.0 libllvm6.0 |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 40 | displayName: Remove existing Clang installation |
| 41 | - template: ci/install-package-dependencies.yml |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 42 | - bash: | |
Michael Schaffner | de32606 | 2020-07-14 17:50:35 -0700 | [diff] [blame] | 43 | set -e |
| 44 | mkdir -p build/verible |
| 45 | cd build/verible |
| 46 | 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 |
| 47 | sudo mkdir -p /tools/verible && sudo chmod 777 /tools/verible |
| 48 | tar -C /tools/verible -xf verible.tar.gz --strip-components=1 |
| 49 | echo "##vso[task.setvariable variable=PATH]/tools/verible/bin:$PATH" |
| 50 | displayName: Install Verible |
| 51 | - bash: | |
Philipp Wagner | 9986239 | 2020-07-22 13:32:34 +0100 | [diff] [blame] | 52 | set -x |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 53 | python3 --version |
| 54 | yapf --version |
| 55 | isort --version |
| 56 | clang-format -version |
Rupert Swarbrick | 2d70c75 | 2020-03-24 17:23:40 +0000 | [diff] [blame] | 57 | flake8 --version |
Philipp Wagner | b52cee6 | 2020-03-30 15:40:43 +0100 | [diff] [blame] | 58 | ninja --version |
| 59 | meson --version |
Sam Elliott | b6745d3 | 2020-04-08 21:46:28 +0100 | [diff] [blame] | 60 | doxygen --version |
Greg Chadwick | fe07c7c | 2020-02-11 11:24:09 +0000 | [diff] [blame] | 61 | echo "PATH=$PATH" |
Philipp Wagner | 9986239 | 2020-07-22 13:32:34 +0100 | [diff] [blame] | 62 | printenv |
| 63 | displayName: Display environment information |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 64 | - bash: | |
Philipp Wagner | 112875b | 2020-07-22 13:52:09 +0100 | [diff] [blame] | 65 | fork_origin="$(git merge-base --fork-point origin/$SYSTEM_PULLREQUEST_TARGETBRANCH)" |
Sam Elliott | 60ff08a | 2020-07-17 17:31:02 +0100 | [diff] [blame] | 66 | changed_files="$(git diff --name-only --diff-filter=ACMRTUXB "$fork_origin" | grep -v /vendor/ | grep -v /lowrisc_misc-linters/ | grep -E '.py$')" |
| 67 | if [[ -n "$changed_files" ]]; then |
| 68 | set -e |
| 69 | xargs util/lintpy.py --tools flake8 -f <<< "$changed_files" | tee lintpy-output |
| 70 | fi |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 71 | displayName: Run Python lint |
Rupert Swarbrick | 2d70c75 | 2020-03-24 17:23:40 +0000 | [diff] [blame] | 72 | continueOnError: true |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 73 | - bash: | |
| 74 | make -C hw regs && git diff --exit-code |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 75 | if [[ $? != 0 ]]; then |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 76 | echo -n "##vso[task.logissue type=error]" |
| 77 | echo "Register headers not up-to-date. Regenerate them with 'make -C hw regs'." |
| 78 | exit 1 |
| 79 | fi |
| 80 | condition: always() |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 81 | displayName: Ensure all generated files are clean and up-to-date |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 82 | - bash: | |
Sam Elliott | 24398ab | 2020-07-17 17:02:05 +0100 | [diff] [blame] | 83 | set -e |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 84 | util/build_docs.py |
Sam Elliott | c8fa558 | 2020-04-08 21:02:05 +0100 | [diff] [blame] | 85 | # Upload Doxygen Warnings if Present |
| 86 | if [[ -f "build/docs-generated/sw/doxygen_warnings.log" ]]; then |
| 87 | echo -n "##vso[task.uploadfile]" |
| 88 | echo "${PWD}/build/docs-generated/sw/doxygen_warnings.log" |
| 89 | # Doxygen currently generates lots of warnings. |
| 90 | # echo -n "##vso[task.issue type=warning]" |
| 91 | # echo "Doxygen generated warnings. Use 'util/build_docs.py' to generate warning logfile." |
| 92 | fi |
Garret Kelly | 889bf6a | 2019-11-03 13:02:27 -0500 | [diff] [blame] | 93 | condition: always() |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 94 | displayName: Render documentation |
Garret Kelly | 889bf6a | 2019-11-03 13:02:27 -0500 | [diff] [blame] | 95 | - bash: | |
Garret Kelly | 8d7da7c | 2019-11-08 14:09:34 -0500 | [diff] [blame] | 96 | cd site/landing |
| 97 | ../../build/docs-hugo/hugo |
| 98 | condition: always() |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 99 | displayName: Render landing site |
Garret Kelly | 8d7da7c | 2019-11-08 14:09:34 -0500 | [diff] [blame] | 100 | - bash: | |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 101 | # XXX: As of today, task.logissue comments with 'sourcepath' set don't |
| 102 | # get reported to GitHub Checks annotations. Upstream bug report: |
| 103 | # https://developercommunity.visualstudio.com/content/problem/689794/pipelines-logging-command-logissue-does-not-report.html |
| 104 | #echo "##vso[task.issue type=error;sourcepath=/azure-pipelines.yml;linenumber=45;columnnumber=1;code=100;]Found something that could be a problem." |
Philipp Wagner | 112875b | 2020-07-22 13:52:09 +0100 | [diff] [blame] | 105 | fork_origin="$(git merge-base --fork-point origin/$SYSTEM_PULLREQUEST_TARGETBRANCH)" |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 106 | changed_files="$(git diff --name-only "$fork_origin" | grep -v /vendor/ | grep -E '\.(cpp|cc|c|h)$')" |
Greg Chadwick | ffa126f | 2020-04-07 11:36:31 +0100 | [diff] [blame] | 107 | if [[ -n "$changed_files" ]]; then |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 108 | xargs git diff -U0 "$fork_origin" <<< "$changed_files" \ |
| 109 | | clang-format-diff -p1 \ |
| 110 | | tee clang-format-output |
| 111 | if [[ -s clang-format-output ]]; then |
| 112 | echo -n "##vso[task.logissue type=error]" |
| 113 | echo "C/C++ lint failed. Use 'git clang-format' with appropriate options to reformat the changed code." |
| 114 | exit 1 |
| 115 | fi |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 116 | fi |
| 117 | # This check is not idempotent, but checks changes to a base branch. |
Michael Schaffner | 823a258 | 2020-05-11 15:39:15 -0700 | [diff] [blame] | 118 | # Run it only on pull requests. Note that the git diff filter (ACMRTUXB) omits |
| 119 | # files that are deleted in a PR, since those break the checker script below. |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 120 | condition: eq(variables['Build.Reason'], 'PullRequest') |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 121 | displayName: Use clang-format to check C/C++ coding style |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 122 | - bash: | |
Philipp Wagner | 112875b | 2020-07-22 13:52:09 +0100 | [diff] [blame] | 123 | fork_origin="$(git merge-base --fork-point origin/$SYSTEM_PULLREQUEST_TARGETBRANCH)" |
Michael Schaffner | 823a258 | 2020-05-11 15:39:15 -0700 | [diff] [blame] | 124 | changed_files="$(git diff --name-only --diff-filter=ACMRTUXB "$fork_origin")" |
Greg Chadwick | ffa126f | 2020-04-07 11:36:31 +0100 | [diff] [blame] | 125 | if [[ -n "$changed_files" ]]; then |
Miguel Young de la Sota | b23dc8c | 2020-01-14 13:52:33 -0500 | [diff] [blame] | 126 | xargs util/fix_include_guard.py --dry-run <<< "$changed_files" | tee fix-include-guard-output |
| 127 | if [[ -s fix-include-guard-output ]]; then |
| 128 | echo -n "##vso[task.logissue type=error]" |
| 129 | echo "Include guard check failed. Please run util/fix_include_guard.py on the above files." |
| 130 | exit 1 |
| 131 | fi |
| 132 | fi |
| 133 | condition: eq(variables['Build.Reason'], 'PullRequest') |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 134 | displayName: Check formatting on header guards |
Miguel Young de la Sota | b23dc8c | 2020-01-14 13:52:33 -0500 | [diff] [blame] | 135 | - bash: | |
Michael Schaffner | de32606 | 2020-07-14 17:50:35 -0700 | [diff] [blame] | 136 | util/dvsim/dvsim.py hw/top_earlgrey/lint/top_earlgrey_lint_cfgs.hjson \ |
| 137 | --tool=veriblelint |
| 138 | if [ $? != 0 ]; then |
| 139 | echo -n "##vso[task.logissue type=error]" |
Michael Schaffner | a94241f | 2020-08-03 15:50:14 -0700 | [diff] [blame^] | 140 | echo "Verilog style lint of RTL sources with Verible failed. Run 'util/dvsim/dvsim.py -t veriblelint hw/top_earlgrey/lint/top_earlgrey_lint_cfgs.hjson' to check and fix all errors." |
Michael Schaffner | de32606 | 2020-07-14 17:50:35 -0700 | [diff] [blame] | 141 | exit 1 |
| 142 | fi |
| 143 | condition: eq(variables['Build.Reason'], 'PullRequest') |
Michael Schaffner | a94241f | 2020-08-03 15:50:14 -0700 | [diff] [blame^] | 144 | displayName: Style-Lint RTL Verilog source files with Verible |
| 145 | - bash: | |
| 146 | util/dvsim/dvsim.py hw/top_earlgrey/lint/top_earlgrey_dv_lint_cfgs.hjson \ |
| 147 | --tool=veriblelint |
| 148 | if [ $? != 0 ]; then |
| 149 | echo -n "##vso[task.logissue type=error]" |
| 150 | echo "Verilog style lint of DV sources with Verible failed. Run 'util/dvsim/dvsim.py -t veriblelint hw/top_earlgrey/lint/top_earlgrey_dv_lint_cfgs.hjson' to check and fix all errors." |
| 151 | exit 1 |
| 152 | fi |
| 153 | condition: eq(variables['Build.Reason'], 'PullRequest') |
| 154 | displayName: Style-Lint DV Verilog source files with Verible |
Michael Schaffner | de32606 | 2020-07-14 17:50:35 -0700 | [diff] [blame] | 155 | - bash: | |
Philipp Wagner | 112875b | 2020-07-22 13:52:09 +0100 | [diff] [blame] | 156 | commit_range="$(git merge-base --fork-point origin/$SYSTEM_PULLREQUEST_TARGETBRANCH)..HEAD" |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 157 | # Notes: |
| 158 | # * Merge commits are not checked. We always use rebases instead of |
| 159 | # merges to keep a linear history, which makes merge commits disappear |
| 160 | # ultimately, making them only a CI artifact which should not be |
| 161 | # checked. |
| 162 | # * 'type=error' is used even for warnings. Only "errors" are shown in |
| 163 | # the GitHub checks API. However, warnings don't return a non-zero |
| 164 | # error code and don't fail the build step. |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 165 | util/lint_commits.py \ |
| 166 | --no-merges \ |
| 167 | --error-msg-prefix="##vso[task.logissue type=error]" \ |
| 168 | --warning-msg-prefix="##vso[task.logissue type=error]" \ |
| 169 | "$commit_range" |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 170 | # Only run on pull requests to check new commits only |
| 171 | condition: eq(variables['Build.Reason'], 'PullRequest') |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 172 | displayName: Check commit metadata |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 173 | - bash: | |
Sam Elliott | 898321f | 2020-05-28 15:26:24 +0100 | [diff] [blame] | 174 | # Here we look for all *.vendor.hjson files in the repo to re-vendor them. |
| 175 | # We exclude the following: |
| 176 | # - Any in 'hw/vendor/lowrisc_ibex', because that directory is vendored. |
| 177 | # - `./sw/vendor/riscv_compliance.vendor.hjson`, because it has whitespace |
| 178 | # issues in the repository that we cannot easily solve. |
| 179 | find . \ |
| 180 | -not \( -path './hw/vendor/lowrisc_ibex' -prune \) \ |
| 181 | -not \( -name 'riscv_compliance.vendor.hjson' \) \ |
| 182 | -name '*.vendor.hjson' \ |
| 183 | | xargs -n1 util/vendor.py --verbose \ |
| 184 | && git diff --exit-code |
| 185 | if [[ $? != 0 ]]; then |
| 186 | echo -n "##vso[task.logissue type=error]" |
| 187 | echo "Vendored repositories not up-to-date. Run util/vendor.py to fix." |
| 188 | exit 1 |
| 189 | fi |
| 190 | condition: always() |
| 191 | displayName: Check vendored directories are up-to-date |
| 192 | - bash: | |
Philipp Wagner | da48ed2 | 2020-07-22 13:33:30 +0100 | [diff] [blame] | 193 | set -e |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 194 | only_doc_changes=0 |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 195 | if [[ "$(Build.Reason)" = "PullRequest" ]]; then |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 196 | # Conservative way of checking for documentation-only changes. |
| 197 | # Only relevant for pipelines triggered from pull requests |
| 198 | echo "Checking for doc-only changes in this pull request" |
Philipp Wagner | 112875b | 2020-07-22 13:52:09 +0100 | [diff] [blame] | 199 | fork_origin="$(git merge-base --fork-point origin/$SYSTEM_PULLREQUEST_TARGETBRANCH)" |
Philipp Wagner | da48ed2 | 2020-07-22 13:33:30 +0100 | [diff] [blame] | 200 | echo "Using $fork_origin as fork point from the target branch." |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 201 | only_doc_changes="$(git diff --name-only "$fork_origin" | grep -v '\.md$' -q; echo $?)" |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 202 | fi |
| 203 | echo "##vso[task.setvariable variable=onlyDocChanges;isOutput=true]${only_doc_changes}" |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 204 | displayName: Check if the commit only contains documentation changes |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 205 | name: DetermineBuildType |
Sam Elliott | d202828 | 2020-06-02 18:18:54 +0100 | [diff] [blame] | 206 | - bash: | |
Philipp Wagner | 112875b | 2020-07-22 13:52:09 +0100 | [diff] [blame] | 207 | fork_origin="$(git merge-base --fork-point origin/$SYSTEM_PULLREQUEST_TARGETBRANCH)" |
Sam Elliott | d202828 | 2020-06-02 18:18:54 +0100 | [diff] [blame] | 208 | changed_files="$(git diff --name-only --diff-filter=ACMRTUXB "$fork_origin")" |
Rupert Swarbrick | a2d4d13 | 2020-07-20 16:23:08 +0100 | [diff] [blame] | 209 | licence_checker=util/lowrisc_misc-linters/licence-checker/licence-checker.py |
Sam Elliott | d202828 | 2020-06-02 18:18:54 +0100 | [diff] [blame] | 210 | if [[ -n "$changed_files" ]]; then |
| 211 | set -o pipefail |
Rupert Swarbrick | a2d4d13 | 2020-07-20 16:23:08 +0100 | [diff] [blame] | 212 | xargs "$licence_checker" --config util/licence-checker.hjson <<< "$changed_files" | tee licence-checker-output |
Sam Elliott | d202828 | 2020-06-02 18:18:54 +0100 | [diff] [blame] | 213 | if [[ $? != 0 ]]; then |
| 214 | echo -n "##vso[task.logissue type=error]" |
Rupert Swarbrick | a2d4d13 | 2020-07-20 16:23:08 +0100 | [diff] [blame] | 215 | echo "Licence header check failed. Please check output of $licence_checker on the noted failures." |
Sam Elliott | d202828 | 2020-06-02 18:18:54 +0100 | [diff] [blame] | 216 | exit 1 |
| 217 | fi |
| 218 | fi |
| 219 | condition: eq(variables['Build.Reason'], 'PullRequest') |
| 220 | displayName: Check Licence Headers |
Philipp Wagner | 1e64355 | 2019-09-04 15:39:14 +0100 | [diff] [blame] | 221 | |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 222 | - job: sw_build |
| 223 | displayName: Build Software |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 224 | dependsOn: lint |
Philipp Wagner | 9d20ee6 | 2019-11-29 14:27:28 +0000 | [diff] [blame] | 225 | condition: and(succeeded(), eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0')) |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 226 | pool: |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 227 | vmImage: ubuntu-16.04 |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 228 | steps: |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 229 | - template: ci/install-package-dependencies.yml |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 230 | - bash: | |
| 231 | set -x |
| 232 | sudo util/get-toolchain.py \ |
Sam Elliott | eb8ace4 | 2020-06-03 17:47:55 +0100 | [diff] [blame] | 233 | --target-dir="$TOOLCHAIN_PATH" \ |
| 234 | --release-version="$TOOLCHAIN_VERSION" \ |
Philipp Wagner | 1c51441 | 2019-11-27 14:48:47 +0000 | [diff] [blame] | 235 | --update |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 236 | displayName: Install toolchain |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 237 | - bash: | |
Miguel Young de la Sota | 6379357 | 2019-11-13 14:18:51 -0600 | [diff] [blame] | 238 | . util/build_consts.sh |
Miguel Young de la Sota | 4a4946d | 2019-11-21 10:44:18 -0600 | [diff] [blame] | 239 | ./meson_init.sh -A |
Miguel Young de la Sota | 76526c3 | 2020-01-28 10:24:41 -0500 | [diff] [blame] | 240 | ninja -C "$OBJ_DIR" all |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 241 | displayName: Build embedded targets |
Miguel Young de la Sota | 9d20b3d | 2020-02-03 16:35:31 -0500 | [diff] [blame] | 242 | - bash: | |
| 243 | . util/build_consts.sh |
| 244 | ninja -C "$OBJ_DIR" test |
Sam Elliott | eb8ace4 | 2020-06-03 17:47:55 +0100 | [diff] [blame] | 245 | displayName: Run unit tests |
| 246 | - template: ci/upload-artifacts-template.yml |
Miguel Young de la Sota | b4df860 | 2019-11-21 12:44:11 -0600 | [diff] [blame] | 247 | parameters: |
| 248 | artifact: sw_build |
lowRISC Contributors | 802543a | 2019-08-31 12:12:56 +0100 | [diff] [blame] | 249 | |
Luís Marques | 5849cd1 | 2020-06-26 10:33:55 +0100 | [diff] [blame] | 250 | # We continue building with GCC, despite defaulting to Clang. This is a copy of |
| 251 | # `sw_build` with `meson_init.sh` configured with the GCC toolchain, instead of |
| 252 | # the default toolchain. |
| 253 | - job: sw_build_gcc |
| 254 | displayName: Build Software (with GCC) |
Sam Elliott | 7a00a4b | 2020-06-03 17:48:10 +0100 | [diff] [blame] | 255 | dependsOn: lint |
| 256 | condition: and(succeeded(), eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0')) |
| 257 | pool: |
| 258 | vmImage: ubuntu-16.04 |
| 259 | steps: |
| 260 | - template: ci/install-package-dependencies.yml |
| 261 | - bash: | |
| 262 | set -x |
| 263 | sudo util/get-toolchain.py \ |
| 264 | --target-dir="$TOOLCHAIN_PATH" \ |
| 265 | --release-version="$TOOLCHAIN_VERSION" \ |
| 266 | --update |
| 267 | displayName: Install toolchain |
| 268 | - bash: | |
| 269 | . util/build_consts.sh |
| 270 | ./meson_init.sh -A \ |
Luís Marques | 5849cd1 | 2020-06-26 10:33:55 +0100 | [diff] [blame] | 271 | -t "$TOOLCHAIN_PATH/meson-riscv32-unknown-elf-gcc.txt" |
Sam Elliott | 7a00a4b | 2020-06-03 17:48:10 +0100 | [diff] [blame] | 272 | ninja -C "$OBJ_DIR" all |
| 273 | displayName: Build embedded targets |
Sam Elliott | 7a00a4b | 2020-06-03 17:48:10 +0100 | [diff] [blame] | 274 | - bash: | |
| 275 | . util/build_consts.sh |
| 276 | ninja -C "$OBJ_DIR" test |
| 277 | displayName: Run unit tests |
Sam Elliott | 7a00a4b | 2020-06-03 17:48:10 +0100 | [diff] [blame] | 278 | - template: ci/upload-artifacts-template.yml |
| 279 | parameters: |
Luís Marques | 5849cd1 | 2020-06-26 10:33:55 +0100 | [diff] [blame] | 280 | artifact: sw_build_gcc |
Sam Elliott | 7a00a4b | 2020-06-03 17:48:10 +0100 | [diff] [blame] | 281 | |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 282 | - job: top_earlgrey_verilator |
| 283 | displayName: Build Verilator simulation of the Earl Grey toplevel design |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 284 | dependsOn: lint |
Philipp Wagner | 9d20ee6 | 2019-11-29 14:27:28 +0000 | [diff] [blame] | 285 | condition: and(succeeded(), eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0')) |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 286 | pool: Default |
| 287 | steps: |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 288 | - template: ci/install-package-dependencies.yml |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 289 | - bash: | |
| 290 | set -e |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 291 | if [[ ! -d "$(VERILATOR_PATH)" ]]; then |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 292 | echo "Building verilator (no cached build found)" |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 293 | |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 294 | mkdir -p build/verilator |
| 295 | cd build/verilator |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 296 | curl -Ls -o verilator.tgz \ |
| 297 | "https://www.veripool.org/ftp/verilator-$(VERILATOR_VERSION).tgz" |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 298 | tar -xf verilator.tgz |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 299 | |
| 300 | cd "verilator-$(VERILATOR_VERSION)" |
| 301 | ./configure --prefix="$(VERILATOR_PATH)" |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 302 | make -j$(nproc) |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 303 | mkdir -p "$VERILATOR_PATH" |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 304 | make install |
| 305 | else |
| 306 | echo "Re-using cached verilator build" |
| 307 | fi |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 308 | displayName: Build and install Verilator |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 309 | - bash: | |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 310 | export PATH="$VERILATOR_PATH/bin:$PATH" |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 311 | python3 --version |
| 312 | fusesoc --version |
| 313 | verilator --version |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 314 | displayName: Display environment |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 315 | - bash: | |
Miguel Young de la Sota | b5be8c6 | 2019-11-20 10:01:09 -0600 | [diff] [blame] | 316 | . util/build_consts.sh |
| 317 | mkdir -p "$OBJ_DIR/hw" |
| 318 | mkdir -p "$BIN_DIR/hw/top_earlgrey" |
| 319 | |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 320 | export PATH="$VERILATOR_PATH/bin:$PATH" |
Miguel Young de la Sota | b5be8c6 | 2019-11-20 10:01:09 -0600 | [diff] [blame] | 321 | fusesoc --cores-root=. \ |
| 322 | run --target=sim --setup --build \ |
| 323 | --build-root="$OBJ_DIR/hw" \ |
| 324 | lowrisc:systems:top_earlgrey_verilator |
| 325 | |
| 326 | cp "$OBJ_DIR/hw/sim-verilator/Vtop_earlgrey_verilator" \ |
| 327 | "$BIN_DIR/hw/top_earlgrey" |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 328 | displayName: Build simulation with Verilator |
| 329 | - template: ci/upload-artifacts-template.yml |
Miguel Young de la Sota | b4df860 | 2019-11-21 12:44:11 -0600 | [diff] [blame] | 330 | parameters: |
| 331 | artifact: top_earlgrey_verilator |
Philipp Wagner | f4655a1 | 2019-10-30 11:59:15 +0000 | [diff] [blame] | 332 | |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 333 | - job: execute_verilated_tests |
| 334 | displayName: Execute tests on the Verilated system |
Timothy Chen | f7e85cb | 2019-12-10 16:24:39 -0800 | [diff] [blame] | 335 | pool: |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 336 | vmImage: ubuntu-16.04 |
Timothy Chen | 7d1436d | 2019-12-04 17:26:14 -0800 | [diff] [blame] | 337 | dependsOn: |
| 338 | - top_earlgrey_verilator |
| 339 | - sw_build |
| 340 | steps: |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 341 | - template: ci/install-package-dependencies.yml |
| 342 | - template: ci/download-artifacts-template.yml |
Timothy Chen | 7d1436d | 2019-12-04 17:26:14 -0800 | [diff] [blame] | 343 | - bash: | |
| 344 | . util/build_consts.sh |
| 345 | export VERILATED_SYSTEM_PATH="$BIN_DIR/hw/top_earlgrey/Vtop_earlgrey_verilator" |
Philipp Wagner | 57418e7 | 2019-12-02 21:25:27 +0000 | [diff] [blame] | 346 | pytest --version |
Timothy Chen | 7d1436d | 2019-12-04 17:26:14 -0800 | [diff] [blame] | 347 | ci/run_verilator_pytest.sh |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 348 | displayName: Execute tests |
Timothy Chen | 7d1436d | 2019-12-04 17:26:14 -0800 | [diff] [blame] | 349 | |
Greg Chadwick | bf9dc38 | 2020-04-17 09:30:40 +0100 | [diff] [blame] | 350 | - template: ci/run-riscv-compliance.yml |
| 351 | parameters: |
| 352 | rvc_test_suites: |
| 353 | - rv32i |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 354 | |
Greg Chadwick | bf9dc38 | 2020-04-17 09:30:40 +0100 | [diff] [blame] | 355 | - template: ci/run-riscv-compliance.yml |
| 356 | parameters: |
| 357 | rvc_test_suites: |
| 358 | - rv32im |
| 359 | - rv32imc |
| 360 | - rv32Zicsr |
Timothy Chen | 7d1436d | 2019-12-04 17:26:14 -0800 | [diff] [blame] | 361 | |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 362 | - job: top_earlgrey_nexysvideo |
| 363 | displayName: Build NexysVideo variant of the Earl Grey toplevel design using Vivado |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 364 | dependsOn: |
| 365 | - lint |
| 366 | # The bootrom is built into the FPGA image at synthesis time. |
Miguel Young de la Sota | b5be8c6 | 2019-11-20 10:01:09 -0600 | [diff] [blame] | 367 | - sw_build |
Philipp Wagner | 9d20ee6 | 2019-11-29 14:27:28 +0000 | [diff] [blame] | 368 | condition: and(succeeded(), eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0')) |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 369 | pool: Default |
| 370 | timeoutInMinutes: 120 # 2 hours |
| 371 | steps: |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 372 | - template: ci/install-package-dependencies.yml |
| 373 | - template: ci/download-artifacts-template.yml |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 374 | - bash: | |
| 375 | set -e |
Miguel Young de la Sota | b5be8c6 | 2019-11-20 10:01:09 -0600 | [diff] [blame] | 376 | . util/build_consts.sh |
| 377 | mkdir -p "$OBJ_DIR/hw" |
| 378 | mkdir -p "$BIN_DIR/hw/top_earlgrey" |
| 379 | |
Greg Chadwick | 1287104 | 2020-04-20 13:42:56 +0100 | [diff] [blame] | 380 | BOOTROM_VMEM="$BIN_DIR/sw/device/boot_rom/boot_rom_fpga_nexysvideo.32.vmem" |
Miguel Young de la Sota | b5be8c6 | 2019-11-20 10:01:09 -0600 | [diff] [blame] | 381 | test -f "$BOOTROM_VMEM" |
| 382 | |
| 383 | . /opt/xilinx/Vivado/2018.3/settings64.sh |
| 384 | fusesoc --cores-root=. \ |
| 385 | run --target=synth --setup --build \ |
| 386 | --build-root="$OBJ_DIR/hw" \ |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 387 | lowrisc:systems:top_earlgrey_nexysvideo \ |
Philipp Wagner | a37bcfa | 2020-05-19 22:46:41 +0100 | [diff] [blame] | 388 | --BootRomInitFile="$BOOTROM_VMEM" |
Miguel Young de la Sota | b5be8c6 | 2019-11-20 10:01:09 -0600 | [diff] [blame] | 389 | |
| 390 | cp "$OBJ_DIR/hw/synth-vivado/lowrisc_systems_top_earlgrey_nexysvideo_0.1.bit" \ |
| 391 | "$BIN_DIR/hw/top_earlgrey" |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 392 | displayName: Build bitstream with Vivado |
| 393 | - template: ci/upload-artifacts-template.yml |
Miguel Young de la Sota | b4df860 | 2019-11-21 12:44:11 -0600 | [diff] [blame] | 394 | parameters: |
| 395 | artifact: top_earlgrey_nexysvideo |
lowRISC Contributors | 802543a | 2019-08-31 12:12:56 +0100 | [diff] [blame] | 396 | |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 397 | - job: deploy_release_artifacts |
| 398 | displayName: Package and deploy release distribution |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 399 | pool: |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 400 | vmImage: ubuntu-16.04 |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 401 | dependsOn: |
| 402 | - lint |
Miguel Young de la Sota | b5be8c6 | 2019-11-20 10:01:09 -0600 | [diff] [blame] | 403 | - sw_build |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 404 | - top_earlgrey_verilator |
| 405 | - top_earlgrey_nexysvideo |
| 406 | condition: eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0') |
| 407 | steps: |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 408 | - template: ci/install-package-dependencies.yml |
| 409 | - template: ci/download-artifacts-template.yml |
Miguel Young de la Sota | d42948c | 2019-11-18 13:56:55 -0600 | [diff] [blame] | 410 | - bash: | |
Miguel Young de la Sota | d42948c | 2019-11-18 13:56:55 -0600 | [diff] [blame] | 411 | . util/build_consts.sh |
Miguel Young de la Sota | b5be8c6 | 2019-11-20 10:01:09 -0600 | [diff] [blame] | 412 | |
Miguel Young de la Sota | d42948c | 2019-11-18 13:56:55 -0600 | [diff] [blame] | 413 | util/make_distribution.sh |
Philipp Wagner | 542e220 | 2019-10-30 13:10:16 +0000 | [diff] [blame] | 414 | |
Miguel Young de la Sota | d42948c | 2019-11-18 13:56:55 -0600 | [diff] [blame] | 415 | tar --list -f $BIN_DIR/opentitan-*.tar.xz |
| 416 | # Put the resulting tar file into a directory the |publish| step below can reference. |
| 417 | mkdir "$BUILD_ROOT/dist-final" |
| 418 | mv $BIN_DIR/opentitan-*.tar.xz "$BUILD_ROOT/dist-final" |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 419 | displayName: Create final dist directory out of partial ones |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 420 | - publish: $(Build.ArtifactStagingDirectory)/dist-final |
| 421 | artifact: opentitan-dist |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 422 | displayName: Upload release artifacts as Azure artifact |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 423 | - task: GithubRelease@0 |
Miguel Young de la Sota | a68e307 | 2020-01-02 13:59:54 -0600 | [diff] [blame] | 424 | displayName: Upload to GitHub releases (only tags) |
Philipp Wagner | 0b20f5d | 2019-11-01 16:24:52 +0000 | [diff] [blame] | 425 | condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/')) |
Philipp Wagner | bd9ae43 | 2019-11-01 14:33:30 +0000 | [diff] [blame] | 426 | inputs: |
| 427 | gitHubConnection: opentitan-release-upload |
| 428 | repositoryName: lowrisc/opentitan |
| 429 | addChangeLog: false |
| 430 | assets: | |
| 431 | $(Build.ArtifactStagingDirectory)/dist-final/* |