cmake_minimum_required(VERSION 3.14.5)
project(stencil_type_erasure LANGUAGES CXX)

# enable CUDA if it is found on the system
include(../workaround_check_language.cmake) # see https://gitlab.kitware.com/cmake/cmake/issues/19013
_workaround_check_language(CUDA)
if(CMAKE_CUDA_COMPILER)
    # 2) Enable the CUDA language if you want to run your code on a CUDA-capable GPU. This
    #    must be done before calling `find_package(GridTools)`
    enable_language(CUDA)
endif()

find_package(GridTools 2.0.0 REQUIRED
    HINTS /usr/lib/cmake/GridTools)

enable_testing()

if(TARGET GridTools::stencil_cpu_ifirst)
    add_executable(driver_cpu driver.cpp interpolate_stencil.cpp)
    target_link_libraries(driver_cpu GridTools::stencil_cpu_ifirst)
    add_test(NAME driver_cpu COMMAND $<TARGET_FILE:driver_cpu> 33 44 55)
endif()

if(TARGET GridTools::stencil_gpu)
    set(EXAMPLE_CUDA_ARCH "" CACHE STRING "CUDA compute capability to be used for this example.")

    add_library(stencil_lib_gpu interpolate_stencil.cpp)
    target_link_libraries(stencil_lib_gpu PRIVATE GridTools::stencil_gpu)
    target_compile_definitions(stencil_lib_gpu PUBLIC USE_GPU)
    gridtools_setup_target(stencil_lib_gpu CUDA_ARCH ${EXAMPLE_CUDA_ARCH})

    add_executable(driver_gpu driver.cpp) # Can be build with the host compiler
    target_link_libraries(driver_gpu PRIVATE stencil_lib_gpu)
    target_link_libraries(driver_gpu PRIVATE GridTools::storage_gpu)

    add_test(NAME driver_gpu COMMAND $<TARGET_FILE:driver_gpu> 33 44 55)
endif()
