From 59f1a2c0eff1130127428258232ba040d9840bd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Candice=20Bent=C3=A9jac?= Date: Mon, 30 Sep 2024 11:42:58 +0200 Subject: [PATCH] [build] SwigBinding: Compile on Windows Correctly link the needed Python3 libraries and handle cases where the size of `long` is not 64 bits for some type definitions (such as `size_t`). --- src/aliceVision/CMakeLists.txt | 8 +++++++- src/aliceVision/camera/CMakeLists.txt | 7 ++++++- src/aliceVision/geometry/CMakeLists.txt | 7 ++++++- src/aliceVision/global.i | 9 +++++++-- src/aliceVision/hdr/CMakeLists.txt | 7 ++++++- src/aliceVision/sensorDB/CMakeLists.txt | 7 ++++++- src/aliceVision/sfmData/CMakeLists.txt | 7 ++++++- src/aliceVision/sfmDataIO/CMakeLists.txt | 7 ++++++- src/aliceVision/stl/CMakeLists.txt | 7 ++++++- 9 files changed, 56 insertions(+), 10 deletions(-) diff --git a/src/aliceVision/CMakeLists.txt b/src/aliceVision/CMakeLists.txt index 9e5dd9a62c..371f1fafd1 100644 --- a/src/aliceVision/CMakeLists.txt +++ b/src/aliceVision/CMakeLists.txt @@ -93,9 +93,13 @@ if(ALICEVISION_BUILD_SWIG_BINDING) SOURCES aliceVision.i ) + if (CMAKE_SYSTEM_NAME MATCHES "Linux") + list(APPEND SWIG_EXTRA_COMPILE_OPTIONS "-DSWIGWORDSIZE64") + endif() + set_property( TARGET pyalicevision - PROPERTY SWIG_COMPILE_OPTIONS -doxygen + PROPERTY SWIG_COMPILE_OPTIONS -doxygen ${SWIG_EXTRA_COMPILE_OPTIONS} ) target_include_directories(pyalicevision @@ -117,10 +121,12 @@ if(ALICEVISION_BUILD_SWIG_BINDING) target_link_libraries(pyalicevision PUBLIC aliceVision_numeric + ${Python3_LIBRARIES} ) install( TARGETS pyalicevision + DESTINATION ${CMAKE_INSTALL_PREFIX} ) diff --git a/src/aliceVision/camera/CMakeLists.txt b/src/aliceVision/camera/CMakeLists.txt index b0490fa027..76407d565d 100644 --- a/src/aliceVision/camera/CMakeLists.txt +++ b/src/aliceVision/camera/CMakeLists.txt @@ -69,9 +69,13 @@ if (ALICEVISION_BUILD_SWIG_BINDING) SOURCES Camera.i ) + if (CMAKE_SYSTEM_NAME MATCHES "Linux") + list(APPEND SWIG_EXTRA_COMPILE_OPTIONS "-DSWIGWORDSIZE64") + endif() + set_property( TARGET camera - PROPERTY SWIG_COMPILE_OPTIONS -doxygen + PROPERTY SWIG_COMPILE_OPTIONS -doxygen ${SWIG_EXTRA_COMPILE_OPTIONS} ) target_include_directories(camera @@ -93,6 +97,7 @@ if (ALICEVISION_BUILD_SWIG_BINDING) target_link_libraries(camera PUBLIC aliceVision_camera + ${Python3_LIBRARIES} ) install( diff --git a/src/aliceVision/geometry/CMakeLists.txt b/src/aliceVision/geometry/CMakeLists.txt index 5fa8ceb563..aea443879c 100644 --- a/src/aliceVision/geometry/CMakeLists.txt +++ b/src/aliceVision/geometry/CMakeLists.txt @@ -48,9 +48,13 @@ if (ALICEVISION_BUILD_SWIG_BINDING) SOURCES Geometry.i ) + if (CMAKE_SYSTEM_NAME MATCHES "Linux") + list(APPEND SWIG_EXTRA_COMPILE_OPTIONS "-DSWIGWORDSIZE64") + endif() + set_property( TARGET geometry - PROPERTY SWIG_COMPILE_OPTIONS -doxygen + PROPERTY SWIG_COMPILE_OPTIONS -doxygen ${SWIG_EXTRA_COMPILE_OPTIONS} ) target_include_directories(geometry @@ -72,6 +76,7 @@ if (ALICEVISION_BUILD_SWIG_BINDING) target_link_libraries(geometry PUBLIC aliceVision_geometry + ${Python3_LIBRARIES} ) install( diff --git a/src/aliceVision/global.i b/src/aliceVision/global.i index 31d3cf37f0..181d320d40 100644 --- a/src/aliceVision/global.i +++ b/src/aliceVision/global.i @@ -23,7 +23,9 @@ %} %inline %{ - typedef long unsigned int size_t; + #if defined(SWIGWORDSIZE64) + typedef long unsigned int size_t; + #endif typedef uint32_t IndexT; %} @@ -37,7 +39,10 @@ %template(IndexTSet) std::set; -%template(SizeTPair) std::pair; +namespace std { + %template(SizeTPair) pair; +} +%template(LongUintPair) std::pair; // As defined in aliceVision/types.hpp %template(Pair) std::pair; diff --git a/src/aliceVision/hdr/CMakeLists.txt b/src/aliceVision/hdr/CMakeLists.txt index c97d80a0ab..d998de1253 100644 --- a/src/aliceVision/hdr/CMakeLists.txt +++ b/src/aliceVision/hdr/CMakeLists.txt @@ -61,9 +61,13 @@ if (ALICEVISION_BUILD_SWIG_BINDING) SOURCES Hdr.i ) + if (CMAKE_SYSTEM_NAME MATCHES "Linux") + list(APPEND SWIG_EXTRA_COMPILE_OPTIONS "-DSWIGWORDSIZE64") + endif() + set_property( TARGET hdr - PROPERTY SWIG_COMPILE_OPTIONS -doxygen + PROPERTY SWIG_COMPILE_OPTIONS -doxygen ${SWIG_EXTRA_COMPILE_OPTIONS} ) target_include_directories(hdr @@ -89,6 +93,7 @@ if (ALICEVISION_BUILD_SWIG_BINDING) aliceVision_numeric aliceVision_image aliceVision_sfmData + ${Python3_LIBRARIES} ) install( diff --git a/src/aliceVision/sensorDB/CMakeLists.txt b/src/aliceVision/sensorDB/CMakeLists.txt index 07318334c8..044114d07d 100644 --- a/src/aliceVision/sensorDB/CMakeLists.txt +++ b/src/aliceVision/sensorDB/CMakeLists.txt @@ -39,9 +39,13 @@ if (ALICEVISION_BUILD_SWIG_BINDING) SOURCES SensorDB.i ) + if (CMAKE_SYSTEM_NAME MATCHES "Linux") + list(APPEND SWIG_EXTRA_COMPILE_OPTIONS "-DSWIGWORDSIZE64") + endif() + set_property( TARGET sensorDB - PROPERTY SWIG_COMPILE_OPTIONS -doxygen + PROPERTY SWIG_COMPILE_OPTIONS -doxygen ${SWIG_EXTRA_COMPILE_OPTIONS} ) target_include_directories(sensorDB @@ -63,6 +67,7 @@ if (ALICEVISION_BUILD_SWIG_BINDING) target_link_libraries(sensorDB PUBLIC aliceVision_sensorDB + ${Python3_LIBRARIES} ) install( diff --git a/src/aliceVision/sfmData/CMakeLists.txt b/src/aliceVision/sfmData/CMakeLists.txt index 8815dad4cf..7d8f18c3c9 100644 --- a/src/aliceVision/sfmData/CMakeLists.txt +++ b/src/aliceVision/sfmData/CMakeLists.txt @@ -63,9 +63,13 @@ if (ALICEVISION_BUILD_SWIG_BINDING) SOURCES SfMData.i ) + if (CMAKE_SYSTEM_NAME MATCHES "Linux") + list(APPEND SWIG_EXTRA_COMPILE_OPTIONS "-DSWIGWORDSIZE64") + endif() + set_property( TARGET sfmData - PROPERTY SWIG_COMPILE_OPTIONS -doxygen + PROPERTY SWIG_COMPILE_OPTIONS -doxygen ${SWIG_EXTRA_COMPILE_OPTIONS} ) target_include_directories(sfmData @@ -88,6 +92,7 @@ if (ALICEVISION_BUILD_SWIG_BINDING) PUBLIC aliceVision_sfmData aliceVision_camera + ${Python3_LIBRARIES} ) install( diff --git a/src/aliceVision/sfmDataIO/CMakeLists.txt b/src/aliceVision/sfmDataIO/CMakeLists.txt index 7c762ab104..9542925df3 100644 --- a/src/aliceVision/sfmDataIO/CMakeLists.txt +++ b/src/aliceVision/sfmDataIO/CMakeLists.txt @@ -108,9 +108,13 @@ if (ALICEVISION_BUILD_SWIG_BINDING) SOURCES SfMDataIO.i ) + if (CMAKE_SYSTEM_NAME MATCHES "Linux") + list(APPEND SWIG_EXTRA_COMPILE_OPTIONS "-DSWIGWORDSIZE64") + endif() + set_property( TARGET sfmDataIO - PROPERTY SWIG_COMPILE_OPTIONS -doxygen + PROPERTY SWIG_COMPILE_OPTIONS -doxygen ${SWIG_EXTRA_COMPILE_OPTIONS} ) target_include_directories(sfmDataIO @@ -132,6 +136,7 @@ if (ALICEVISION_BUILD_SWIG_BINDING) target_link_libraries(sfmDataIO PUBLIC aliceVision_sfmDataIO + ${Python3_LIBRARIES} ) install( diff --git a/src/aliceVision/stl/CMakeLists.txt b/src/aliceVision/stl/CMakeLists.txt index 2f21820973..248ec41255 100644 --- a/src/aliceVision/stl/CMakeLists.txt +++ b/src/aliceVision/stl/CMakeLists.txt @@ -29,9 +29,13 @@ if (ALICEVISION_BUILD_SWIG_BINDING) SOURCES Stl.i ) + if (CMAKE_SYSTEM_NAME MATCHES "Linux") + list(APPEND SWIG_EXTRA_COMPILE_OPTIONS "-DSWIGWORDSIZE64") + endif() + set_property( TARGET stl - PROPERTY SWIG_COMPILE_OPTIONS -doxygen + PROPERTY SWIG_COMPILE_OPTIONS -doxygen ${SWIG_EXTRA_COMPILE_OPTIONS} ) target_include_directories(stl @@ -55,6 +59,7 @@ if (ALICEVISION_BUILD_SWIG_BINDING) aliceVision_stl aliceVision_system Boost::container + ${Python3_LIBRARIES} ) install(