test
This commit is contained in:
1 parent
fb3ab1e8f8
commit
176e490e7f
1 file changed
+304
+304
@@ -0,0 +1,304 @@
|
||||
# CMake powered build system for OpenMVS
|
||||
|
||||
########################################################################
|
||||
#
|
||||
# Project-wide settings
|
||||
CMAKE_MINIMUM_REQUIRED(VERSION 3.8.2)
|
||||
IF(POLICY CMP0011)
|
||||
CMAKE_POLICY(SET CMP0011 NEW)
|
||||
ENDIF()
|
||||
IF(POLICY CMP0074)
|
||||
CMAKE_POLICY(SET CMP0074 NEW)
|
||||
ENDIF()
|
||||
IF(POLICY CMP0104)
|
||||
CMAKE_POLICY(SET CMP0104 NEW)
|
||||
ENDIF()
|
||||
|
||||
# List configuration options
|
||||
SET(OpenMVS_BUILD_TOOLS ON CACHE BOOL "Build example applications")
|
||||
SET(OpenMVS_USE_OPENMP ON CACHE BOOL "Enable OpenMP library")
|
||||
SET(OpenMVS_USE_OPENGL ON CACHE BOOL "Enable OpenGL library")
|
||||
SET(OpenMVS_USE_BREAKPAD ON CACHE BOOL "Enable BreakPad library")
|
||||
SET(OpenMVS_USE_PYTHON ON CACHE BOOL "Enable Python library bindings")
|
||||
SET(OpenMVS_USE_CERES OFF CACHE BOOL "Enable CERES optimization library")
|
||||
SET(OpenMVS_USE_CUDA ON CACHE BOOL "Enable CUDA library")
|
||||
SET(OpenMVS_USE_FAST_FLOAT2INT OFF CACHE BOOL "Use an optimized code to convert real numbers to int")
|
||||
SET(OpenMVS_USE_FAST_INVSQRT OFF CACHE BOOL "Use an optimized code to compute the inverse square root (slower in fact on modern compilers)")
|
||||
SET(OpenMVS_USE_FAST_CBRT OFF CACHE BOOL "Use an optimized code to compute the cubic root")
|
||||
SET(OpenMVS_USE_SSE ON CACHE BOOL "Enable SSE optimizations")
|
||||
SET(OpenMVS_MAX_CUDA_COMPATIBILITY OFF CACHE BOOL "Build for maximum CUDA device compatibility")
|
||||
SET(OpenMVS_ENABLE_TESTS ON CACHE BOOL "Enable test code")
|
||||
|
||||
# Load automatically VCPKG toolchain if available
|
||||
IF(NOT DEFINED CMAKE_TOOLCHAIN_FILE AND DEFINED ENV{VCPKG_ROOT})
|
||||
SET(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "")
|
||||
IF(NOT DEFINED VCPKG_TARGET_TRIPLET AND DEFINED ENV{VCPKG_DEFAULT_TRIPLET})
|
||||
SET(VCPKG_TARGET_TRIPLET "$ENV{VCPKG_DEFAULT_TRIPLET}" CACHE STRING "")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
IF(OpenMVS_USE_PYTHON)
|
||||
LIST(APPEND VCPKG_MANIFEST_FEATURES "python")
|
||||
SET(PARTIAL_BUILD_SHARED_LIBS ON)
|
||||
ENDIF()
|
||||
IF(OpenMVS_USE_CUDA)
|
||||
LIST(APPEND VCPKG_MANIFEST_FEATURES "cuda")
|
||||
ENDIF()
|
||||
|
||||
# Name of the project.
|
||||
#
|
||||
# CMake files in this project can refer to the root source directory
|
||||
# as ${OpenMVS_SOURCE_DIR} and to the root binary directory as
|
||||
# ${OpenMVS_BINARY_DIR}.
|
||||
PROJECT(OpenMVS)
|
||||
|
||||
SET(OpenMVS_MAJOR_VERSION 2)
|
||||
SET(OpenMVS_MINOR_VERSION 3)
|
||||
SET(OpenMVS_PATCH_VERSION 0)
|
||||
SET(OpenMVS_VERSION ${OpenMVS_MAJOR_VERSION}.${OpenMVS_MINOR_VERSION}.${OpenMVS_PATCH_VERSION})
|
||||
|
||||
# Disable SSE on unsuported platforms
|
||||
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm|ARM|aarch64|AARCH64)")
|
||||
SET(OpenMVS_USE_SSE OFF)
|
||||
ENDIF()
|
||||
|
||||
# Define helper functions and macros.
|
||||
INCLUDE(build/Utils.cmake)
|
||||
|
||||
# Init session with macros defined in Utils.cmake
|
||||
GetOperatingSystemArchitectureBitness(SYSTEM)
|
||||
ComposePackageLibSuffix()
|
||||
ConfigCompilerAndLinker()
|
||||
ConfigLibrary()
|
||||
|
||||
# Find dependencies:
|
||||
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/build/Modules)
|
||||
|
||||
# Find required packages
|
||||
SET(OpenMVS_EXTRA_INCLUDES "")
|
||||
SET(OpenMVS_EXTRA_LIBS "")
|
||||
|
||||
if(OpenMVS_USE_OPENMP)
|
||||
SET(OpenMP_LIBS "")
|
||||
FIND_PACKAGE(OpenMP)
|
||||
if(OPENMP_FOUND)
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
|
||||
SET(_USE_OPENMP TRUE)
|
||||
#cmake only check for separate OpenMP library on AppleClang 7+
|
||||
#https://github.com/Kitware/CMake/blob/42212f7539040139ecec092547b7d58ef12a4d72/Modules/FindOpenMP.cmake#L252
|
||||
if (CMAKE_CXX_COMPILER_ID MATCHES "AppleClang" AND (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "7.0"))
|
||||
SET(OpenMP_LIBS ${OpenMP_libomp_LIBRARY})
|
||||
LIST(APPEND OpenMVS_EXTRA_LIBS ${OpenMP_LIBS})
|
||||
endif()
|
||||
else()
|
||||
MESSAGE("-- Can't find OpenMP. Continuing without it.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(OpenMVS_USE_OPENGL)
|
||||
if(POLICY CMP0072)
|
||||
cmake_policy(SET CMP0072 NEW)
|
||||
endif()
|
||||
FIND_PACKAGE(OpenGL)
|
||||
if(OPENGL_FOUND)
|
||||
INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR})
|
||||
ADD_DEFINITIONS(${OpenGL_DEFINITIONS})
|
||||
SET(_USE_OPENGL TRUE)
|
||||
else()
|
||||
MESSAGE("-- Can't find OpenGL. Continuing without it.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(OpenMVS_USE_CUDA)
|
||||
FIND_PACKAGE(CUDA)
|
||||
if(CUDA_FOUND)
|
||||
ENABLE_LANGUAGE(CUDA)
|
||||
# CUDA-11.x can not be compiled using C++14 standard on Windows
|
||||
string(REGEX MATCH "^[0-9]+" CUDA_MAJOR ${CMAKE_CUDA_COMPILER_VERSION})
|
||||
if(${CUDA_MAJOR} GREATER 10)
|
||||
SET(CMAKE_CUDA_STANDARD 17)
|
||||
endif()
|
||||
EXECUTE_PROCESS(COMMAND "${CMAKE_CUDA_COMPILER}" --list-gpu-arch
|
||||
OUTPUT_VARIABLE LIST_GPU_ARCH
|
||||
ERROR_QUIET)
|
||||
if(NOT LIST_GPU_ARCH AND OpenMVS_MAX_CUDA_COMPATIBILITY)
|
||||
message(WARNING "Cannot compile for max CUDA compatibility, nvcc does not support --list-gpu-arch")
|
||||
SET(OpenMVS_MAX_CUDA_COMPATIBILITY OFF)
|
||||
endif()
|
||||
if(NOT OpenMVS_MAX_CUDA_COMPATIBILITY)
|
||||
if(NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
|
||||
SET(CMAKE_CUDA_ARCHITECTURES 75)
|
||||
endif()
|
||||
else()
|
||||
# Build for maximum compatibility
|
||||
# https://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/
|
||||
|
||||
# Extract list of arch and gencodes
|
||||
STRING(REPLACE "\r" "" LIST_GPU_ARCH ${LIST_GPU_ARCH})
|
||||
STRING(REPLACE "\n" ";" LIST_GPU_ARCH ${LIST_GPU_ARCH})
|
||||
|
||||
EXECUTE_PROCESS(COMMAND "${CMAKE_CUDA_COMPILER}" --list-gpu-code
|
||||
OUTPUT_VARIABLE LIST_GPU_CODE
|
||||
ERROR_QUIET)
|
||||
STRING(REPLACE "\r" "" LIST_GPU_CODE ${LIST_GPU_CODE})
|
||||
STRING(REPLACE "\n" ";" LIST_GPU_CODE ${LIST_GPU_CODE})
|
||||
|
||||
LIST(GET LIST_GPU_CODE 0 TARGET_GPU_CODE)
|
||||
SET(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -arch=${TARGET_GPU_CODE}")
|
||||
|
||||
SET(IDX 0)
|
||||
foreach(GPU_ARCH ${LIST_GPU_ARCH})
|
||||
LIST(GET LIST_GPU_CODE ${IDX} GPU_CODE)
|
||||
SET(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -gencode=arch=${GPU_ARCH},code=${GPU_CODE}")
|
||||
MATH(EXPR IDX "${IDX}+1")
|
||||
endforeach()
|
||||
MESSAGE("-- Set CUDA flags: " ${CMAKE_CUDA_FLAGS})
|
||||
endif()
|
||||
SET(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --expt-relaxed-constexpr")
|
||||
INCLUDE_DIRECTORIES(${CUDA_INCLUDE_DIRS})
|
||||
SET(_USE_CUDA TRUE)
|
||||
else()
|
||||
SET(CUDA_CUDA_LIBRARY "")
|
||||
MESSAGE("-- Can't find CUDA. Continuing without it.")
|
||||
endif()
|
||||
else()
|
||||
SET(CUDA_CUDA_LIBRARY "")
|
||||
endif()
|
||||
|
||||
if(OpenMVS_USE_BREAKPAD)
|
||||
FIND_PACKAGE(BREAKPAD)
|
||||
if(BREAKPAD_FOUND)
|
||||
INCLUDE_DIRECTORIES(${BREAKPAD_INCLUDE_DIRS})
|
||||
ADD_DEFINITIONS(${BREAKPAD_DEFINITIONS})
|
||||
SET(_USE_BREAKPAD TRUE)
|
||||
LIST(APPEND OpenMVS_EXTRA_LIBS ${BREAKPAD_LIBS})
|
||||
else()
|
||||
MESSAGE("-- Can't find BreakPad. Continuing without it.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
SET(Boost_EXTRA_COMPONENTS "")
|
||||
if(OpenMVS_USE_PYTHON)
|
||||
FIND_PACKAGE(Python3 COMPONENTS Interpreter Development REQUIRED)
|
||||
if(Python3_FOUND)
|
||||
INCLUDE_DIRECTORIES(${Python3_INCLUDE_DIRS})
|
||||
LIST(APPEND OpenMVS_EXTRA_INCLUDES ${Python3_INCLUDE_DIRS})
|
||||
LIST(APPEND OpenMVS_EXTRA_LIBS ${Python3_LIBRARIES})
|
||||
LIST(APPEND Boost_EXTRA_COMPONENTS python${Python3_VERSION_MAJOR}${Python3_VERSION_MINOR})
|
||||
MESSAGE(STATUS "Python ${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR} found (include: ${Python3_INCLUDE_DIRS})")
|
||||
else()
|
||||
MESSAGE("-- Can't find Python. Continuing without it.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
FIND_PACKAGE(Boost REQUIRED COMPONENTS iostreams program_options system serialization OPTIONAL_COMPONENTS ${Boost_EXTRA_COMPONENTS})
|
||||
if(Boost_FOUND)
|
||||
LIST(APPEND OpenMVS_EXTRA_INCLUDES ${Boost_INCLUDE_DIRS})
|
||||
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
|
||||
ADD_DEFINITIONS(${Boost_DEFINITIONS})
|
||||
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
|
||||
if(NOT MSVC AND DEFINED CMAKE_TOOLCHAIN_FILE)
|
||||
# work around this missing library link in vcpkg
|
||||
LIST(APPEND Boost_LIBRARIES zstd)
|
||||
endif()
|
||||
SET(_USE_BOOST TRUE)
|
||||
if(OpenMVS_USE_PYTHON AND Boost_${Boost_EXTRA_COMPONENTS}_FOUND)
|
||||
SET(_USE_BOOST_PYTHON TRUE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
FIND_PACKAGE(Eigen3 3.4 REQUIRED)
|
||||
if(EIGEN3_FOUND)
|
||||
LIST(APPEND OpenMVS_EXTRA_INCLUDES ${EIGEN3_INCLUDE_DIR})
|
||||
INCLUDE_DIRECTORIES(${EIGEN3_INCLUDE_DIR})
|
||||
ADD_DEFINITIONS(${EIGEN3_DEFINITIONS})
|
||||
SET(_USE_EIGEN TRUE)
|
||||
MESSAGE(STATUS "Eigen ${EIGEN3_VERSION} found (include: ${EIGEN3_INCLUDE_DIR})")
|
||||
endif()
|
||||
|
||||
FIND_PACKAGE(OpenCV REQUIRED)
|
||||
if(OpenCV_FOUND)
|
||||
LIST(APPEND OpenMVS_EXTRA_INCLUDES ${OpenCV_INCLUDE_DIRS})
|
||||
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
|
||||
ADD_DEFINITIONS(${OpenCV_DEFINITIONS})
|
||||
SET(_USE_OPENCV TRUE)
|
||||
MESSAGE(STATUS "OpenCV ${OpenCV_VERSION} found (include: ${OpenCV_INCLUDE_DIRS})")
|
||||
else()
|
||||
MESSAGE("-- Can't find OpenCV. Please specify OpenCV directory using OpenCV_DIR variable")
|
||||
endif()
|
||||
|
||||
LIST(REMOVE_DUPLICATES OpenMVS_EXTRA_INCLUDES)
|
||||
LIST(REMOVE_DUPLICATES OpenMVS_EXTRA_LIBS)
|
||||
|
||||
# Set defines
|
||||
if(OpenMVS_USE_FAST_FLOAT2INT)
|
||||
SET(_USE_FAST_FLOAT2INT TRUE)
|
||||
endif()
|
||||
if(OpenMVS_USE_FAST_INVSQRT)
|
||||
SET(_USE_FAST_INVSQRT TRUE)
|
||||
endif()
|
||||
if(OpenMVS_USE_FAST_CBRT)
|
||||
SET(_USE_FAST_CBRT TRUE)
|
||||
endif()
|
||||
if(OpenMVS_USE_SSE)
|
||||
SET(_USE_SSE TRUE)
|
||||
endif()
|
||||
if(OpenMVS_USE_CERES)
|
||||
SET(_USE_CERES TRUE)
|
||||
endif()
|
||||
|
||||
INCLUDE_DIRECTORIES("${OpenMVS_SOURCE_DIR}")
|
||||
INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}")
|
||||
|
||||
# Add modules
|
||||
ADD_SUBDIRECTORY(libs)
|
||||
if(OpenMVS_BUILD_TOOLS)
|
||||
ADD_SUBDIRECTORY(apps)
|
||||
endif()
|
||||
ADD_SUBDIRECTORY(docs)
|
||||
|
||||
if (OpenMVS_ENABLE_TESTS)
|
||||
# enable testing functionality
|
||||
ENABLE_TESTING()
|
||||
# define tests
|
||||
ADD_TEST(NAME UnitTests COMMAND $<TARGET_FILE:Tests> "0")
|
||||
ADD_TEST(NAME PipelineTest COMMAND $<TARGET_FILE:Tests> "1")
|
||||
endif()
|
||||
|
||||
# Export the package for use from the build-tree
|
||||
# (this registers the build-tree with a global CMake-registry)
|
||||
EXPORT(PACKAGE OpenMVS)
|
||||
|
||||
# Install the export set for use with the install-tree
|
||||
INSTALL(EXPORT OpenMVSTargets
|
||||
NAMESPACE OpenMVS::
|
||||
DESTINATION "${INSTALL_CMAKE_DIR}")
|
||||
|
||||
# Install configuration file
|
||||
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/build/Templates/ConfigLocal.h.in" "${CMAKE_BINARY_DIR}/ConfigLocal.h")
|
||||
INSTALL(FILES "${CMAKE_BINARY_DIR}/ConfigLocal.h" DESTINATION "${INSTALL_INCLUDE_DIR}")
|
||||
|
||||
# Create the OpenMVSConfig.cmake and OpenMVSConfigVersion files
|
||||
INCLUDE(CMakePackageConfigHelpers)
|
||||
write_basic_package_version_file("${PROJECT_BINARY_DIR}/OpenMVSConfigVersion.cmake"
|
||||
VERSION ${OpenMVS_VERSION}
|
||||
COMPATIBILITY AnyNewerVersion)
|
||||
SET(INSTALL_INCLUDE_DIR_IN ${INSTALL_INCLUDE_DIR_PREFIX} ${OpenMVS_EXTRA_INCLUDES})
|
||||
SET(INSTALL_CMAKE_DIR_IN ${INSTALL_CMAKE_DIR_PREFIX})
|
||||
configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/build/Templates/OpenMVSConfig.cmake.in"
|
||||
"${PROJECT_BINARY_DIR}/OpenMVSConfig.cmake"
|
||||
INSTALL_DESTINATION ${PROJECT_BINARY_DIR}
|
||||
NO_SET_AND_CHECK_MACRO)
|
||||
# Install the OpenMVSConfig.cmake and OpenMVSConfigVersion.cmake
|
||||
INSTALL(FILES
|
||||
"${PROJECT_BINARY_DIR}/OpenMVSConfig.cmake"
|
||||
"${PROJECT_BINARY_DIR}/OpenMVSConfigVersion.cmake"
|
||||
DESTINATION "${INSTALL_CMAKE_DIR}")
|
||||
|
||||
# uninstall target
|
||||
CONFIGURE_FILE(
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/build/Templates/cmake_uninstall.cmake.in"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
||||
IMMEDIATE @ONLY)
|
||||
|
||||
ADD_CUSTOM_TARGET(uninstall
|
||||
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
|
||||
Reference in new issue
Block a user