# SPDX-License-Identifier: MPL-2.0
#
# Prototype jetable : export/import d'une texture Vulkan via un HANDLE Win32,
# puis import de la meme allocation dans CUDA (etape 2).

find_package(Vulkan REQUIRED)

# Code Vulkan commun aux etapes 1 et 2.
add_library(gpu_interop_vk_common STATIC
    vk_common.cpp)

target_include_directories(gpu_interop_vk_common PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
target_link_libraries(gpu_interop_vk_common PUBLIC Vulkan::Vulkan)
sequa_target_defaults(gpu_interop_vk_common)

add_executable(gpu_interop_vk_export
    main.cpp)

target_link_libraries(gpu_interop_vk_export PRIVATE gpu_interop_vk_common)

sequa_target_defaults(gpu_interop_vk_export)

if(SEQUA_BUILD_TESTS)
    add_test(NAME gpu_interop_vk_export COMMAND gpu_interop_vk_export)
    set_tests_properties(gpu_interop_vk_export PROPERTIES LABELS "gpu;prototype")
endif()

# Etape 2 : facultative. Sans CUDA Toolkit, la configuration et les autres
# tests doivent continuer de passer.
find_package(CUDAToolkit QUIET)

if(CUDAToolkit_FOUND)
    add_executable(gpu_interop_vk_cuda
        vk_cuda.cpp)

    target_link_libraries(gpu_interop_vk_cuda PRIVATE gpu_interop_vk_common CUDA::cudart)

    # Les en-tetes CUDA sont du code tiers : SYSTEM pour ne pas declencher
    # /W4 /WX sur leurs avertissements. Le niveau d'avertissement global reste
    # inchange.
    if(CUDAToolkit_INCLUDE_DIRS)
        target_include_directories(gpu_interop_vk_cuda SYSTEM PRIVATE ${CUDAToolkit_INCLUDE_DIRS})
    endif()

    sequa_target_defaults(gpu_interop_vk_cuda)

    if(SEQUA_BUILD_TESTS)
        add_test(NAME gpu_interop_vk_cuda COMMAND gpu_interop_vk_cuda)
        set_tests_properties(gpu_interop_vk_cuda PROPERTIES LABELS "gpu;prototype;cuda")
        # cudart est une DLL : ctest doit la trouver meme si le shell appelant
        # n'a pas encore herite du PATH mis a jour par l'installateur CUDA.
        if(CUDAToolkit_BIN_DIR)
            set_tests_properties(gpu_interop_vk_cuda PROPERTIES
                ENVIRONMENT_MODIFICATION "PATH=path_list_prepend:${CUDAToolkit_BIN_DIR}")
        endif()
    endif()
else()
    message(STATUS "CUDA Toolkit absent : gpu_interop_vk_cuda non construit")
endif()
