# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

parameters:
  rvc_test_suites: []

jobs:
  - job: riscv_compliance_tests_${{ join('_', parameters.rvc_test_suites) }}
    # Disable RISC-V Compliance tests due to excessive runtimes in simulation
    # (#4128).
    condition: false
    displayName: Execute RISC-V compliance tests for ${{ join(' ', parameters.rvc_test_suites) }}
    pool:
      vmImage: ubuntu-18.04
    dependsOn:
      - top_earlgrey_verilator
      - sw_build
    steps:
    - template: install-package-dependencies.yml
    - template: download-artifacts-template.yml
    - bash: |
        set -x
        sudo util/get-toolchain.py \
          --install-dir="${TOOLCHAIN_PATH}" \
          --release-version="${TOOLCHAIN_VERSION}" \
          --update
      displayName: Install toolchain
    - ${{ each test_suite in parameters.rvc_test_suites }}:
      - bash: |
          set -e
          ci/run_riscv_compliance.sh ${{ test_suite }}
        displayName: Execute ${{ test_suite }}
