cmake_minimum_required(VERSION 3.20)
project(pyroutingkit LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

find_package(pybind11 REQUIRED)

# RoutingKit source files (only what we need for CCH)
set(ROUTINGKIT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/vendor/RoutingKit")

set(ROUTINGKIT_SOURCES
    ${ROUTINGKIT_DIR}/src/bit_select.cpp
    ${ROUTINGKIT_DIR}/src/bit_vector.cpp
    ${ROUTINGKIT_DIR}/src/customizable_contraction_hierarchy.cpp
    ${ROUTINGKIT_DIR}/src/graph_util.cpp
    ${ROUTINGKIT_DIR}/src/id_mapper.cpp
    ${ROUTINGKIT_DIR}/src/nested_dissection.cpp
    ${ROUTINGKIT_DIR}/src/contraction_hierarchy.cpp
    ${ROUTINGKIT_DIR}/src/strongly_connected_component.cpp
    ${ROUTINGKIT_DIR}/src/timer.cpp
    ${ROUTINGKIT_DIR}/src/geo_position_to_node.cpp
)

# Build RoutingKit as a static library
add_library(routingkit_static STATIC ${ROUTINGKIT_SOURCES})
target_include_directories(routingkit_static PUBLIC ${ROUTINGKIT_DIR}/include)
target_compile_options(routingkit_static PRIVATE -O3)

if(APPLE)
    target_compile_options(routingkit_static PRIVATE -Wno-deprecated -Wno-unused-parameter)
endif()

# pybind11 module
pybind11_add_module(_core src/routingkit_module.cpp)
target_link_libraries(_core PRIVATE routingkit_static)
target_include_directories(_core PRIVATE ${ROUTINGKIT_DIR}/include)

install(TARGETS _core DESTINATION pyroutingkit)
