# 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:
      - chip_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 }}
