From f6d8739863003fa567b79121807a89042390ddb7 Mon Sep 17 00:00:00 2001 From: Pablo Castelo Date: Wed, 25 Feb 2026 15:12:57 +0100 Subject: [PATCH 1/5] adaption to CUDA13/GCC13/ARM arch --- CMakeLists.txt | 6 +++++- src/CMakeLists.txt | 4 +++- src/aliceVision/gpu/gpu.cpp | 2 ++ src/cmake/Dependencies.cmake | 42 ++++++++++++++++++++++++------------ 4 files changed, 38 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9bd72150ef..af813a4a93 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,11 @@ option(AV_BUILD_ALICEVISION "Enable building of AliceVision" ON) option(AV_EIGEN_MEMORY_ALIGNMENT "Enable Eigen memory alignment" ON) option(ALICEVISION_BUILD_TESTS "Build AliceVision tests" OFF) option(AV_USE_CUDA "Enable CUDA" ON) -option(AV_USE_OPENMP "Enable OpenMP" $<$,OFF,ON>) # disable by default for AppleClang +option(AV_USE_OPENMP "Enable OpenMP" ON) # disabled below for AppleClang +if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + set(AV_USE_OPENMP OFF CACHE BOOL "Enable OpenMP" FORCE) +endif() + option(BUILD_SHARED_LIBS "Build shared libraries" ON) option(ALICEVISION_INSTALL_MESHROOM_PLUGIN "Install AliceVision's plugin for Meshroom" ON) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fd7a2d9e8c..2b86cbc149 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -692,7 +692,9 @@ if (ALICEVISION_HAVE_CUDA) set(CUDA_NVCC_FLAGS_DEBUG "${CUDA_NVCC_FLAGS_DEBUG};-G;-g") # set(CUDA_NVCC_FLAGS_RELEASE "${CUDA_NVCC_FLAGS_RELEASE};-O3") - if (CUDA_VERSION_MAJOR VERSION_GREATER_EQUAL 12) + if (CUDA_VERSION_MAJOR VERSION_GREATER_EQUAL 13) + set(ALICEVISION_CUDA_CC_LIST_BASIC 50 52 60 61 62 70 72 75 80 86 87 89 90 100 120) + elseif (CUDA_VERSION_MAJOR VERSION_GREATER_EQUAL 12) set(ALICEVISION_CUDA_CC_LIST_BASIC 50 52 60 61 62 70 72 75 80 86 87 89 90) elseif (CUDA_VERSION VERSION_GREATER_EQUAL 11.8) set(ALICEVISION_CUDA_CC_LIST_BASIC 35 50 52 60 61 62 70 72 75 80 86 87 89 90) diff --git a/src/aliceVision/gpu/gpu.cpp b/src/aliceVision/gpu/gpu.cpp index afb6e8756e..04c72c3917 100644 --- a/src/aliceVision/gpu/gpu.cpp +++ b/src/aliceVision/gpu/gpu.cpp @@ -113,7 +113,9 @@ std::string gpuInformationCUDA() << "\t- id: " << i << std::endl << "\t- name: " << deviceProperties.name << std::endl << "\t- compute capability: " << deviceProperties.major << "." << deviceProperties.minor << std::endl + #if CUDART_VERSION < 13000 //clockRate removed in CUDA 13 << "\t- clock frequency (kHz): " << deviceProperties.clockRate << std::endl + #endif << "\t- total device memory: " << deviceProperties.totalGlobalMem / (1024 * 1024) << " MB " << std::endl << "\t- device memory available: " << avail / (1024 * 1024) << " MB " << std::endl << "\t- per-block shared memory: " << deviceProperties.sharedMemPerBlock << std::endl diff --git a/src/cmake/Dependencies.cmake b/src/cmake/Dependencies.cmake index a87a2cc679..7d891d715d 100644 --- a/src/cmake/Dependencies.cmake +++ b/src/cmake/Dependencies.cmake @@ -97,15 +97,21 @@ message(STATUS "AV_BUILD_DEPENDENCIES_PARALLEL: ${AV_BUILD_DEPENDENCIES_PARALLEL set(BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/external") -set(CMAKE_CORE_BUILD_FLAGS - -DCMAKE_BUILD_TYPE=${DEPS_CMAKE_BUILD_TYPE} - -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS} - -DCMAKE_INSTALL_DO_STRIP:BOOL=${CMAKE_INSTALL_DO_STRIP} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} +set(AV_CUDA_ARCHITECTURES "" CACHE STRING "CUDA architectures for all sub-dependencies (CMake CUDA_ARCHITECTURES syntax). E.g. '120-real' for Blackwell, '86-real;89-real' for Ampere/Ada, 'native' to auto-detect.") +set(AV_ALICEVISION_CUDA_CC_LIST "" CACHE STRING "CUDA compute capability list for AliceVision itself (integers, e.g. '120')") + +set(CMAKE_CORE_BUILD_FLAGS + -DCMAKE_BUILD_TYPE=${DEPS_CMAKE_BUILD_TYPE} + -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS} + -DCMAKE_INSTALL_DO_STRIP:BOOL=${CMAKE_INSTALL_DO_STRIP} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_CXX_STANDARD=20 ) +if(AV_CUDA_ARCHITECTURES) + list(APPEND CMAKE_CORE_BUILD_FLAGS -DCMAKE_CUDA_ARCHITECTURES=${AV_CUDA_ARCHITECTURES}) +endif() #### START EXTERNAL #### if(AV_BUILD_ZLIB) @@ -239,15 +245,22 @@ endif() if(AV_BUILD_ASSIMP) set(ASSIMP_TARGET assimp) - - set(ASSIMP_BUILD_OPTIONS - -DASSIMP_BUILD_ASSIMP_TOOLS:BOOL=OFF - -DASSIMP_BUILD_TESTS:BOOL=OFF + set(ASSIMP_BUILD_OPTIONS + -DASSIMP_BUILD_ASSIMP_TOOLS:BOOL=OFF + -DASSIMP_BUILD_TESTS:BOOL=OFF -DASSIMP_BUILD_DRACO:BOOL=ON ) - set(ASSIMP_AV_VERSION 5.2.5) + # GCC 13 requires explicit include in draco (bundled with assimp 5.2.5) + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "13") + set(ASSIMP_PATCH_COMMAND + PATCH_COMMAND sed -i "s|#include |#include \\n#include |" /contrib/draco/src/draco/io/file_utils.h + ) + else() + set(ASSIMP_PATCH_COMMAND "") + endif() + ExternalProject_Add(${ASSIMP_TARGET} URL https://github.com/assimp/assimp/archive/refs/tags/v5.2.5.tar.gz URL_HASH MD5=0b5a5a2714f1126b9931cdb95f512c91 @@ -258,6 +271,7 @@ if(AV_BUILD_ASSIMP) SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/assimp BINARY_DIR ${BUILD_DIR}/assimp_build INSTALL_DIR ${CMAKE_INSTALL_PREFIX} + ${ASSIMP_PATCH_COMMAND} CONFIGURE_COMMAND ${CMAKE_COMMAND} ${CMAKE_CORE_BUILD_FLAGS} ${ASSIMP_BUILD_OPTIONS} ${ZLIB_CMAKE_FLAGS} @@ -268,8 +282,7 @@ if(AV_BUILD_ASSIMP) BUILD_COMMAND $(MAKE) -j${AV_BUILD_DEPENDENCIES_PARALLEL} DEPENDS ${ZLIB_TARGET} ) - - set(ASSIMP_CMAKE_FLAGS + set(ASSIMP_CMAKE_FLAGS -DAssimp_DIR:PATH=${CMAKE_INSTALL_PREFIX}/lib/cmake/assimp-${ASSIMP_AV_VERSION} ) endif() @@ -1464,8 +1477,9 @@ if(AV_BUILD_ALICEVISION) BINARY_DIR ${BUILD_DIR}/aliceVision_build INSTALL_DIR ${CMAKE_INSTALL_PREFIX} CONFIGURE_COMMAND ${CMAKE_COMMAND} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DBUILD_SHARED_LIBS:BOOL=ON -DTARGET_ARCHITECTURE=core + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DBUILD_SHARED_LIBS:BOOL=ON -DTARGET_ARCHITECTURE=generic -DALICEVISION_ROOT=${ALICEVISION_ROOT} + -DALICEVISION_CUDA_CC_LIST=${AV_ALICEVISION_CUDA_CC_LIST} -DALICEVISION_USE_ALEMBIC=ON -DMINIGLOG=ON -DALICEVISION_USE_CCTAG=${AV_BUILD_CCTAG} From 1747f1b9d2034d5770c6f4522d12b85f1715d572 Mon Sep 17 00:00:00 2001 From: Pablo Manuel Castelo Vigo Date: Thu, 26 Feb 2026 16:03:20 +0100 Subject: [PATCH 2/5] allow CMake list syntax Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/cmake/Dependencies.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cmake/Dependencies.cmake b/src/cmake/Dependencies.cmake index 7d891d715d..3db49c13f6 100644 --- a/src/cmake/Dependencies.cmake +++ b/src/cmake/Dependencies.cmake @@ -110,7 +110,8 @@ set(CMAKE_CORE_BUILD_FLAGS ) if(AV_CUDA_ARCHITECTURES) - list(APPEND CMAKE_CORE_BUILD_FLAGS -DCMAKE_CUDA_ARCHITECTURES=${AV_CUDA_ARCHITECTURES}) + string(REPLACE ";" "\;" AV_CUDA_ARCHITECTURES_ESCAPED "${AV_CUDA_ARCHITECTURES}") + list(APPEND CMAKE_CORE_BUILD_FLAGS "-DCMAKE_CUDA_ARCHITECTURES:STRING=${AV_CUDA_ARCHITECTURES_ESCAPED}") endif() #### START EXTERNAL #### From e47a31a2c2acae6da8955aa2257d5a710dca13e4 Mon Sep 17 00:00:00 2001 From: Pablo Castelo Date: Tue, 3 Mar 2026 16:14:23 +0100 Subject: [PATCH 3/5] allow emptyAV_ALICEVISION_CUDA_CC_LIST --- src/cmake/Dependencies.cmake | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cmake/Dependencies.cmake b/src/cmake/Dependencies.cmake index 3db49c13f6..20629e5e7e 100644 --- a/src/cmake/Dependencies.cmake +++ b/src/cmake/Dependencies.cmake @@ -1480,7 +1480,9 @@ if(AV_BUILD_ALICEVISION) CONFIGURE_COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DBUILD_SHARED_LIBS:BOOL=ON -DTARGET_ARCHITECTURE=generic -DALICEVISION_ROOT=${ALICEVISION_ROOT} - -DALICEVISION_CUDA_CC_LIST=${AV_ALICEVISION_CUDA_CC_LIST} + if(AV_ALICEVISION_CUDA_CC_LIST) + list(APPEND cmake_args "-DALICEVISION_CUDA_CC_LIST:STRING=${AV_ALICEVISION_CUDA_CC_LIST}") + endif() -DALICEVISION_USE_ALEMBIC=ON -DMINIGLOG=ON -DALICEVISION_USE_CCTAG=${AV_BUILD_CCTAG} From 4acb2edcf56cc6ffcbf597231c2bcb5ce2149b6f Mon Sep 17 00:00:00 2001 From: Pablo Castelo Date: Tue, 3 Mar 2026 16:41:33 +0100 Subject: [PATCH 4/5] patch assimp for explicit cstdint without sed dependence --- src/cmake/Dependencies.cmake | 4 ++- src/cmake/PatchAssimpDracoForGCC13.cmake | 33 ++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 src/cmake/PatchAssimpDracoForGCC13.cmake diff --git a/src/cmake/Dependencies.cmake b/src/cmake/Dependencies.cmake index 20629e5e7e..0c0b31eb37 100644 --- a/src/cmake/Dependencies.cmake +++ b/src/cmake/Dependencies.cmake @@ -256,7 +256,9 @@ if(AV_BUILD_ASSIMP) # GCC 13 requires explicit include in draco (bundled with assimp 5.2.5) if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "13") set(ASSIMP_PATCH_COMMAND - PATCH_COMMAND sed -i "s|#include |#include \\n#include |" /contrib/draco/src/draco/io/file_utils.h + PATCH_COMMAND ${CMAKE_COMMAND} + -DINPUT_FILE=/contrib/draco/src/draco/io/file_utils.h + -P ${CMAKE_SOURCE_DIR}/src/cmake/PatchAssimpDracoForGCC13.cmake ) else() set(ASSIMP_PATCH_COMMAND "") diff --git a/src/cmake/PatchAssimpDracoForGCC13.cmake b/src/cmake/PatchAssimpDracoForGCC13.cmake new file mode 100644 index 0000000000..510f372bf3 --- /dev/null +++ b/src/cmake/PatchAssimpDracoForGCC13.cmake @@ -0,0 +1,33 @@ +if(NOT DEFINED INPUT_FILE) + message(FATAL_ERROR "INPUT_FILE is required") +endif() + +if(NOT EXISTS "${INPUT_FILE}") + message(FATAL_ERROR "Patch target file not found: ${INPUT_FILE}") +endif() + +file(READ "${INPUT_FILE}" FILE_CONTENT) + +if(FILE_CONTENT MATCHES "#include ") + message(STATUS "Assimp draco patch already applied: ${INPUT_FILE}") + return() +endif() + +set(NEEDLE "#include ") +if(NOT FILE_CONTENT MATCHES "${NEEDLE}") + message(FATAL_ERROR "Expected include not found in ${INPUT_FILE}: ${NEEDLE}") +endif() + +string(REPLACE + "#include " + "#include \n#include " + PATCHED_CONTENT + "${FILE_CONTENT}" +) + +if(PATCHED_CONTENT STREQUAL FILE_CONTENT) + message(FATAL_ERROR "Failed to patch ${INPUT_FILE}") +endif() + +file(WRITE "${INPUT_FILE}" "${PATCHED_CONTENT}") +message(STATUS "Applied GCC 13 draco cstdint patch: ${INPUT_FILE}") From 577a867e78c3a46b3fec1a0f39d1da4a8f9ddac3 Mon Sep 17 00:00:00 2001 From: Pablo Castelo Date: Tue, 3 Mar 2026 16:45:00 +0100 Subject: [PATCH 5/5] Sort using natural/numeric ordering to avoid errors on 3 digit CCs --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2b86cbc149..b32d5501c9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -711,7 +711,7 @@ if (ALICEVISION_HAVE_CUDA) CACHE STRING "CUDA CC versions to compile") # Add all requested CUDA CCs to the command line for offline compilation - list(SORT ALICEVISION_CUDA_CC_LIST) + list(SORT ALICEVISION_CUDA_CC_LIST COMPARE NATURAL ORDER ASCENDING) foreach (ALICEVISION_CC_VERSION ${ALICEVISION_CUDA_CC_LIST}) set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};-gencode;arch=compute_${ALICEVISION_CC_VERSION},code=sm_${ALICEVISION_CC_VERSION}") endforeach()