cmake_minimum_required(VERSION 3.21)
project(quwave LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# ── Optional CUDA ──────────────────────────────────────────────────────────
option(QUWAVE_ENABLE_CUDA "Enable CUDA kernels" OFF)
if(QUWAVE_ENABLE_CUDA)
    enable_language(CUDA)
    set(CMAKE_CUDA_STANDARD 17)
    add_compile_definitions(QUWAVE_CUDA)
endif()

# ── pybind11 ───────────────────────────────────────────────────────────────
set(PYBIND11_FINDPYTHON ON)
find_package(pybind11 CONFIG REQUIRED)

# ── Sources ────────────────────────────────────────────────────────────────
set(CORE_SOURCES
    csrc/quwave_core.cpp
)
if(QUWAVE_ENABLE_CUDA)
    list(APPEND CORE_SOURCES csrc/quwave_cuda.cu)
endif()

# ── Extension module ───────────────────────────────────────────────────────
pybind11_add_module(_core MODULE ${CORE_SOURCES})

target_include_directories(_core PRIVATE csrc)

if(QUWAVE_ENABLE_CUDA)
    set_target_properties(_core PROPERTIES
        CUDA_SEPARABLE_COMPILATION ON
    )
endif()

install(TARGETS _core DESTINATION quwave)
