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

# On Linux, we compile core libraries with our own LLVM. This gets us the
# best optimizations and, most importantly, gives us uniform access to
# sanitizers. Currently, some of these projects, though, are hard-coded
# for MSVC on Windows, so on that platform, just build them with the system
# compiler.
# TODO: Switch windows to use our own clang.
set(_system_toolchain "amd-llvm")
if(WIN32)
  set(_system_toolchain "")
endif()

################################################################################
# rocm-kpack
################################################################################

therock_cmake_subproject_declare(rocm-kpack
  EXTERNAL_SOURCE_DIR "${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/shared/kpack"
  BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/rocm-kpack"
  USE_DIST_AMDGPU_TARGETS
  BACKGROUND_BUILD
  CMAKE_ARGS
    -DBUILD_TESTING=OFF  # TODO: Enable after rocm-kpack runtime tests link under TheRock.
    -DBUILD_SHARED_LIBS=ON
  BUILD_DEPS
    therock-msgpack-cxx
  RUNTIME_DEPS
    ${THEROCK_BUNDLED_ZSTD}
  INTERFACE_LINK_DIRS
    lib
  INTERFACE_INSTALL_RPATH_DIRS
    lib
)
therock_cmake_subproject_provide_package(rocm-kpack
  rocm-kpack lib/cmake/rocm-kpack)
# TODO(#4789): Enable after rocm-kpack runtime tests link under TheRock.
# therock_cmake_subproject_build_test(rocm-kpack
#   COMMAND "${CMAKE_CTEST_COMMAND}" --output-on-failure --no-tests=error
# )
therock_cmake_subproject_activate(rocm-kpack)

therock_provide_artifact(core-kpack
  TARGET_NEUTRAL
  DESCRIPTOR artifact-core-kpack.toml
  COMPONENTS
    dbg
    dev
    lib
  SUBPROJECT_DEPS
    rocm-kpack
)

if(THEROCK_ENABLE_CORE_AMDSMI)

  ################################################################################
  # amdsmi
  ################################################################################

  if(NOT WIN32)  # TODO(#36): Enable on Windows and/or make subproject inclusion generally optional

    therock_cmake_subproject_declare(amdsmi
      EXTERNAL_SOURCE_DIR "${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/projects/amdsmi"
      BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/amdsmi"
      USE_DIST_AMDGPU_TARGETS
      BACKGROUND_BUILD
      COMPILER_TOOLCHAIN
        "${_system_toolchain}"
      CMAKE_ARGS
        "-DCMAKE_VERBOSE_MAKEFILE=OFF"
        "-DBUILD_TESTS=${THEROCK_BUILD_TESTING}"
      BUILD_DEPS
        therock-googletest
      RUNTIME_DEPS
        rocm-core
        ${THEROCK_BUNDLED_LIBDRM}
        ${THEROCK_BUNDLED_LIBMNL}
        ${THEROCK_BUNDLED_LIBNL}
      INSTALL_RPATH_DIRS
        lib
      INTERFACE_INSTALL_RPATH_DIRS
        lib
    )
    therock_cmake_subproject_provide_package(amdsmi amd_smi lib/cmake)
    therock_cmake_subproject_activate(amdsmi)

    therock_provide_artifact(core-amdsmi
      TARGET_NEUTRAL
      DESCRIPTOR artifact-core-amdsmi.toml
      COMPONENTS
        dbg
        dev
        doc
        lib
        run
      SUBPROJECT_DEPS
        amdsmi
    )

  endif() # NOT WIN32
endif(THEROCK_ENABLE_CORE_AMDSMI)


set(_therock_enable_hsa_runtime "${THEROCK_ENABLE_CORE_RUNTIME}")
if(WIN32)
  set(_therock_enable_hsa_runtime OFF)
  if(THEROCK_ENABLE_CORE_RUNTIME AND THEROCK_FLAG_HSA_WINDOWS_SHARED_RUNTIME)
    set(_therock_enable_hsa_runtime ON)
  endif()
endif()

if(_therock_enable_hsa_runtime)
  ##############################################################################
  # ROCR-Runtime
  ##############################################################################
  set(_rocr_optional_deps)
  if(NOT WIN32)
    list(APPEND _rocr_optional_deps rocprofiler-register)
  endif()

  therock_cmake_subproject_declare(ROCR-Runtime
    USE_DIST_AMDGPU_TARGETS
    EXTERNAL_SOURCE_DIR "${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/projects/rocr-runtime"
    BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/ROCR-Runtime"
    BACKGROUND_BUILD
    COMPILER_TOOLCHAIN
      "${_system_toolchain}"
    CMAKE_ARGS
      "-DBUILD_SHARED_LIBS=ON"
      # This provides the precise parent boundary path for <simde/x86/immintrin.h>
      "-DCMAKE_CXX_FLAGS=-I${CMAKE_BINARY_DIR}/third-party/simde/source"
      "-DCMAKE_C_FLAGS=-I${CMAKE_BINARY_DIR}/third-party/simde/source"
    BUILD_DEPS
      amd-llvm
      therock-simde
    RUNTIME_DEPS
      ${_rocr_optional_deps}
      ${THEROCK_BUNDLED_ELFUTILS}
      ${THEROCK_BUNDLED_LIBDRM}
      ${THEROCK_BUNDLED_NUMACTL}
      ${THEROCK_BUNDLED_ZLIB}
      ${THEROCK_BUNDLED_ZSTD}
    INTERFACE_LINK_DIRS
      "lib"
    INTERFACE_INSTALL_RPATH_DIRS
      "lib"
  )
  therock_cmake_subproject_glob_c_sources(ROCR-Runtime
    SUBDIRS
      libhsakmt
      runtime
  )
  therock_cmake_subproject_provide_package(ROCR-Runtime hsakmt lib/cmake/hsakmt)
  therock_cmake_subproject_provide_package(ROCR-Runtime hsa-runtime64 lib/cmake/hsa-runtime64)
  therock_cmake_subproject_activate(ROCR-Runtime)

  therock_test_validate_shared_lib(
    PATH ROCR-Runtime/dist/lib
    LIB_NAMES libhsa-runtime64.so
  )

  ##############################################################################
  # rocminfo
  ##############################################################################

  therock_cmake_subproject_declare(rocminfo
    USE_DIST_AMDGPU_TARGETS
    EXTERNAL_SOURCE_DIR "${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/projects/rocminfo"
    BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/rocminfo"
    BACKGROUND_BUILD
    COMPILER_TOOLCHAIN
      "${_system_toolchain}"
    RUNTIME_DEPS
      ROCR-Runtime
    INSTALL_RPATH_DIRS
      lib
  )
  therock_cmake_subproject_glob_c_sources(rocminfo SUBDIRS .)
  therock_cmake_subproject_activate(rocminfo)

  set(_core_runtime_subproject_deps
    ROCR-Runtime
    rocminfo
  )
  set(_core_runtime_artifact_components
    dbg
    dev
    doc
    lib
    run
  )

  if(THEROCK_FLAG_INCLUDE_HRX)
    ############################################################################
    # HRX
    ############################################################################

    therock_cmake_subproject_declare(hrx
      USE_DIST_AMDGPU_TARGETS
      EXTERNAL_SOURCE_DIR "${THEROCK_SOURCE_DIR}/optional-sources/hrx"
      BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/hrx"
      BACKGROUND_BUILD
      COMPILER_TOOLCHAIN
        "${_system_toolchain}"
      CMAKE_ARGS
        "-DBUILD_SHARED_LIBS=ON"
        "-DHRX_BUILD_CTS=ON"
        "-DIREE_BUILD_TESTS=OFF"
      BUILD_DEPS
        amd-llvm
        therock-catch2
      RUNTIME_DEPS
        ROCR-Runtime
      INSTALL_DESTINATION
        "lib/hrx"
      INTERFACE_PROGRAM_DIRS
        "lib/hrx/bin"
      INTERFACE_LINK_DIRS
        "lib/hrx/lib"
      INTERFACE_INSTALL_RPATH_DIRS
        "lib/hrx/lib"
      INSTALL_RPATH_EXECUTABLE_DIR
        "lib/hrx/bin"
      INSTALL_RPATH_LIBRARY_DIR
        "lib/hrx/lib"
    )
    therock_cmake_subproject_provide_package(hrx hrx lib/hrx/lib/cmake/hrx)
    therock_cmake_subproject_activate(hrx)
    list(APPEND _core_runtime_subproject_deps hrx)
    list(APPEND _core_runtime_artifact_components test)
  endif()

  therock_provide_artifact(core-runtime
    TARGET_NEUTRAL
    DESCRIPTOR artifact-core-runtime.toml
    COMPONENTS
      ${_core_runtime_artifact_components}
    SUBPROJECT_DEPS
      ${_core_runtime_subproject_deps}
  )

endif()

if(THEROCK_ENABLE_HIP_RUNTIME)
  ##############################################################################
  # clr
  # The primary HIP compiler and runtime target. This is also the project used
  # to root the "amd-hip" compiler toolchain and is a superset of amd-llvm.
  # As a particularly sharp edge, the `hipconfig` tool is really only fully
  # functional from this project (which contributes version and metadata).
  ##############################################################################
  set(HIP_CLR_CMAKE_ARGS)
  set(HIP_CLR_RUNTIME_DEPS)
  if(WIN32)
    # Windows CLR options
    set(_compute_pal_dir "${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/shared/amdgpu-windows-interop")
    cmake_path(NORMAL_PATH _compute_pal_dir)
    list(APPEND HIP_CLR_CMAKE_ARGS
      "-DUSE_PROF_API=OFF"
      "-D__HIP_ENABLE_PCH=OFF"
      "-DROCCLR_ENABLE_PAL=1"
      "-DROCCLR_ENABLE_HSA=1"
      "-D__HIP_ENABLE_RTC=1"
      "-DROCR_DLL_LOAD=0"
      "-DAMD_COMPUTE_WIN=${_compute_pal_dir}"
    )
  else()
    # Non-Windows CLR options.
    list(APPEND HIP_CLR_RUNTIME_DEPS
      rocprofiler-register
    )
  endif()
  if(_therock_enable_hsa_runtime)
    list(APPEND HIP_CLR_RUNTIME_DEPS
      rocminfo  # Various things expect to be able to find the rocminfo tools
      ROCR-Runtime
    )
  endif()



  therock_cmake_subproject_declare(hip-clr
    USE_DIST_AMDGPU_TARGETS
    EXTERNAL_SOURCE_DIR "${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/projects/clr"
    BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/clr"
    INTERFACE_PROGRAM_DIRS
      bin
    BACKGROUND_BUILD
    COMPILER_TOOLCHAIN
      "${_system_toolchain}"
    CMAKE_ARGS
      "-DHIP_PLATFORM=amd"
      "-DHIP_COMMON_DIR=${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/projects/hip"
      "-DCLR_BUILD_HIP=ON"
      "-DROCM_KPACK_ENABLED=ON"
      "-DUSE_NEW_HOSTCALL_IMPL=${THEROCK_USE_NEW_HOSTCALL_IMPL}"
      # Legacy: Disable various auto-detection logic that breaks out of jail
      # and can use local machine tools.
      "-DHIPCC_BIN_DIR="
      ${HIP_CLR_CMAKE_ARGS}
    BUILD_DEPS
      rocm-cmake
      therock-simde
    RUNTIME_DEPS
      amd-llvm
      amd-comgr
      hipcc     # For hipconfig
      rocm-core
      rocm-kpack
      ${HIP_CLR_RUNTIME_DEPS}
    INTERFACE_LINK_DIRS
      "lib"
    INTERFACE_INSTALL_RPATH_DIRS
      "lib"
  )
  therock_cmake_subproject_glob_c_sources(hip-clr SUBDIRS .)
  therock_cmake_subproject_provide_package(hip-clr hip lib/cmake/hip)
  # TODO: Some projects resolve "hip" vs "HIP" so we advertise both, but this isn't
  # great.
  therock_cmake_subproject_provide_package(hip-clr HIP lib/cmake/hip)
  therock_cmake_subproject_provide_package(hip-clr hip-lang lib/cmake/hip-lang)
  therock_cmake_subproject_provide_package(hip-clr hiprtc lib/cmake/hiprtc)
  therock_cmake_subproject_activate(hip-clr)

  therock_provide_artifact(core-hip
    TARGET_NEUTRAL
    DESCRIPTOR artifact-core-hip.toml
    COMPONENTS
      dbg
      dev
      doc
      lib
      run
    SUBPROJECT_DEPS
      hip-clr
  )

  therock_test_validate_shared_lib(
    PATH clr/dist/lib
    LIB_NAMES
      libamdhip64.so
      libhiprtc-builtins.so
      libhiprtc.so
  )
  if(WIN32)
    ##############################################################################
    # hipInfo (from hip-tests)
    ##############################################################################
    therock_cmake_subproject_declare(hipInfo
      USE_DIST_AMDGPU_TARGETS
      EXTERNAL_SOURCE_DIR "hipInfo"
      BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/hipInfo"
      BACKGROUND_BUILD
      COMPILER_TOOLCHAIN
        "${_system_toolchain}"
      CMAKE_ARGS
        "-DHIP_PLATFORM=amd"
        "-DHIP_TESTS_DIR=${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/projects/hip-tests"
      RUNTIME_DEPS
        hip-clr
    )
    therock_cmake_subproject_glob_c_sources(hipInfo SUBDIRS .)
    therock_cmake_subproject_activate(hipInfo)

    # Provide it as an artifact:
    therock_provide_artifact(core-hipinfo
      TARGET_NEUTRAL
      DESCRIPTOR artifact-core-hipinfo.toml
      COMPONENTS
        run
      SUBPROJECT_DEPS
        hipInfo
    )
  endif()

endif(THEROCK_ENABLE_HIP_RUNTIME)

if(THEROCK_ENABLE_WSL_ROCDXG)
  if(NOT THEROCK_WSL_WIN_SDK)
    message(FATAL_ERROR "THEROCK_WSL_WIN_SDK must be set when THEROCK_ENABLE_WSL_ROCDXG=ON")
  endif()

  # FPRINT_SOURCE_DIR tracks upstream libhsakmt; the small file glob tracks this
  # wrapper, whose source dir is otherwise outside that upstream fingerprint.
  # The upstream WSL rocdxg path expects the mounted Windows SDK shared include
  # directory to be provided explicitly, so forward THEROCK_WSL_WIN_SDK into
  # the nested subproject configure.
  therock_cmake_subproject_declare(therock-wsl-rocdxg
    EXTERNAL_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/wsl-rocdxg"
    BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/wsl-rocdxg"
    USE_DIST_AMDGPU_TARGETS
    BACKGROUND_BUILD
    COMPILER_TOOLCHAIN
      amd-hip
    CMAKE_ARGS
      "-DTHEROCK_WSL_WIN_SDK=${THEROCK_WSL_WIN_SDK}"
    FPRINT_SOURCE_DIR "${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/projects/rocr-runtime/libhsakmt"
    FPRINT_FILE_GLOBS
      "${CMAKE_CURRENT_SOURCE_DIR}/wsl-rocdxg/*"
    INTERFACE_INCLUDE_DIRS
      include
    INTERFACE_LINK_DIRS
      lib
    INTERFACE_PKG_CONFIG_DIRS
      lib/pkgconfig
    INTERFACE_INSTALL_RPATH_DIRS
      lib
  )
  therock_cmake_subproject_provide_package(therock-wsl-rocdxg rocdxg lib/cmake/rocdxg)
  therock_cmake_subproject_activate(therock-wsl-rocdxg)

  therock_provide_artifact(wsl-rocdxg
    TARGET_NEUTRAL
    DESCRIPTOR artifact-wsl-rocdxg.toml
    COMPONENTS
      dev
      doc
      lib
    SUBPROJECT_DEPS
      therock-wsl-rocdxg
  )
endif()

################################################################################
# ocl-icd
################################################################################

if(THEROCK_ENABLE_OCL_ICD)

  therock_cmake_subproject_declare(ocl-icd
  USE_DIST_AMDGPU_TARGETS
  EXTERNAL_SOURCE_DIR
    "${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/projects/clr/opencl/khronos/icd"
    "${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/projects/OpenCL-Headers"
  BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/ocl-icd"
  BACKGROUND_BUILD
  CMAKE_ARGS
    "-DOPENCL_ICD_LOADER_REQUIRE_WDK=OFF"
    "-DOPENCL_ICD_LOADER_HEADERS_DIR=${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/projects/clr/opencl/khronos/headers/opencl2.2"

  INTERFACE_LINK_DIRS
    "lib"
  INTERFACE_INSTALL_RPATH_DIRS
    "lib"
  )

  therock_cmake_subproject_activate(ocl-icd)

  therock_provide_artifact(core-ocl-icd
    TARGET_NEUTRAL
    DESCRIPTOR artifact-core-ocl-icd.toml
    COMPONENTS
      lib
    SUBPROJECT_DEPS
      ocl-icd
  )
endif(THEROCK_ENABLE_OCL_ICD)

if(THEROCK_ENABLE_OCL_RUNTIME)

  set(OCL_CLR_CMAKE_ARGS)
  set(OCL_CLR_RUNTIME_DEPS)
  if(WIN32)
    # Windows CLR options
    set(_compute_pal_dir "${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/shared/amdgpu-windows-interop")
    cmake_path(NORMAL_PATH _compute_pal_dir)
    list(APPEND OCL_CLR_CMAKE_ARGS
      "-DUSE_PROF_API=OFF"
      "-D__HIP_ENABLE_PCH=OFF"
      "-DROCCLR_ENABLE_PAL=ON"
      "-DROCCLR_ENABLE_HSA=ON"
      "-DROCCLR_ENABLE_HSAIL=ON"
      "-DROCCLR_ENABLE_LC=ON"
      "-DROCR_DLL_LOAD=OFF"
      "-DAMD_COMPUTE_WIN=${_compute_pal_dir}"
    )
  else()
    # Non-Windows CLR options.
    list(APPEND OCL_CLR_RUNTIME_DEPS
      rocprofiler-register
    )
    list(APPEND OCL_CLR_CMAKE_ARGS
      "-DBUILD_TESTS=${THEROCK_BUILD_TESTING}"
    )
  endif()
  if(_therock_enable_hsa_runtime)
    list(APPEND OCL_CLR_RUNTIME_DEPS
      rocminfo  # Various things expect to be able to find the rocminfo tools
      ROCR-Runtime
    )
  endif()

  therock_cmake_subproject_declare(ocl-clr
    USE_DIST_AMDGPU_TARGETS
    EXTERNAL_SOURCE_DIR "${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/projects/clr"
    BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/ocl-clr"
    INTERFACE_PROGRAM_DIRS
      bin
    BACKGROUND_BUILD
    COMPILER_TOOLCHAIN
      "${_system_toolchain}"
    CMAKE_ARGS
      "-DCLR_BUILD_OCL=ON"
      ${OCL_CLR_CMAKE_ARGS}
    BUILD_DEPS
      rocm-cmake
      therock-simde
    RUNTIME_DEPS
      amd-llvm
      amd-comgr
      rocm-core
      ocl-icd
      ${OCL_CLR_RUNTIME_DEPS}
    INSTALL_RPATH_LIBRARY_DIR
      "lib/opencl"
    INTERFACE_LINK_DIRS
      "lib"
      "lib/opencl"
    INTERFACE_INSTALL_RPATH_DIRS
      "lib"
      "lib/opencl"
  )
  therock_cmake_subproject_glob_c_sources(ocl-clr SUBDIRS .)
  therock_cmake_subproject_provide_package(ocl-clr ocl-icd lib/cmake/ocl-icd)
  therock_cmake_subproject_activate(ocl-clr)

  therock_provide_artifact(core-ocl
    TARGET_NEUTRAL
    DESCRIPTOR artifact-core-ocl.toml
    COMPONENTS
      dbg
      dev
      doc
      lib
      run
      test
    SUBPROJECT_DEPS
      ocl-clr
  )

  therock_test_validate_shared_lib(
    PATH ocl-clr/dist/lib/opencl
    LIB_NAMES
      libamdocl64.so
  )

  # Ensure runtime dependencies of libamdocl64.so (for example,
  # libamd_comgr_loader.so) are discoverable by the dynamic loader when
  # running the validation test. Some configurations (e.g. Windows) do not
  # register this test, so guard the property update accordingly.
  if(TEST therock-validate-shared-lib-libamdocl64.so)
    set_tests_properties(therock-validate-shared-lib-libamdocl64.so
      PROPERTIES
        ENVIRONMENT
          "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/core/ocl-clr/dist/lib:$ENV{LD_LIBRARY_PATH}"
    )
  endif()

endif(THEROCK_ENABLE_OCL_RUNTIME)

##############################################################################
# Runtime tests
# These are in their own build stage (runtime-tests) so they don't block
# downstream stages like math-libs, dctools-core, etc.
##############################################################################

if(THEROCK_BUILD_TESTING AND THEROCK_ENABLE_CORE_HIPTESTS)
  set(HIP_TESTS_CMAKE_ARGS)
  set(_hip_tests_subproject_names)
  therock_cmake_subproject_declare(hip-tests
    USE_TEST_AMDGPU_TARGETS
    EXTERNAL_SOURCE_DIR "${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/projects/hip-tests/catch"
    BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/hip-tests"
    BACKGROUND_BUILD
    COMPILER_TOOLCHAIN
      amd-hip
    CMAKE_ARGS
      -DHIP_PLATFORM="amd"
      -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON
    BUILD_DEPS
      rocm-cmake
      therock-catch2
    RUNTIME_DEPS
      hip-clr
      ${THEROCK_BUNDLED_NUMACTL}
    INTERFACE_LINK_DIRS
      lib
      lib/rocm_sysdeps/lib
    INTERFACE_INSTALL_RPATH_DIRS
      lib
      lib/rocm_sysdeps/lib
  )
  therock_cmake_subproject_glob_c_sources(hip-tests SUBDIRS .)
  therock_cmake_subproject_activate(hip-tests)
  therock_provide_artifact(core-hiptests
    TARGET_NEUTRAL
    DESCRIPTOR artifact-core-hiptests.toml
    COMPONENTS
      test
    SUBPROJECT_DEPS
      hip-tests
  )
  list(APPEND _hip_tests_subproject_names hip-tests)
endif(THEROCK_BUILD_TESTING AND THEROCK_ENABLE_CORE_HIPTESTS)

if(THEROCK_BUILD_TESTING AND THEROCK_ENABLE_CORE_RUNTIME_TESTS AND _therock_enable_hsa_runtime)
  # rocrtst may optionally build against amdsmi when available (Linux).
  set(_rocrtst_build_deps
    amd-llvm
    ocl-clr
    therock-yaml-cpp
  )
  if(TARGET amdsmi)
    list(APPEND _rocrtst_build_deps amdsmi)
  endif()

  therock_cmake_subproject_declare(rocrtst
    USE_TEST_AMDGPU_TARGETS
    EXTERNAL_SOURCE_DIR "${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/projects/rocr-runtime/rocrtst/suites/test_common"
    BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/rocrtst"
    BACKGROUND_BUILD
    CMAKE_ARGS
      "-DCMAKE_PREFIX_PATH="
      "-DLLVM_DIR="
      "-DROCM_DIR="
    COMPILER_TOOLCHAIN
      "${_system_toolchain}"
    BUILD_DEPS
      ${_rocrtst_build_deps}
    RUNTIME_DEPS
      ROCR-Runtime
      rocprofiler-register
      ${THEROCK_BUNDLED_ELFUTILS}
      ${THEROCK_BUNDLED_HWLOC}
      ${THEROCK_BUNDLED_LIBDRM}
      ${THEROCK_BUNDLED_NUMACTL}
    INTERFACE_LINK_DIRS
      "lib/rocm_sysdeps/lib"
    INTERFACE_INSTALL_RPATH_DIRS
      "lib/rocm_sysdeps/lib"
  )
  therock_cmake_subproject_glob_c_sources(rocrtst SUBDIRS .)
  therock_cmake_subproject_activate(rocrtst)

  therock_provide_artifact(rocrtst
    TARGET_NEUTRAL
    DESCRIPTOR artifact-core-rocrtst.toml
    COMPONENTS
      dbg
      dev
      doc
      lib
      run
      test
    SUBPROJECT_DEPS
      rocrtst
  )
endif(THEROCK_BUILD_TESTING AND THEROCK_ENABLE_CORE_RUNTIME_TESTS AND _therock_enable_hsa_runtime)
