# Set up the "CUDA 1" plugin.
find_library(CUDART_LIBRARY cudart ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES})

add_library(ActsPluginCuda SHARED src/Seeding/Kernels.cu)
target_include_directories(
    ActsPluginCuda
    PUBLIC
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
        ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}
)
target_link_libraries(ActsPluginCuda PUBLIC ActsCore ${CUDART_LIBRARY})

# Set up the "CUDA 2" plugin.
add_library(
    ActsPluginCuda2
    STATIC
    include/Acts/Plugins/Cuda/Seeding2/Details/CountDublets.hpp
    include/Acts/Plugins/Cuda/Seeding2/Details/FindDublets.hpp
    include/Acts/Plugins/Cuda/Seeding2/Details/FindTriplets.hpp
    include/Acts/Plugins/Cuda/Seeding2/Details/Types.hpp
    include/Acts/Plugins/Cuda/Seeding2/SeedFinder.hpp
    include/Acts/Plugins/Cuda/Seeding2/SeedFinder.ipp
    include/Acts/Plugins/Cuda/Seeding2/TripletFilterConfig.hpp
    include/Acts/Plugins/Cuda/Utilities/Arrays.hpp
    include/Acts/Plugins/Cuda/Utilities/Info.hpp
    include/Acts/Plugins/Cuda/Utilities/MemoryManager.hpp
    include/Acts/Plugins/Cuda/Utilities/StreamWrapper.hpp
    src/Seeding2/CountDublets.cu
    src/Seeding2/FindDublets.cu
    src/Seeding2/FindTriplets.cu
    src/Utilities/Arrays.cu
    src/Utilities/ErrorCheck.cuh
    src/Utilities/ErrorCheck.cu
    src/Utilities/Info.cu
    src/Utilities/MatrixMacros.hpp
    src/Utilities/MemoryManager.cu
    src/Utilities/StreamHandlers.cuh
    src/Utilities/StreamWrapper.cu
)
target_include_directories(
    ActsPluginCuda2
    PUBLIC
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
target_link_libraries(ActsPluginCuda2 PUBLIC ActsCore)
set_target_properties(
    ActsPluginCuda2
    PROPERTIES
        CUDA_STANDARD 20
        CUDA_STANDARD_REQUIRED ON
        CUDA_SEPARABLE_COMPILATION ON
        POSITION_INDEPENDENT_CODE ON
)

# Install all CUDA plugins.
install(
    TARGETS ActsPluginCuda ActsPluginCuda2
    EXPORT ActsPluginCudaTargets
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(DIRECTORY include/Acts DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
