find_package(Python 3.10 REQUIRED COMPONENTS Interpreter Development.Module) if(NOT nanobind_DIR) execute_process( COMMAND "${Python_EXECUTABLE}" -c "import nanobind; print(nanobind.cmake_dir())" OUTPUT_VARIABLE nanobind_DIR OUTPUT_STRIP_TRAILING_WHITESPACE RESULT_VARIABLE nanobind_dir_result ) if(NOT nanobind_dir_result EQUAL 0 OR NOT nanobind_DIR) message(FATAL_ERROR "Failed to resolve nanobind CMake directory from Python.") endif() endif() find_package(nanobind CONFIG REQUIRED) set(RPT_PYTHON_PACKAGE_DIR "${CMAKE_CURRENT_BINARY_DIR}/rpt") file(MAKE_DIRECTORY "${RPT_PYTHON_PACKAGE_DIR}") configure_file("${PROJECT_SOURCE_DIR}/src/rpt/__init__.py" "${RPT_PYTHON_PACKAGE_DIR}/__init__.py" COPYONLY) configure_file("${PROJECT_SOURCE_DIR}/src/rpt/_helpers.py" "${RPT_PYTHON_PACKAGE_DIR}/_helpers.py" COPYONLY) configure_file("${PROJECT_SOURCE_DIR}/src/rpt/py.typed" "${RPT_PYTHON_PACKAGE_DIR}/py.typed" COPYONLY) nanobind_add_module(rpt_core_ext "${CMAKE_CURRENT_SOURCE_DIR}/rpt_module.cpp") set_target_properties(rpt_core_ext PROPERTIES OUTPUT_NAME "_core" LIBRARY_OUTPUT_DIRECTORY "${RPT_PYTHON_PACKAGE_DIR}" ) target_link_libraries(rpt_core_ext PRIVATE rpt_core) target_include_directories(rpt_core_ext PRIVATE "${PROJECT_SOURCE_DIR}/rpt" ) nanobind_add_stub(rpt_core_stub MODULE rpt._core OUTPUT "${RPT_PYTHON_PACKAGE_DIR}/_core.pyi" PYTHON_PATH "${CMAKE_CURRENT_BINARY_DIR}" DEPENDS rpt_core_ext ) install(TARGETS rpt_core_ext LIBRARY DESTINATION rpt) install(FILES "${RPT_PYTHON_PACKAGE_DIR}/_core.pyi" DESTINATION rpt)