# SPDX-License-Identifier: Apache-2.0
cmake_minimum_required(VERSION 3.26)
project(navatala_gpu_python LANGUAGES CXX)

find_package(Python 3.9 COMPONENTS Interpreter Development.Module REQUIRED)
find_package(nanobind CONFIG REQUIRED)

set(NAVATALA_FFI_INCLUDE_DIR "" CACHE PATH "Directory containing navatala_ffi.h")
set(NAVATALA_FFI_LIBRARY "" CACHE FILEPATH "Path to the public navatala GPU FFI library")
set(NAVATALA_BUNDLED_RUNTIME_DIR "${CMAKE_CURRENT_SOURCE_DIR}/runtime")
set(NAVATALA_USE_BUNDLED_RUNTIME OFF)
if (NAVATALA_FFI_INCLUDE_DIR AND NAVATALA_FFI_LIBRARY)
    set(NAVATALA_FFI_MODE "external")
elseif (NOT NAVATALA_FFI_INCLUDE_DIR AND NOT NAVATALA_FFI_LIBRARY AND EXISTS "${NAVATALA_BUNDLED_RUNTIME_DIR}/CMakeLists.txt")
    set(NAVATALA_FFI_MODE "bundled")
    set(NAVATALA_USE_BUNDLED_RUNTIME ON)
    set(GPU_RUNTIME_BUILD_TESTS OFF CACHE BOOL "" FORCE)
    set(GPU_RUNTIME_NAVATALA_WRAPPER ON CACHE BOOL "" FORCE)
    set(GPU_RUNTIME_NAVATALA_FFI_STUB ON CACHE BOOL "" FORCE)
    set(GPU_RUNTIME_USE_CUDA OFF CACHE BOOL "" FORCE)
    set(GPU_RUNTIME_USE_HIP OFF CACHE BOOL "" FORCE)
    set(GPU_RUNTIME_USE_VULKAN OFF CACHE BOOL "" FORCE)
    set(GPU_RUNTIME_USE_OPENCL OFF CACHE BOOL "" FORCE)
    set(GPU_RUNTIME_USE_METAL OFF CACHE BOOL "" FORCE)
    set(GPU_RUNTIME_INSTALL_STANDALONE_ARTIFACTS OFF CACHE BOOL "" FORCE)
    add_subdirectory("${NAVATALA_BUNDLED_RUNTIME_DIR}" "${CMAKE_BINARY_DIR}/navatala_bundled_runtime")
    set(NAVATALA_FFI_INCLUDE_DIR "${NAVATALA_BUNDLED_RUNTIME_DIR}/include")
else()
    message(FATAL_ERROR "Provide both NAVATALA_FFI_INCLUDE_DIR and NAVATALA_FFI_LIBRARY, or build from a source tree containing python/runtime")
endif()
set(CMAKE_BUILD_RPATH_USE_ORIGIN ON)

add_subdirectory(bindings)
