#!/bin/bash

# Copyright 2021 The IREE Authors
#
# Licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

# Test the cross-compiled RISCV 64-bit Linux targets.
#
# The desired build directory can be passed as the first argument. Otherwise, it
# uses the environment variable IREE_TARGET_BUILD_DIR, defaulting to
# "build-riscv". Designed for CI, but can be run manually. Expects to be run
# from the root of the IREE repository.

set -xeuo pipefail

BUILD_DIR="${1:-${IREE_TARGET_BUILD_DIR:-build-riscv}}"
RISCV_PLATFORM="${IREE_TARGET_PLATFORM:-linux}"
RISCV_ARCH="${IREE_TARGET_ARCH:-riscv_64}"
BUILD_PRESET="${BUILD_PRESET:-test}"

# Environment variable used by the emulator.
export RISCV_TOOLCHAIN_ROOT="${RISCV_RV64_LINUX_TOOLCHAIN_ROOT}"

export CTEST_PARALLEL_LEVEL=${CTEST_PARALLEL_LEVEL:-$(nproc)}

ctest_args=(
  "--timeout 900"
  "--output-on-failure"
  "--no-tests=error"
)

declare -a label_exclude_args=(
  "^nokokoro$"
  "^driver=vulkan$"
  "^driver=cuda$"
  "^vulkan_uses_vk_khr_shader_float16_int8$"
  "^requires-filesystem$"
  "^requires-dtz$"
  "^noriscv$"
)

# Excluding mobilebert, fp16, and lowering_config regression
# tests for now.
# TODO(#10462): Investigate the lowering_config test issue.
declare -a test_exclude_args=(
  "bert"
  "fp16"
  "regression_llvm-cpu_lowering_config"
)

if [[ "${BUILD_PRESET}" == "benchmark-suite-test" ]]; then
  declare -a label_args=(
    "^test-type=run-module-test$"
  )
  label_include_regex="($(IFS="|" ; echo "${label_args[*]}"))"
  echo "******** Running run-module CTest ********"
  ctest --test-dir ${BUILD_DIR} ${ctest_args[@]} \
    --label-regex ${label_include_regex}
  exit 0
fi

# Test runtime unit tests
runtime_label_exclude_regex="($(IFS="|" ; echo "${label_exclude_args[*]}"))"
runtime_ctest_args=(
  "--test-dir ${BUILD_DIR}/runtime/"
  ${ctest_args[@]}
  "--label-exclude ${runtime_label_exclude_regex}"
)
echo "******** Running runtime CTest ********"
ctest ${runtime_ctest_args[@]}

tools_ctest_args=(
  "--test-dir ${BUILD_DIR}/tools/test"
  ${ctest_args[@]}
  "--label-exclude ${runtime_label_exclude_regex}"
)
echo "******** Running tools CTest ********"
ctest ${tools_ctest_args[@]}

if [[ "${RISCV_PLATFORM}-${RISCV_ARCH}" == "linux-riscv_32" ]]; then
  # mhlo.power is also disabled because musl math library is not compiled for
  # 32-bit.
  test_exclude_args+=(
    "stablehlo.*llvm-cpu.*pow"
    "xla.*llvm-cpu.*pow"
  )
fi

test_exclude_args+=(
  # TODO(#12703): Enable the tests.
  "iree/tests/e2e/matmul/e2e_matmul_mmt4d_i8_intrinsics_small_llvm-cpu_local-task"
  "iree/tests/e2e/matmul/e2e_matmul_mmt4d_i8_small_llvm-cpu_local-task"
  "iree/tests/e2e/tensor_ops/check_llvm-cpu_local-task_pack.mlir"
  "iree/tests/e2e/tensor_ops/check_llvm-cpu_local-task_pack_dynamic_inner_tiles.mlir"
  # TODO(#13421): Enable the tests
  "iree/tests/e2e/stablehlo_ops/check_llvm-cpu_local-task_dot.mlir"
  "iree/tests/e2e/xla_ops/check_llvm-cpu_local-task_dot.mlir"
  "iree/tests/e2e/matmul/e2e_matmul_direct_i8_small_llvm-cpu_local-task"
  "iree/tests/e2e/matmul/e2e_matmul_direct_f32_small_llvm-cpu_local-task"
  "iree/tests/e2e/matmul/e2e_matmul_direct_f32_small_no_padding_llvm-cpu_local-task"
  "iree/tests/e2e/regression/check_regression_llvm-cpu_strided_slice.mlir"
)

tests_label_exclude_regex="($(IFS="|" ; echo "${label_exclude_args[*]}"))"
tests_exclude_regex="($(IFS="|" ; echo "${test_exclude_args[*]}"))"
test_ctest_args=(
  "--test-dir ${BUILD_DIR}/tests/e2e"
  ${ctest_args[@]}
  "--label-exclude ${tests_label_exclude_regex}"
  "--exclude-regex ${tests_exclude_regex}"
)
echo "******** Running e2e CTest ********"
ctest  ${test_ctest_args[@]}
