diff --git a/CMakeLists.txt b/CMakeLists.txt index 313a704c8..1e39e8dbf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(aliceVision LANGUAGES C CXX) +project(aliceVision LANGUAGES C CXX CUDA) option(ALICEVISION_BUILD_DEPENDENCIES "Build all AliceVision dependencies" OFF) option(AV_BUILD_ALICEVISION "Enable building of AliceVision" ON) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index dfa00ff0b..0c1a917d9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -123,7 +123,7 @@ if (ALICEVISION_USE_RPATH) set(CMAKE_MACOSX_RPATH 1) set(CMAKE_INSTALL_RPATH "@loader_path/../${CMAKE_INSTALL_LIBDIR};@loader_path") elseif (UNIX) - set(CMAKE_INSTALL_RPATH "\\$ORIGIN/../${CMAKE_INSTALL_LIBDIR};\\$ORIGIN") + set(CMAKE_INSTALL_RPATH "\\$ORIGIN/../${CMAKE_INSTALL_LIBDIR};\\$ORIGIN;/opt/alicevision/lib") endif() endif() @@ -180,8 +180,8 @@ endmacro(add_target_properties) # ============================================================================== set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) -include(OptimizeForArchitecture) -OptimizeForArchitecture() +#include(OptimizeForArchitecture) +#OptimizeForArchitecture() #we don't want this as it causes a segfault and anyway we want to refer to makepkg config set(ALICEVISION_HAVE_SSE 0) if (SSE2_FOUND OR TARGET_ARCHITECTURE STREQUAL "native") if (MSVC AND NOT ${CMAKE_CL_64}) @@ -373,7 +373,7 @@ endif() # ============================================================================== # Eigen # ============================================================================== -find_package(Eigen3 3.3 REQUIRED) +find_package(Eigen3 REQUIRED) if (Eigen3_FOUND OR EIGEN3_FOUND) # message(STATUS "EIGEN_INCLUDE_DIR: ${EIGEN_INCLUDE_DIR}") if (AV_EIGEN_MEMORY_ALIGNMENT) @@ -448,7 +448,9 @@ endif() # Flann # ============================================================================== if (ALICEVISION_BUILD_SFM) - find_package(lz4 REQUIRED) + find_package(PkgConfig REQUIRED) + pkg_check_modules(lz4 REQUIRED IMPORTED_TARGET liblz4) + add_library(lz4::lz4 ALIAS PkgConfig::lz4) find_package(flann REQUIRED) if (TARGET lz4::lz4) @@ -583,6 +585,8 @@ set(ALICEVISION_HAVE_USD 0) if (NOT ALICEVISION_USE_USD STREQUAL "OFF") find_package(pxr CONFIG) + find_package(X11 REQUIRED) + find_package(hdf5 REQUIRED) if (pxr_FOUND) set(ALICEVISION_HAVE_USD 1) @@ -705,7 +709,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 75 80 86 87 89 90) + 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) @@ -733,7 +739,7 @@ if (ALICEVISION_HAVE_CUDA) list(GET ALICEVISION_CUDA_CC_LIST ${ALICEVISION_CC_LIST_LEN} ALICEVISION_CUDA_CC_LIST_LAST) set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};-gencode;arch=compute_${ALICEVISION_CUDA_CC_LIST_LAST},code=compute_${ALICEVISION_CUDA_CC_LIST_LAST}") - set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};-std=c++20") + set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};-std=c++20;-ccbin=SEDNVCC_CCBINHERE;-Xcompiler=-fno-lto") # default stream legacy implies that the 0 stream synchronizes all streams set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};--default-stream;legacy") @@ -876,6 +882,7 @@ set(ALICEVISION_INCLUDE_DIRS ${COINUTILS_INCLUDE_DIRS} ${CLP_INCLUDE_DIRS} ${OSI_INCLUDE_DIRS} + ${Python3_INCLUDE_DIRS} ) include_directories(${ALICEVISION_INCLUDE_DIRS}) @@ -912,7 +919,7 @@ else() set(SPHINX_HTML_DIR "${CMAKE_CURRENT_BINARY_DIR}/htmlDoc") configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/../docs/sphinx/rst/conf.py" + "${CMAKE_CURRENT_SOURCE_DIR}/../docs/sphinx/conf.py" "${CMAKE_CURRENT_BINARY_DIR}/conf.py" @ONLY ) @@ -920,7 +927,7 @@ else() add_custom_target(doc ALL ${SPHINX_EXECUTABLE} -b html - "${CMAKE_CURRENT_SOURCE_DIR}/../docs/sphinx/rst" + "${CMAKE_CURRENT_SOURCE_DIR}/../docs/sphinx/" "${SPHINX_HTML_DIR}" COMMENT "Building HTML documentation with Sphinx" ) diff --git a/src/aliceVision/gpu/gpu.cpp b/src/aliceVision/gpu/gpu.cpp index afb6e8756..ff8d5636c 100644 --- a/src/aliceVision/gpu/gpu.cpp +++ b/src/aliceVision/gpu/gpu.cpp @@ -113,7 +113,7 @@ std::string gpuInformationCUDA() << "\t- id: " << i << std::endl << "\t- name: " << deviceProperties.name << std::endl << "\t- compute capability: " << deviceProperties.major << "." << deviceProperties.minor << std::endl - << "\t- clock frequency (kHz): " << deviceProperties.clockRate << std::endl + //<< "\t- clock frequency (kHz): " << deviceProperties.clockRate << std::endl << "\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/aliceVision/image/CMakeLists.txt b/src/aliceVision/image/CMakeLists.txt index cd4b4bc87..f432fc281 100644 --- a/src/aliceVision/image/CMakeLists.txt +++ b/src/aliceVision/image/CMakeLists.txt @@ -68,9 +68,10 @@ if (ALICEVISION_BUILD_SWIG_BINDING) aliceVision_image ${Python3_LIBRARIES} PRIVATE_INCLUDE_DIRS + ${ALICEVISION_ROOT}/external/tmpinstall/include ../include ${ALICEVISION_ROOT}/include ${Python3_INCLUDE_DIRS} ${Python3_NumPy_INCLUDE_DIRS} ) -endif() \ No newline at end of file +endif() diff --git a/src/cmake/AliceVisionConfig.cmake.in b/src/cmake/AliceVisionConfig.cmake.in index 8dc4a0d12..6315227b4 100644 --- a/src/cmake/AliceVisionConfig.cmake.in +++ b/src/cmake/AliceVisionConfig.cmake.in @@ -48,7 +48,7 @@ include(CMakeFindDependencyMacro) set(Ceres_DIR @Ceres_DIR@) find_dependency(Ceres) -find_dependency(OpenImageIO 2.1) +find_dependency(OpenImageIO 2.1 PATHS /opt/alicevision) # whether it is built with CCTags set(ALICEVISION_HAVE_CCTAG @ALICEVISION_HAVE_CCTAG@) diff --git a/src/cmake/Dependencies.cmake b/src/cmake/Dependencies.cmake index c14b5c430..27bca5482 100644 --- a/src/cmake/Dependencies.cmake +++ b/src/cmake/Dependencies.cmake @@ -514,21 +514,20 @@ if(AV_BUILD_PNG) ExternalProject_Add( ${PNG_TARGET} - URL https://download.sourceforge.net/libpng/libpng-1.6.39.tar.gz - URL_HASH MD5=93b8e79a008747e70f7704f600349559 - DOWNLOAD_DIR ${BUILD_DIR}/download/libpng PREFIX ${BUILD_DIR} BUILD_IN_SOURCE 0 BUILD_ALWAYS 0 UPDATE_COMMAND "" - SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/png + SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/../../libpng-1.6.39 BINARY_DIR ${BUILD_DIR}/png_build - INSTALL_DIR ${CMAKE_INSTALL_PREFIX} + INSTALL_DIR ${BUILD_DIR}/tmpinstall CONFIGURE_COMMAND ${CMAKE_COMMAND} ${CMAKE_CORE_BUILD_FLAGS} ${ZLIB_CMAKE_FLAGS} -DPNG_ARM_NEON=${AV_PNG_ARM_NEON} -DCMAKE_INSTALL_PREFIX= + -DCMAKE_INSTALL_RPATH=/opt/alicevision/lib + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 BUILD_COMMAND $(MAKE) -j${AV_BUILD_DEPENDENCIES_PARALLEL} DEPENDS ${ZLIB_TARGET} @@ -1136,36 +1135,32 @@ if(AV_BUILD_OPENIMAGEIO) set(OPENIMAGEIO_TARGET openimageio) ExternalProject_Add(${OPENIMAGEIO_TARGET} - URL https://github.com/AcademySoftwareFoundation/OpenImageIO/archive/refs/tags/v2.5.18.0.tar.gz - URL_HASH MD5=3975e5dc0970ad859244a58dc2b8e147 - DOWNLOAD_DIR ${BUILD_DIR}/download/oiio PREFIX ${BUILD_DIR} BUILD_IN_SOURCE 0 BUILD_ALWAYS 0 UPDATE_COMMAND "" - SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/openimageio + SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/../../OpenImageIO-2.5.18.0 BINARY_DIR ${BUILD_DIR}/openimageio_build - INSTALL_DIR ${CMAKE_INSTALL_PREFIX} + INSTALL_DIR ${BUILD_DIR}/tmpinstall CONFIGURE_COMMAND ${CMAKE_COMMAND} ${CMAKE_CORE_BUILD_FLAGS} -DCMAKE_PREFIX_PATH=${CMAKE_INSTALL_PREFIX} -DBOOST_ROOT=${CMAKE_INSTALL_PREFIX} + -DPNG_ROOT=${BUILD_DIR}/tmpinstall -DOIIO_BUILD_TESTS:BOOL=OFF -DOIIO_BUILD_TOOLS:BOOL=OFF - -DILMBASE_HOME=${CMAKE_INSTALL_PREFIX} - -DOPENEXR_HOME=${CMAKE_INSTALL_PREFIX} ${TIFF_CMAKE_FLAGS} ${ZLIB_CMAKE_FLAGS} ${PNG_CMAKE_FLAGS} ${JPEG_CMAKE_FLAGS} ${LIBRAW_CMAKE_FLAGS} ${OPENEXR_CMAKE_FLAGS} -DCMAKE_INSTALL_PREFIX:PATH= -DSTOP_ON_WARNING=OFF - -DUSE_FFMPEG=${AV_BUILD_FFMPEG} - -DUSE_TURBOJPEG=${AV_BUILD_JPEG} - -DUSE_LIBRAW=${AV_BUILD_LIBRAW} - -DUSE_OPENEXR=${AV_BUILD_OPENEXR} - -DUSE_TIFF=${AV_BUILD_TIFF} - -DUSE_PNG=${AV_BUILD_PNG} + -DUSE_FFMPEG=ON + -DUSE_TURBOJPEG=ON + -DUSE_LIBRAW=ON + -DUSE_OPENEXR=ON + -DUSE_TIFF=ON + -DUSE_PNG=ON -DPython_EXECUTABLE=${Python_EXECUTABLE} - -DUSE_PYTHON=ON -DUSE_OPENCV=OFF -DUSE_OPENGL=OFF -DUSE_NUKE=OFF -DUSE_PTEX=OFF -DBUILD_DOCS=OFF -DBUILD_TESTING=OFF + -DUSE_PYTHON=ON -DUSE_OPENCV=ON -DUSE_OPENGL=ON -DUSE_NUKE=OFF -DUSE_PTEX=ON -DBUILD_DOCS=OFF -DBUILD_TESTING=OFF # TODO: build with libheif BUILD_COMMAND $(MAKE) -j${AV_BUILD_DEPENDENCIES_PARALLEL} DEPENDS ${BOOST_TARGET} ${OPENEXR_TARGET} ${TIFF_TARGET} ${PNG_TARGET} ${JPEG_TARGET} ${LIBRAW_TARGET} ${ZLIB_TARGET} ${FFMPEG_TARGET} ${PYBIND11_TARGET} @@ -1434,18 +1429,30 @@ 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 -DALICEVISION_ROOT=${ALICEVISION_ROOT} + -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=TRUE + -DCMAKE_INSTALL_PREFIX=/usr + -DOpenImageIO_ROOT=${ALICEVISION_ROOT}/external/tmpinstall + -DCOINUTILS_INCLUDE_DIR_HINTS=/usr/include/coin + -DCLP_INCLUDE_DIR_HINTS=/usr/include/coin + -DOSI_INCLUDE_DIR_HINTS=/usr/include/coin + -DPopSift_DIR=/usr + -DCCTag_DIR=/usr/lib/cmake/CCTag + -DUNCERTAINTYTE_DIR=/usr + -DMAGMA_ROOT=/opt/cuda/targets/x86_64-linux -DALICEVISION_USE_ALEMBIC=ON - -DMINIGLOG=ON - -DALICEVISION_USE_CCTAG=${AV_BUILD_CCTAG} - -DALICEVISION_USE_APRILTAG=${AV_BUILD_APRILTAG} - -DALICEVISION_USE_OPENCV=${AV_BUILD_OPENCV} - -DALICEVISION_USE_OPENGV=${AV_BUILD_OPENGV} - -DALICEVISION_USE_POPSIFT=${AV_BUILD_POPSIFT} - -DALICEVISION_USE_CUDA=${AV_USE_CUDA} - -DALICEVISION_BUILD_SWIG_BINDING=${AV_USE_SWIG} -DALICEVISION_BUILD_DOC=OFF + -DALICEVISION_USE_CUDA=ON + -DALICEVISION_USE_CCTAG=ON + -DALICEVISION_USE_POPSIFT=ON + -DALICEVISION_USE_UNCERTAINTYTE=OFF + -DALICEVISION_USE_ALEMBIC=ON + -DALICEVISION_USE_OPENGV=ON + -DALICEVISION_USE_OPENCV=ON + -DALICEVISION_USE_ONNX=ON + -DALICEVISION_USE_USD=ON + -DALICEVISION_BUILD_SWIG_BINDING=ON + -DCMAKE_CXX_STANDARD=17 ${ZLIB_CMAKE_FLAGS} ${ASSIMP_CMAKE_FLAGS} @@ -1476,5 +1483,6 @@ if(AV_BUILD_ALICEVISION) -DCMAKE_INSTALL_PREFIX:PATH= DEPENDS ${AV_DEPS} + INSTALL_COMMAND "" ) endif() diff --git a/src/cmake/FindUncertaintyTE.cmake b/src/cmake/FindUncertaintyTE.cmake index bcd4d6bfe..a1fa2b58f 100644 --- a/src/cmake/FindUncertaintyTE.cmake +++ b/src/cmake/FindUncertaintyTE.cmake @@ -52,7 +52,7 @@ ELSE(UNCERTAINTYTE_INCLUDE_DIR) ENDIF(UNCERTAINTYTE_INCLUDE_DIR) -GET_FILENAME_COMPONENT(UNCERTAINTYTE_LIBRARY_DIR "${UNCERTAINTYTE_LIBRARY}" PATH) +cmake_path(GET UNCERTAINTYTE_LIBRARY ROOT_PATH UNCERTAINTYTE_LIBRARY_DIR) if(UNCERTAINTYTE_INCLUDE_DIR) message(STATUS "UncertaintyTE include directory: ${UNCERTAINTYTE_INCLUDE_DIR}") diff --git a/src/cmake/Helpers.cmake b/src/cmake/Helpers.cmake index 5c12a46ee..061775e9d 100644 --- a/src/cmake/Helpers.cmake +++ b/src/cmake/Helpers.cmake @@ -293,6 +293,8 @@ function(alicevision_swig_add_library module_name) set_property(SOURCE ${SWIG_MODULE_SOURCES} PROPERTY CPLUSPLUS ON) set_property(SOURCE ${SWIG_MODULE_SOURCES} PROPERTY SWIG_MODULE_NAME ${module_name}) + set_property(SOURCE ${SWIG_MODULE_SOURCES} PROPERTY INCLUDE_DIRECTORIES ${SWIG_MODULE_PRIVATE_INCLUDE_DIRS}) + set_property(SOURCE ${SWIG_MODULE_SOURCES} PROPERTY USE_TARGET_INCLUDE_DIRECTORIES FALSE) swig_add_library(${module_name} TYPE MODULE diff --git a/src/software/export/CMakeLists.txt b/src/software/export/CMakeLists.txt index d2085da6e..9b61b17cb 100644 --- a/src/software/export/CMakeLists.txt +++ b/src/software/export/CMakeLists.txt @@ -194,10 +194,7 @@ if (ALICEVISION_BUILD_SFM) aliceVision_cmdline aliceVision_mesh Boost::program_options - usd - usdGeom - usdImaging - usdShade + usd_ms ) endif() diff --git a/src/software/utils/main_computeUncertainty.cpp b/src/software/utils/main_computeUncertainty.cpp index 7949913fb..955d994f1 100644 --- a/src/software/utils/main_computeUncertainty.cpp +++ b/src/software/utils/main_computeUncertainty.cpp @@ -41,7 +41,8 @@ int aliceVision_main(int argc, char** argv) bool debug = false; // clang-format off - params.add_options() + po::options_description requiredParams("Required parameters"); + requiredParams.add_options() ("input,i", po::value(&sfmDataFilename)->required(), "SfMData file to align.") ("output,o", po::value(&outSfMDataFilename)->required(), @@ -51,13 +52,11 @@ int aliceVision_main(int argc, char** argv) ("algorithm,a", po::value(&algorithm)->default_value(algorithm), "Algorithm.") ("debug,d", po::value(&debug)->default_value(debug), - "Enable creation of debug files in the current folder.") - ("verboseLevel,v", po::value(&verboseLevel)->default_value(verboseLevel), - "Verbosity level (fatal, error, warning, info, debug, trace)."); + "Enable creation of debug files in the current folder."); // clang-format on CmdLine cmdline("AliceVision computeUncertainty"); - cmdline.add(params); + cmdline.add(requiredParams); if (!cmdline.execute(argc, argv)) { return EXIT_FAILURE; @@ -71,7 +70,7 @@ int aliceVision_main(int argc, char** argv) // Load input scene SfMData sfmData; - if (!Load(sfmData, sfmDataFilename, ESfMData(ALL))) + if (!load(sfmData, sfmDataFilename, ESfMData(ALL))) { std::cerr << std::endl << "The input SfMData file \"" << sfmDataFilename << "\" cannot be read." << std::endl; return EXIT_FAILURE; @@ -148,7 +147,7 @@ int aliceVision_main(int argc, char** argv) std::cout << "Save into \"" << outSfMDataFilename << "\"" << std::endl; // Export the SfMData scene in the expected format - if (!Save(sfmData, outSfMDataFilename, ESfMData(ALL))) + if (!save(sfmData, outSfMDataFilename, ESfMData(ALL))) { std::cerr << std::endl << "An error occurred while trying to save \"" << outSfMDataFilename << "\"." << std::endl; return EXIT_FAILURE;