Add CMake support and SWIG bindings for RapidPoseTriangulation
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
# 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}
|
||||
)
|
||||
@@ -1,14 +0,0 @@
|
||||
# Standard compile options for the C++ executable
|
||||
FLAGS = -fPIC -O3 -march=native -Wall -Werror -flto=auto
|
||||
|
||||
# The Python interface through SWIG
|
||||
PYTHON_VERSION = $(shell python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}");')
|
||||
PYTHONI = -I/usr/include/python$(PYTHON_VERSION)/
|
||||
PYTHONL = -Xlinker -export-dynamic
|
||||
|
||||
# Default super-target
|
||||
all:
|
||||
cd ../rpt/ && g++ $(FLAGS) -std=c++2a -c *.cpp ; cd ../swig/
|
||||
swig -c++ -python -keyword -o rpt_wrap.cxx rpt.i
|
||||
g++ $(FLAGS) $(PYTHONI) -c rpt_wrap.cxx -o rpt_wrap.o
|
||||
g++ $(FLAGS) $(PYTHONL) -shared ../rpt/*.o rpt_wrap.o -o _rpt.so
|
||||
Reference in New Issue
Block a user