# Copyright Advanced Micro Devices, Inc., or its affiliates.
# SPDX-License-Identifier:  MIT

add_subdirectory(src)

set(HIPBLASLT_TEST_DATA "${CMAKE_CURRENT_BINARY_DIR}/../hipblaslt_gtest.data")

add_custom_command(
    OUTPUT "${HIPBLASLT_TEST_DATA}"
    COMMAND ${HIPBLASLT_PYTHON_COMMAND} "${CMAKE_CURRENT_SOURCE_DIR}/hipblaslt_gentest.py"
                                        -I "${CMAKE_CURRENT_SOURCE_DIR}/../common/include"
                                        "${CMAKE_CURRENT_SOURCE_DIR}/data/hipblaslt_gtest.yaml"
                                        -o ${HIPBLASLT_TEST_DATA}
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/hipblaslt_gentest.py
                                        ${CMAKE_CURRENT_SOURCE_DIR}/data/hipblaslt_common.yaml
                                        ${CMAKE_CURRENT_SOURCE_DIR}/data/matmul_common.yaml
                                        ${CMAKE_CURRENT_SOURCE_DIR}/data/matmul_gtest.yaml
                                        ${CMAKE_CURRENT_SOURCE_DIR}/data/auxiliary_gtest.yaml
                                        ${CMAKE_CURRENT_SOURCE_DIR}/data/smoke_gtest.yaml
                                        ${CMAKE_CURRENT_SOURCE_DIR}/data/rocroller_gtest.yaml
                                        ${CMAKE_CURRENT_SOURCE_DIR}/data/known_bugs.yaml

)

add_custom_target(hipblaslt-test-data DEPENDS ${HIPBLASLT_TEST_DATA})
add_dependencies(hipblaslt-test hipblaslt-test-data)

# Optional: CTest test categorization when building in rocm-libraries with shared/ctest.
# Skipped when shared/ is not present (e.g. standalone hipblaslt or sparse checkout in CI).
set(HIPBLASLT_CTEST_INSTALL_FILE "")
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test_categories.yaml")
  if(DEFINED ROCM_LIBRARIES_ROOT AND EXISTS "${ROCM_LIBRARIES_ROOT}/shared/ctest/TestCategories.cmake")
    include("${ROCM_LIBRARIES_ROOT}/shared/ctest/TestCategories.cmake")
    set(HIPBLASLT_HAS_CTEST_CATEGORIES ON)
    enable_testing()
    message(STATUS "hipBLASLt: YAML-based test categorization")
    file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/staging")
    # Install-time CTestTestfile for TheRock: relative paths so ctest can run from installed location
    set(HIPBLASLT_CTEST_INSTALL_FILE "${CMAKE_CURRENT_BINARY_DIR}/install_CTestTestfile.cmake")
    file(WRITE "${HIPBLASLT_CTEST_INSTALL_FILE}"
[=[
# This is a test file generated by hipBLASLt for install time.
# Tests are defined with relative paths to work in the installed location.
]=]
    )
    apply_test_category_labels(
      hipblaslt-test
      "${CMAKE_CURRENT_SOURCE_DIR}/test_categories.yaml"
      "${PROJECT_BINARY_DIR}/staging"
      "${HIPBLASLT_CTEST_INSTALL_FILE}"
    )
    # Install CTestTestfile.cmake to bin/hipblaslt/ for TheRock (relocatable tests; run ctest from that dir)
    install(
        FILES "${HIPBLASLT_CTEST_INSTALL_FILE}"
        DESTINATION "${CMAKE_INSTALL_BINDIR}/hipblaslt"
        COMPONENT tests
        RENAME "CTestTestfile.cmake"
    )
  else()
    message(STATUS "hipBLASLt: shared/ctest not found (e.g. standalone checkout), skipping CTest categories")
  endif()
else()
  message(STATUS "hipBLASLt: No test_categories.yaml (CTest categories not used)")
endif()
