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

# Common Tests - Test independent of all platforms
set(TEST_SRC
    copy_coherency.cc
)
if (HIP_PLATFORM MATCHES "amd")
  add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/memcpyInt.hsaco
                  COMMAND ${CMAKE_HIP_COMPILER} ${HIP_DEVICE_BUILD_FLAGS_NO_ARCH} ${OFFLOAD_ARCH_LIST} --cuda-device-only
                  -x hip ${CMAKE_CURRENT_SOURCE_DIR}/memcpyIntDevice.cpp
                  -o ${CMAKE_CURRENT_BINARY_DIR}/memcpyInt.hsaco
                  -I${HIP_INCLUDE_DIR} ${HIP_PATH_OPT}
                  -I${CMAKE_CURRENT_SOURCE_DIR}/../../include
                  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/memcpyIntDevice.cpp
                  COMMENT "Compiling memcpyInt.hsaco")
else()
  add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/memcpyInt.hsaco
                  COMMAND ${CMAKE_HIP_COMPILER} --fatbin ${OFFLOAD_ARCH_LIST}
                  -x cu ${CMAKE_CURRENT_SOURCE_DIR}/memcpyIntDevice.cpp
                  -o ${CMAKE_CURRENT_BINARY_DIR}/memcpyInt.hsaco
                  -I${HIP_INCLUDE_DIR}
                  -I${CMAKE_CURRENT_SOURCE_DIR}/../../include
                  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/memcpyIntDevice.cpp
                  COMMENT "Compiling memcpyInt.hsaco")
endif()
add_custom_target(memcpyInt_hsaco DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/memcpyInt.hsaco)
set_property(GLOBAL APPEND PROPERTY G_INSTALL_CUSTOM_TARGETS ${CMAKE_CURRENT_BINARY_DIR}/memcpyInt.hsaco)
# only for AMD
if(HIP_PLATFORM MATCHES "amd")
  # There are problems in Windows: __hip_atomicsXXX() won't work as expected
  if(NOT WIN32)
    set(AMD_SRC
    cache_coherency_cpu_gpu.cc
    cache_coherency_gpu_gpu.cc
  )
    set(TEST_SRC ${TEST_SRC} ${AMD_SRC})
  endif()
endif()

hip_add_exe_to_target(NAME synchronizationTests
                      TEST_SRC ${TEST_SRC}
                      TEST_TARGET_NAME build_tests
                      COMPILE_OPTIONS -std=c++17)

add_dependencies(synchronizationTests memcpyInt_hsaco)
