# Azure Pipelines CI build configuration
# Documentation at https://aka.ms/yaml

variables:
  VERILATOR_VERSION: 4.010
  VERILATOR_PATH: /opt/buildcache/verilator/$(VERILATOR_VERSION)

trigger:
  # Combine builds on master as long as another build is running
  batch: true
  branches:
    include:
    - master

stages:
# Stage 1 are fast checks for tools which provide fast turnaround time
# (< 5 minutes)
- stage: quick_sanity
  displayName: Quick sanity checks
  jobs:
  - job: "lint"
    displayName: "Run code quality checks (lint)"
    pool: "Default"
    steps:
    - bash: |
        sudo apt-get install -y python3 python3-pip build-essential srecord python3-setuptools zlib1g-dev libusb-1.0 clang-format
        sudo pip3 install -r python-requirements.txt
      displayName: 'Install dependencies'

    - bash: |
        python3 --version
        yapf --version
        isort --version
        clang-format -version
      displayName: 'Display tool versions'

#   XXX: Python lint checks are until Issue #313 is resolved
#    - bash: find ./util -iname '*.py' -print0 | xargs -0 -n1 $PWD/util/lintpy.py -f
#      displayName: 'Run Python lint'

    - bash: |
        make -C hw regs && git diff --exit-code
        if [ $? != 0 ]; then
          echo -n "##vso[task.logissue type=error]"
          echo "Register headers not up-to-date. Regenerate them with 'make -C hw regs'."
          exit 1
        fi
      condition: always()
      displayName: 'Ensure all generated files are clean and up-to-date'

    - bash: |
        # XXX: As of today, task.logissue comments with 'sourcepath' set don't
        # get reported to GitHub Checks annotations. Upstream bug report:
        # https://developercommunity.visualstudio.com/content/problem/689794/pipelines-logging-command-logissue-does-not-report.html
        #echo "##vso[task.issue type=error;sourcepath=/azure-pipelines.yml;linenumber=45;columnnumber=1;code=100;]Found something that could be a problem."
        git diff -U0 $(git merge-base --fork-point origin/master) | 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 'util/run-clang-format.sh' or 'git clang-format' to format the 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: |
        commit_range=$(git merge-base --fork-point origin/master)..HEAD
        # Notes:
        # * Merge commits are not checked. We always use rebases instead of
        #   merges to keep a linear history, which makes merge commits disappear
        #   ultimately, making them only a CI artifact which should not be
        #   checked.
        # * 'type=error' is used even for warnings. Only "errors" are shown in
        #   the GitHub checks API. However, warnings don't return a non-zero
        #   error code and don't fail the build step.
        ./util/lint_commits.py \
            --no-merges \
            --error-msg-prefix='##vso[task.logissue type=error]' \
            --warning-msg-prefix='##vso[task.logissue type=error]' \
            $commit_range
      # Only run on pull requests to check new commits only
      condition: eq(variables['Build.Reason'], 'PullRequest')
      displayName: "Check commit metadata"

# Stage 2 for longer builds and tests. Jobs run in parallel by default, and
# dependencies should be used for build -> test dependencies.
- stage: build_test
  displayName: Build and test
  jobs:
  - job: "top_earlgrey_verilator"
    displayName: "Build Verilator simulation of the Earl Grey toplevel design"
    pool: "Default"
    steps:
    - bash: |
        sudo apt-get install -y python3 python3-pip build-essential srecord python3-setuptools zlib1g-dev libusb-1.0 \
          && sudo pip3 install -r python-requirements.txt \
          && sudo apt-get install git make autoconf g++ flex bison curl
      displayName: 'Install dependencies'
    - bash: |
        set -e
        if [ ! -d $(VERILATOR_PATH) ]; then
          echo "Building verilator (no cached build found)"
          mkdir -p build/verilator
          cd build/verilator
          curl -Ls -o verilator.tgz https://www.veripool.org/ftp/verilator-$(VERILATOR_VERSION).tgz
          tar -xf verilator.tgz
          cd verilator-$(VERILATOR_VERSION)
          ./configure --prefix=$(VERILATOR_PATH)
          make -j$(nproc)
          mkdir -p $VERILATOR_PATH
          make install
        else
          echo "Re-using cached verilator build"
        fi
      displayName: 'Build and install Verilator'
    - bash: |
        export PATH=$VERILATOR_PATH/bin:$PATH
        python3 --version
        fusesoc --version
        verilator --version
      displayName: 'Display environment'
    - bash: |
        export PATH=$VERILATOR_PATH/bin:$PATH
        fusesoc --cores-root=. sim --build-only lowrisc:systems:top_earlgrey_verilator
      displayName: 'Build simulation with Verilator'

  - job: "top_earlgrey_nexysvideo"
    displayName: "Build NexysVideo variant of the Earl Grey toplevel design using Vivado"
    pool: "Default"
    timeoutInMinutes: 120 # 2 hours
    steps:
    - bash: |
        sudo apt-get install -y python3 python3-pip build-essential srecord python3-setuptools zlib1g-dev libusb-1.0 \
          && sudo pip3 install -r python-requirements.txt
      displayName: 'Install dependencies'
    - bash: |
        set -e
        source /opt/xilinx/Vivado/2018.3/settings64.sh
        fusesoc --cores-root . build lowrisc:systems:top_earlgrey_nexysvideo
      displayName: 'Build bitstream with Vivado'
