Skip to content

Commit 94f67d9

Browse files
authored
Merge pull request #1661 from alicevision/build/swigWindows
[build] SwigBinding: Add support for the Python binding with SWIG on Windows
2 parents c822d62 + 69e9cde commit 94f67d9

18 files changed

+187
-439
lines changed

.github/workflows/continuous-integration.yml

+22-6
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ jobs:
5959
-DALICEVISION_USE_CUDA=ON \
6060
-DALICEVISION_USE_CCTAG="${BUILD_CCTAG}" \
6161
-DALICEVISION_USE_POPSIFT=ON \
62-
-DALICEVISION_USE_ALEMBIC=ON \
62+
-DALICEVISION_USE_ALEMBIC=ON \
6363
-DOpenCV_DIR="${DEPS_INSTALL_DIR}/share/OpenCV" \
6464
-DALICEVISION_USE_OPENGV=ON \
6565
-DCeres_DIR="${DEPS_INSTALL_DIR}/share/Ceres" \
@@ -102,7 +102,7 @@ jobs:
102102
meshroom_avBranch=$(git ls-remote --heads https://github.com/alicevision/Meshroom.git $GITHUB_HEAD_REF | cut -f 1)
103103
if [ $meshroom_avBranch != "" ]; then git checkout $meshroom_avBranch; echo "Use Meshroom/$GITHUB_HEAD_REF"; fi
104104
export MESHROOM_INSTALL_DIR=$PWD
105-
export PYTHONPATH=$PWD:${ALICEVISION_ROOT}:${PYTHONPATH}
105+
export PYTHONPATH=$PWD:${ALICEVISION_ROOT}/bin:${PYTHONPATH}
106106
export PATH=$PATH:${ALICEVISION_ROOT}/bin
107107
export LD_LIBRARY_PATH=${ALICEVISION_ROOT}/lib:${ALICEVISION_ROOT}/lib64:${DEPS_INSTALL_DIR}/lib64:${DEPS_INSTALL_DIR}/lib:${LD_LIBRARY_PATH}
108108
mkdir ./outputData
@@ -121,7 +121,7 @@ jobs:
121121
cd SfM_quality_evaluation/
122122
# checkout a specific commit to ensure repeatability
123123
git checkout 36e3bf2d05c64d1726cb4a0e770923794f203f98
124-
export PYTHONPATH=${ALICEVISION_ROOT}:${PYTHONPATH}
124+
export PYTHONPATH=${ALICEVISION_ROOT}/bin:${PYTHONPATH}
125125
export LD_LIBRARY_PATH=${ALICEVISION_ROOT}/lib:${ALICEVISION_ROOT}/lib64:${DEPS_INSTALL_DIR}/lib64:${DEPS_INSTALL_DIR}/lib:${LD_LIBRARY_PATH}
126126
echo "ldd aliceVision_cameraInit"
127127
ldd ${ALICEVISION_ROOT}/bin/aliceVision_cameraInit
@@ -130,7 +130,7 @@ jobs:
130130
131131
- name: Python Binding - Unit Tests
132132
run: |
133-
export PYTHONPATH=${ALICEVISION_ROOT}:${PYTHONPATH}
133+
export PYTHONPATH=${ALICEVISION_ROOT}/bin:${PYTHONPATH}
134134
export LD_LIBRARY_PATH=${ALICEVISION_ROOT}/lib:${ALICEVISION_ROOT}/lib64:${DEPS_INSTALL_DIR}/lib64:${DEPS_INSTALL_DIR}/lib:${LD_LIBRARY_PATH}
135135
pip3 install pytest
136136
pytest ./pyTests
@@ -146,6 +146,7 @@ jobs:
146146
CTEST_OUTPUT_ON_FAILURE: 1
147147
ALICEVISION_ROOT: '${{ github.workspace }}/install'
148148
VCPKG_ROOT: '${{ github.workspace}}\..\vcpkg'
149+
PYTHONPATH: '${{ github.workspace }}/install/bundle/bin'
149150
steps:
150151
- name: Checkout
151152
uses: actions/checkout@v2
@@ -227,13 +228,28 @@ jobs:
227228
-DALICEVISION_USE_OPENGV=OFF
228229
-DALICEVISION_BUILD_PHOTOMETRICSTEREO=OFF
229230
-DALICEVISION_BUILD_SEGMENTATION=OFF
231+
-DALICEVISION_BUILD_SWIG_BINDING=ON
230232
-DBOOST_NO_CXX11=ON
231233

232-
# This input tells run-cmake to consume the vcpkg.cmake toolchain file set by run-vcpkg.
233234
cmakeBuildType: Release
234235
buildWithCMake: true
235236

236-
- name: UnitTests
237+
- name: Bundle
238+
uses: lukka/run-cmake@v3
239+
with:
240+
cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
241+
cmakeListsTxtPath: '${{ github.workspace }}/CMakeLists.txt'
242+
buildDirectory: ${{ env.buildDir }}
243+
buildWithCMakeArgs: '--config Release --target bundle'
244+
cmakeAppendedArgs: -DCMAKE_INSTALL_PREFIX:PATH=${{ env.ALICEVISION_ROOT }}
245+
cmakeBuildType: Release
246+
buildWithCMake: true
247+
248+
- name: Python Binding - Unit Tests
249+
run: |
250+
${{ env.VCPKG_ROOT }}\installed\x64-windows\tools\python3\python -m pytest ./pyTests
251+
252+
- name: Unit Tests
237253
uses: lukka/run-cmake@v3
238254
with:
239255
cmakeListsOrSettingsJson: CMakeListsTxtAdvanced

CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.12)
1+
cmake_minimum_required(VERSION 3.14)
22
project(aliceVision LANGUAGES C CXX)
33

44
option(ALICEVISION_BUILD_DEPENDENCIES "Build all AliceVision dependencies" OFF)

pyTests/sfmData/test_sfmdata.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ def test_sfmdata_get_set_folders():
340340
data.getRelativeMatchesFolders()[0] == relative_folder
341341

342342
# Add single features and matches folders
343-
other_folder = "../other"
343+
other_folder = os.path.join("..", "other")
344344
data.addFeaturesFolder(other_folder)
345345
data.addMatchesFolder(other_folder)
346346
assert len(data.getFeaturesFolders()) == 2, \
@@ -354,8 +354,8 @@ def test_sfmdata_get_set_folders():
354354
assert os.path.relpath(data.getMatchesFolders()[1], projectFolder) == other_folder
355355

356356
# Reset features and matches folders and add new ones
357-
new_folder1 = "../new"
358-
new_folder2 = "../.."
357+
new_folder1 = os.path.join("..", "new")
358+
new_folder2 = os.path.join("..", "..")
359359
new_folder3 = "folder"
360360
new_folders = [new_folder1, new_folder2, new_folder3]
361361

src/CMakeLists.txt

+3
Original file line numberDiff line numberDiff line change
@@ -770,6 +770,9 @@ endif()
770770
if(ALICEVISION_BUILD_SWIG_BINDING)
771771
find_package(SWIG REQUIRED) # SWIG dependency
772772
if(SWIG_FOUND)
773+
# Remove CMake warnings related to SWIG old policies
774+
cmake_policy(SET CMP0078 NEW) # Use the specified module name for the target's name
775+
cmake_policy(SET CMP0086 NEW) # Use "-module {name}" when the module name has been set with SWIG_MODULE_NAME
773776
include(UseSWIG)
774777
message(STATUS "SWIG found.")
775778
else()

src/aliceVision/CMakeLists.txt

+10-46
Original file line numberDiff line numberDiff line change
@@ -82,53 +82,17 @@ if (ALICEVISION_BUILD_PHOTOMETRICSTEREO)
8282
endif()
8383

8484

85-
if(ALICEVISION_BUILD_SWIG_BINDING)
86-
set(UseSWIG_TARGET_NAME_PREFERENCE STANDARD)
87-
set_property(SOURCE aliceVision.i PROPERTY CPLUSPLUS ON)
88-
set_property(SOURCE aliceVision.i PROPERTY SWIG_MODULE_NAME pyalicevision)
89-
90-
swig_add_library(pyalicevision
91-
TYPE MODULE
92-
LANGUAGE python
85+
if (ALICEVISION_BUILD_SWIG_BINDING)
86+
alicevision_swig_add_library(pyalicevision
9387
SOURCES aliceVision.i
94-
)
95-
96-
set_property(
97-
TARGET pyalicevision
98-
PROPERTY SWIG_COMPILE_OPTIONS -doxygen
99-
)
100-
101-
target_include_directories(pyalicevision
102-
PRIVATE
103-
../include
104-
${ALICEVISION_ROOT}/include
105-
${Python3_INCLUDE_DIRS}
106-
${Python3_NumPy_INCLUDE_DIRS}
107-
)
108-
set_property(
109-
TARGET pyalicevision
110-
PROPERTY SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON
111-
)
112-
set_property(
113-
TARGET pyalicevision
114-
PROPERTY COMPILE_OPTIONS -std=c++20
115-
)
116-
117-
target_link_libraries(pyalicevision
118-
PUBLIC
119-
aliceVision_numeric
120-
)
121-
install(
122-
TARGETS
123-
pyalicevision
124-
DESTINATION
125-
${CMAKE_INSTALL_PREFIX}
126-
)
127-
install(
128-
FILES
129-
${CMAKE_CURRENT_BINARY_DIR}/pyalicevision.py
130-
DESTINATION
131-
${CMAKE_INSTALL_PREFIX}
88+
PUBLIC_LINKS
89+
aliceVision_numeric
90+
${Python3_LIBRARIES}
91+
PRIVATE_INCLUDE_DIRS
92+
../include
93+
${ALICEVISION_ROOT}/include
94+
${Python3_INCLUDE_DIRS}
95+
${Python3_NumPy_INCLUDE_DIRS}
13296
)
13397
endif()
13498

src/aliceVision/camera/CMakeLists.txt

+9-46
Original file line numberDiff line numberDiff line change
@@ -61,52 +61,15 @@ alicevision_add_test(equidistant_test.cpp NAME "camera_equidistant"
6161

6262
# SWIG Binding
6363
if (ALICEVISION_BUILD_SWIG_BINDING)
64-
set(UseSWIG_TARGET_NAME_PREFERENCE STANDARD)
65-
set_property(SOURCE Camera.i PROPERTY CPLUSPLUS ON)
66-
set_property(SOURCE Camera.i PROPERTY SWIG_MODULE_NAME camera)
67-
68-
swig_add_library(camera
69-
TYPE MODULE
70-
LANGUAGE python
64+
alicevision_swig_add_library(camera
7165
SOURCES Camera.i
72-
)
73-
74-
set_property(
75-
TARGET camera
76-
PROPERTY SWIG_COMPILE_OPTIONS -doxygen
77-
)
78-
79-
target_include_directories(camera
80-
PRIVATE
81-
../include
82-
${ALICEVISION_ROOT}/include
83-
${Python3_INCLUDE_DIRS}
84-
${Python3_NumPy_INCLUDE_DIRS}
85-
)
86-
set_property(
87-
TARGET camera
88-
PROPERTY SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON
89-
)
90-
set_property(
91-
TARGET camera
92-
PROPERTY COMPILE_OPTIONS -std=c++20
93-
)
94-
95-
target_link_libraries(camera
96-
PUBLIC
97-
aliceVision_camera
98-
)
99-
100-
install(
101-
TARGETS
102-
camera
103-
DESTINATION
104-
${CMAKE_INSTALL_PREFIX}
105-
)
106-
install(
107-
FILES
108-
${CMAKE_CURRENT_BINARY_DIR}/camera.py
109-
DESTINATION
110-
${CMAKE_INSTALL_PREFIX}
66+
PUBLIC_LINKS
67+
aliceVision_camera
68+
${Python3_LIBRARIES}
69+
PRIVATE_INCLUDE_DIRS
70+
../include
71+
${ALICEVISION_ROOT}/include
72+
${Python3_INCLUDE_DIRS}
73+
${Python3_NumPy_INCLUDE_DIRS}
11174
)
11275
endif()

src/aliceVision/geometry/CMakeLists.txt

+9-46
Original file line numberDiff line numberDiff line change
@@ -38,52 +38,15 @@ alicevision_add_test(frustumIntersection_test.cpp
3838

3939
# SWIG Binding
4040
if (ALICEVISION_BUILD_SWIG_BINDING)
41-
set(UseSWIG_TARGET_NAME_PREFERENCE STANDARD)
42-
set_property(SOURCE Geometry.i PROPERTY CPLUSPLUS ON)
43-
set_property(SOURCE Geometry.i PROPERTY SWIG_MODULE_NAME geometry)
44-
45-
swig_add_library(geometry
46-
TYPE MODULE
47-
LANGUAGE python
41+
alicevision_swig_add_library(geometry
4842
SOURCES Geometry.i
49-
)
50-
51-
set_property(
52-
TARGET geometry
53-
PROPERTY SWIG_COMPILE_OPTIONS -doxygen
54-
)
55-
56-
target_include_directories(geometry
57-
PRIVATE
58-
../include
59-
${ALICEVISION_ROOT}/include
60-
${Python3_INCLUDE_DIRS}
61-
${Python3_NumPy_INCLUDE_DIRS}
62-
)
63-
set_property(
64-
TARGET geometry
65-
PROPERTY SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON
66-
)
67-
set_property(
68-
TARGET geometry
69-
PROPERTY COMPILE_OPTIONS -std=c++20
70-
)
71-
72-
target_link_libraries(geometry
73-
PUBLIC
74-
aliceVision_geometry
75-
)
76-
77-
install(
78-
TARGETS
79-
geometry
80-
DESTINATION
81-
${CMAKE_INSTALL_PREFIX}
82-
)
83-
install(
84-
FILES
85-
${CMAKE_CURRENT_BINARY_DIR}/geometry.py
86-
DESTINATION
87-
${CMAKE_INSTALL_PREFIX}
43+
PUBLIC_LINKS
44+
aliceVision_geometry
45+
${Python3_LIBRARIES}
46+
PRIVATE_INCLUDE_DIRS
47+
../include
48+
${ALICEVISION_ROOT}/include
49+
${Python3_INCLUDE_DIRS}
50+
${Python3_NumPy_INCLUDE_DIRS}
8851
)
8952
endif()

src/aliceVision/global.i

+9-1
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,18 @@
2323
%}
2424

2525
%inline %{
26-
typedef long unsigned int size_t;
2726
typedef uint32_t IndexT;
2827
%}
2928

29+
#ifdef LINUXPLATFORM
30+
%inline %{
31+
typedef long unsigned int size_t;
32+
%}
33+
#else
34+
%inline %{
35+
typedef unsigned long long size_t;
36+
%}
37+
#endif
3038

3139
%template(IntVector) std::vector<int>;
3240
%template(DoubleVector) std::vector<double>;

src/aliceVision/hdr/CMakeLists.txt

+13-50
Original file line numberDiff line numberDiff line change
@@ -51,56 +51,19 @@ alicevision_add_test(hdrLaguerre_test.cpp
5151

5252
# SWIG Binding
5353
if (ALICEVISION_BUILD_SWIG_BINDING)
54-
set(UseSWIG_TARGET_NAME_PREFERENCE STANDARD)
55-
set_property(SOURCE Hdr.i PROPERTY CPLUSPLUS ON)
56-
set_property(SOURCE Hdr.i PROPERTY SWIG_MODULE_NAME hdr)
57-
58-
swig_add_library(hdr
59-
TYPE MODULE
60-
LANGUAGE python
54+
alicevision_swig_add_library(hdr
6155
SOURCES Hdr.i
62-
)
63-
64-
set_property(
65-
TARGET hdr
66-
PROPERTY SWIG_COMPILE_OPTIONS -doxygen
67-
)
68-
69-
target_include_directories(hdr
70-
PRIVATE
71-
../include
72-
${ALICEVISION_ROOT}/include
73-
${Python3_INCLUDE_DIRS}
74-
${Python3_NumPy_INCLUDE_DIRS}
75-
)
76-
set_property(
77-
TARGET hdr
78-
PROPERTY SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON
79-
)
80-
set_property(
81-
TARGET hdr
82-
PROPERTY COMPILE_OPTIONS -std=c++20
83-
)
84-
85-
target_link_libraries(hdr
86-
PUBLIC
87-
aliceVision_hdr
88-
aliceVision_system
89-
aliceVision_numeric
90-
aliceVision_image
91-
aliceVision_sfmData
92-
)
93-
94-
install(
95-
TARGETS
96-
hdr
97-
DESTINATION
98-
${CMAKE_INSTALL_PREFIX}
99-
)
100-
install(
101-
FILES
102-
${CMAKE_CURRENT_BINARY_DIR}/hdr.py
103-
DESTINATION
104-
${CMAKE_INSTALL_PREFIX}
56+
PUBLIC_LINKS
57+
aliceVision_hdr
58+
aliceVision_system
59+
aliceVision_numeric
60+
aliceVision_image
61+
aliceVision_sfmData
62+
${Python3_LIBRARIES}
63+
PRIVATE_INCLUDE_DIRS
64+
../include
65+
${ALICEVISION_ROOT}/include
66+
${Python3_INCLUDE_DIRS}
67+
${Python3_NumPy_INCLUDE_DIRS}
10568
)
10669
endif()

0 commit comments

Comments
 (0)