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)
nanobind_add_module(CLUE_GPU_CUDA NB_STATIC 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>
                          <nanobind/nanobind.h> <nanobind/ndarray.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
                                      COMPONENT python)
# 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/)
