From 5358e6c949cfafa6140e8c7ffe762c0ceb50d31c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 14 Mar 2025 16:38:57 +0100 Subject: [PATCH 1/6] Update to newer OpenCV version to fix build issues in protobuf dependency when using VS 2022. --- SuperBuild/cmake/External-OpenCV.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SuperBuild/cmake/External-OpenCV.cmake b/SuperBuild/cmake/External-OpenCV.cmake index 293d788a7..de4c0f392 100644 --- a/SuperBuild/cmake/External-OpenCV.cmake +++ b/SuperBuild/cmake/External-OpenCV.cmake @@ -36,7 +36,7 @@ ExternalProject_Add(${_proj_name} STAMP_DIR ${_SB_BINARY_DIR}/stamp #--Download step-------------- DOWNLOAD_DIR ${SB_DOWNLOAD_DIR} - URL https://github.com/opencv/opencv/archive/4.5.0.zip + URL https://github.com/opencv/opencv/archive/4.11.0.zip #--Update/Patch step---------- UPDATE_COMMAND "" #--Configure step------------- From abb348bf855531de1282e0eaf7bbc1ea7b230dba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 14 Mar 2025 16:39:22 +0100 Subject: [PATCH 2/6] Fix path in OpenSfM build logic when using VS 2022. --- SuperBuild/cmake/External-OpenSfM.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SuperBuild/cmake/External-OpenSfM.cmake b/SuperBuild/cmake/External-OpenSfM.cmake index f50c8e85d..3a3ad95f2 100644 --- a/SuperBuild/cmake/External-OpenSfM.cmake +++ b/SuperBuild/cmake/External-OpenSfM.cmake @@ -5,7 +5,7 @@ ProcessorCount(nproc) set(EXTRA_INCLUDE_DIRS "") if(WIN32) - set(OpenCV_DIR "${SB_INSTALL_DIR}/x64/vc16/lib") + set(OpenCV_DIR "${SB_INSTALL_DIR}/x64/vc17/lib") set(BUILD_CMD ${CMAKE_COMMAND} --build "${SB_BUILD_DIR}/opensfm" --config "${CMAKE_BUILD_TYPE}") else() set(BUILD_CMD make "-j${nproc}") From 2978d6927abac50b25f30b51d861df3078236420 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 14 Mar 2025 16:39:45 +0100 Subject: [PATCH 3/6] Add missing dependency to dateutils for python venv. --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index dbfa3599f..bf69f570f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -38,3 +38,4 @@ codem==0.24.0 trimesh==3.17.1 pandas==1.5.2 piexif==1.1.3 +python-dateutil==2.9.0 From 13af2b0f47565e5549d37a6d512757020aa7da63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 14 Mar 2025 16:40:20 +0100 Subject: [PATCH 4/6] Hacky fix to make OpenCV dll (cv2.*.pyd) load properly. Fails if imported after PIL. --- run.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/run.py b/run.py index ac9615ea7..44d62aefc 100755 --- a/run.py +++ b/run.py @@ -6,6 +6,9 @@ print("Ups! ODM needs to run with Python 3. It seems you launched it with Python 2. Try using: python3 run.py ... ") sys.exit(1) +# Hack: early import cv2 because PIL init will break DLL loading. +import cv2 + import os from opendm import log from opendm import config From 960decbcd07cf44f888fa4dc14342093437b1451 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Mon, 17 Mar 2025 09:27:56 +0100 Subject: [PATCH 5/6] Rework patch to OpenSfM build config to still support VS 16 (v142 toolset). --- SuperBuild/cmake/External-OpenSfM.cmake | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/SuperBuild/cmake/External-OpenSfM.cmake b/SuperBuild/cmake/External-OpenSfM.cmake index 3a3ad95f2..4423b256b 100644 --- a/SuperBuild/cmake/External-OpenSfM.cmake +++ b/SuperBuild/cmake/External-OpenSfM.cmake @@ -5,7 +5,13 @@ ProcessorCount(nproc) set(EXTRA_INCLUDE_DIRS "") if(WIN32) - set(OpenCV_DIR "${SB_INSTALL_DIR}/x64/vc17/lib") + if (MSVC_TOOLSET_VERSION EQUAL 143) + set(OpenCV_DIR "${SB_INSTALL_DIR}/x64/vc17/lib") + elseif(MSVC_TOOLSET_VERSION EQUAL 142) + set(OpenCV_DIR "${SB_INSTALL_DIR}/x64/vc16/lib") + else() + message(FATAL_ERROR "Unsupported MSVC toolset version detected: ${MSVC_TOOLSET_VERSION}") + endif() set(BUILD_CMD ${CMAKE_COMMAND} --build "${SB_BUILD_DIR}/opensfm" --config "${CMAKE_BUILD_TYPE}") else() set(BUILD_CMD make "-j${nproc}") From c64c77d879321b0431f35f25cfb4d313b60427dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Mon, 17 Mar 2025 09:44:08 +0100 Subject: [PATCH 6/6] Add python version sanity check for PDAL, since resulting library will match Python used for build, which may fail if version is not the one of the embedded Python. --- SuperBuild/cmake/External-PDALPython.cmake | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/SuperBuild/cmake/External-PDALPython.cmake b/SuperBuild/cmake/External-PDALPython.cmake index 410b77bf1..628478540 100644 --- a/SuperBuild/cmake/External-PDALPython.cmake +++ b/SuperBuild/cmake/External-PDALPython.cmake @@ -6,6 +6,12 @@ if (WIN32) -DPython3_NumPy_INCLUDE_DIRS=${PYTHON_HOME}/lib/site-packages/numpy/core/include) endif() +execute_process(COMMAND ${PYTHON_EXE_PATH} "-V" OUTPUT_VARIABLE PYTHON_VERSION) +string(STRIP ${PYTHON_VERSION} PYTHON_VERSION) +if(NOT (${PYTHON_VERSION} MATCHES "Python 3.8.1")) + message(FATAL_ERROR "Python 3.8.1 is bundled with ODM. To avoid version mismatches in built PDALPython libraries, please ensure this exact version is used during the build. Detected version: ${PYTHON_VERSION} (at ${PYTHON_EXE_PATH}).") +endif() + ExternalProject_Add(${_proj_name} DEPENDS pdal PREFIX ${_SB_BINARY_DIR}