cmake_minimum_required(VERSION 3.17)
project(newton_vision LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(pybind11 CONFIG REQUIRED)
find_package(OpenMP REQUIRED)

include(CheckLanguage)
check_language(CUDA)

if(CMAKE_CUDA_COMPILER)
    enable_language(CUDA)
    set(CMAKE_CUDA_STANDARD 17)
    add_definitions(-DHAS_CUDA)
    pybind11_add_module(_core
        cpp/binding.cpp
        cpp/layers.cpp
        cpp/cuda_layers.cu
    )
    set_property(TARGET _core PROPERTY CUDA_SEPARABLE_COMPILATION ON)
else()
    pybind11_add_module(_core
        cpp/binding.cpp
        cpp/layers.cpp
    )
endif()

target_include_directories(_core PRIVATE cpp)
target_link_libraries(_core PRIVATE OpenMP::OpenMP_CXX)

if(WIN32 AND MINGW)
    target_link_options(_core PRIVATE -static-libgcc -static-libstdc++)
endif()

install(TARGETS _core DESTINATION newton_vision)
