46 lines
1.8 KiB
CMake
46 lines
1.8 KiB
CMake
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/__init__.pyi" "${RPT_PYTHON_PACKAGE_DIR}/__init__.pyi" 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}/__init__.pyi" DESTINATION rpt)
|
|
install(FILES "${RPT_PYTHON_PACKAGE_DIR}/_core.pyi" DESTINATION rpt)
|