First attempt
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
cmake_minimum_required(VERSION 3.21)
|
||||
project(kpnpp VERSION 0.1.0 LANGUAGES CXX)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
option(KPN_BUILD_TESTS "Build tests" ON)
|
||||
option(KPN_BUILD_PYTHON "Build Python bindings (requires nanobind)" ON)
|
||||
option(KPN_BUILD_EXAMPLES "Build examples" ON)
|
||||
option(KPN_WEB_DEBUG "Enable web debug UI (cpp-httplib)" OFF)
|
||||
|
||||
# ── Core library (header-only) ────────────────────────────────────────────────
|
||||
add_library(kpn INTERFACE)
|
||||
target_include_directories(kpn INTERFACE
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:include>
|
||||
)
|
||||
target_compile_features(kpn INTERFACE cxx_std_20)
|
||||
|
||||
# Threads required by node/channel implementation
|
||||
find_package(Threads REQUIRED)
|
||||
target_link_libraries(kpn INTERFACE Threads::Threads)
|
||||
|
||||
# ── Web debug UI (optional) ───────────────────────────────────────────────────
|
||||
if(KPN_WEB_DEBUG)
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
cpp-httplib
|
||||
GIT_REPOSITORY https://github.com/yhirose/cpp-httplib.git
|
||||
GIT_TAG v0.18.0
|
||||
)
|
||||
FetchContent_MakeAvailable(cpp-httplib)
|
||||
# httplib made available but NOT forced onto kpn interface — targets opt in
|
||||
# by defining KPN_WEB_DEBUG=1 and linking httplib::httplib themselves.
|
||||
# This prevents tests and other examples from pulling in the HTTP server.
|
||||
endif()
|
||||
|
||||
# Convenience function for targets that want web debug
|
||||
function(kpn_target_enable_web_debug target)
|
||||
target_compile_definitions(${target} PRIVATE KPN_WEB_DEBUG=1)
|
||||
target_link_libraries(${target} PRIVATE httplib::httplib)
|
||||
endfunction()
|
||||
|
||||
# ── Tests ─────────────────────────────────────────────────────────────────────
|
||||
if(KPN_BUILD_TESTS)
|
||||
enable_testing()
|
||||
add_subdirectory(tests)
|
||||
endif()
|
||||
|
||||
# ── Python bindings ───────────────────────────────────────────────────────────
|
||||
if(KPN_BUILD_PYTHON)
|
||||
find_package(Python 3.8 COMPONENTS Interpreter Development.Module REQUIRED)
|
||||
find_package(nanobind CONFIG QUIET)
|
||||
if(NOT nanobind_FOUND)
|
||||
# Fall back to FetchContent if nanobind not installed system-wide
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
nanobind
|
||||
GIT_REPOSITORY https://github.com/wjakob/nanobind.git
|
||||
GIT_TAG v2.12.0
|
||||
)
|
||||
FetchContent_MakeAvailable(nanobind)
|
||||
endif()
|
||||
add_subdirectory(python)
|
||||
endif()
|
||||
|
||||
# ── Examples ──────────────────────────────────────────────────────────────────
|
||||
if(KPN_BUILD_EXAMPLES)
|
||||
add_subdirectory(examples)
|
||||
endif()
|
||||
Reference in New Issue
Block a user