# SWIG Python bindings for RapidPoseTriangulation # Find required packages find_package(SWIG REQUIRED COMPONENTS python) find_package(Python3 REQUIRED COMPONENTS Development) # Include SWIG macros include(UseSWIG) # Compiler flags (matching original Makefile) set(RPT_COMPILE_FLAGS -fPIC -O3 -march=native -Wall -flto=auto) # Create static library from rpt sources set(RPT_SOURCES ${CMAKE_SOURCE_DIR}/rpt/camera.cpp ${CMAKE_SOURCE_DIR}/rpt/interface.cpp ${CMAKE_SOURCE_DIR}/rpt/triangulator.cpp ) add_library(rpt_core STATIC ${RPT_SOURCES}) target_include_directories(rpt_core PUBLIC ${CMAKE_SOURCE_DIR}/rpt) target_compile_options(rpt_core PRIVATE ${RPT_COMPILE_FLAGS}) # SWIG interface set_property(SOURCE rpt.i PROPERTY CPLUSPLUS ON) set_property(SOURCE rpt.i PROPERTY SWIG_MODULE_NAME rpt) # Set output directory for generated files to match original Makefile behavior set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) swig_add_library(rpt TYPE MODULE LANGUAGE python OUTPUT_DIR ${CMAKE_CURRENT_SOURCE_DIR} OUTFILE_DIR ${CMAKE_CURRENT_SOURCE_DIR} SOURCES rpt.i ) # Link the SWIG module target_link_libraries(rpt PRIVATE rpt_core Python3::Module) target_compile_options(rpt PRIVATE ${RPT_COMPILE_FLAGS}) # Set the output directory set_target_properties(rpt PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) # Ensure SWIG can find headers target_include_directories(rpt PRIVATE ${CMAKE_SOURCE_DIR}/rpt ${Python3_INCLUDE_DIRS} )