enable_language(CUDA)
set(CMAKE_CUDA_HOST_COMPILER ${CMAKE_CUDA_COMPILER})

# set the CUDA standard
if(NOT DEFINED CMAKE_CUDA_STANDARD)
  set(CMAKE_CUDA_STANDARD 20)
  set(CMAKE_CUDA_STANDARD_REQUIRED ON)
endif()

set_source_files_properties(binding_gpu_cuda.cpp PROPERTIES LANGUAGE CUDA)
pybind11_add_module(CLUE_GPU_CUDA NO_EXTRAS SHARED binding_gpu_cuda.cpp)
target_include_directories(CLUE_GPU_CUDA
                           PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../../include)
target_link_libraries(CLUE_GPU_CUDA PRIVATE alpaka::alpaka Boost::atomic)
target_compile_definitions(CLUE_GPU_CUDA PRIVATE ALPAKA_ACC_GPU_CUDA_ENABLED)
target_compile_options(CLUE_GPU_CUDA PRIVATE --expt-relaxed-constexpr)
target_precompile_headers(
  CLUE_GPU_CUDA
  PRIVATE
  <alpaka/alpaka.hpp>
  <pybind11/pybind11.h>
  <pybind11/numpy.h>
  <pybind11/stl.h>
  <pybind11/functional.h>)
set_target_properties(
  CLUE_GPU_CUDA
  PROPERTIES LIBRARY_OUTPUT_DIRECTORY
             ${CMAKE_CURRENT_BINARY_DIR}/../../../lib/CLUEstering/lib/
             CUDA_ARCHITECTURES native)
install(TARGETS CLUE_GPU_CUDA LIBRARY DESTINATION CLUEstering/lib)
# copy shared library for local testing
add_custom_command(
  TARGET CLUE_GPU_CUDA
  POST_BUILD
  COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:CLUE_GPU_CUDA>
          ${CMAKE_CURRENT_SOURCE_DIR}/../../lib/)
