Advertisement
Guest User

Untitled

a guest
Nov 16th, 2018
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
CMake 14.41 KB | None | 0 0
  1. # Copyright (c) 2018, ETH Zurich and UNC Chapel Hill.
  2. # All rights reserved.
  3. #
  4. # Redistribution and use in source and binary forms, with or without
  5. # modification, are permitted provided that the following conditions are met:
  6. #
  7. #     * Redistributions of source code must retain the above copyright
  8. #       notice, this list of conditions and the following disclaimer.
  9. #
  10. #     * Redistributions in binary form must reproduce the above copyright
  11. #       notice, this list of conditions and the following disclaimer in the
  12. #       documentation and/or other materials provided with the distribution.
  13. #
  14. #     * Neither the name of ETH Zurich and UNC Chapel Hill nor the names of
  15. #       its contributors may be used to endorse or promote products derived
  16. #       from this software without specific prior written permission.
  17. #
  18. # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  19. # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  20. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  21. # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
  22. # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  23. # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  24. # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  25. # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  26. # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  27. # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  28. # POSSIBILITY OF SUCH DAMAGE.
  29. #
  30. # Author: Johannes L. Schoenberger (jsch-at-demuc-dot-de)
  31.  
  32. cmake_minimum_required(VERSION 3.0)
  33.  
  34. project(COLMAP)
  35.  
  36. set(COLMAP_VERSION "3.6")
  37. set(COLMAP_VERSION_NUMBER "3600")
  38.  
  39.  
  40. ################################################################################
  41. # Include CMake dependencies
  42. ################################################################################
  43.  
  44. set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
  45.  
  46. include(CheckCXXCompilerFlag)
  47.  
  48. # Include helper macros and commands, and allow the included file to override
  49. # the CMake policies in this file
  50. include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/CMakeHelper.cmake NO_POLICY_SCOPE)
  51.  
  52.  
  53. ################################################################################
  54. # Options
  55. ################################################################################
  56.  
  57. option(SIMD_ENABLED "Whether to enable SIMD optimizations" ON)
  58. option(OPENMP_ENABLED "Whether to enable OpenMP parallelization" ON)
  59. option(IPO_ENABLED "Whether to enable interprocedural optimization" ON)
  60. option(CUDA_ENABLED "Whether to enable CUDA, if available" ON)
  61. option(OPENGL_ENABLED "Whether to enable OpenGL, if available" ON)
  62. option(TESTS_ENABLED "Whether to build test binaries" OFF)
  63. option(PROFILING_ENABLED "Whether to enable google-perftools linker flags" OFF)
  64. option(CGAL_ENABLED "Whether to enable the CGAL library" ON)
  65. option(BOOST_STATIC "Whether to enable static boost library linker flags" ON)
  66. set(CUDA_ARCHS "Auto" CACHE STRING "List of CUDA architectures for which to \
  67. generate code, e.g., Auto, All, Maxwell, Pascal, ...")
  68.  
  69. if(TESTS_ENABLED)
  70.     enable_testing()
  71. endif()
  72.  
  73. if(BOOST_STATIC)
  74.     set(Boost_USE_STATIC_LIBS ON)
  75. else()
  76.     add_definitions("-DBOOST_TEST_DYN_LINK")
  77. endif()
  78.  
  79. ################################################################################
  80. # Find packages
  81. ################################################################################
  82.  
  83. if(OPENMP_ENABLED)
  84.     find_package(OpenMP QUIET)
  85. endif()
  86.  
  87. find_package(Ceres REQUIRED)
  88.  
  89. find_package(Boost REQUIRED COMPONENTS
  90.              program_options
  91.              filesystem
  92.              graph
  93.              system
  94.              unit_test_framework)
  95.  
  96. find_package(Eigen3 REQUIRED)
  97.  
  98. find_package(FreeImage REQUIRED)
  99.  
  100. find_package(Glog REQUIRED)
  101.  
  102. find_package(OpenGL REQUIRED)
  103. find_package(Glew REQUIRED)
  104. find_package(Git)
  105.  
  106. find_package(CGAL QUIET)
  107.  
  108. set(CUDA_MIN_VERSION "7.0")
  109. if(CUDA_ENABLED)
  110.     find_package(CUDA ${CUDA_MIN_VERSION} QUIET)
  111. endif()
  112.  
  113. find_package(Qt5 5.4 REQUIRED COMPONENTS Core OpenGL Widgets)
  114.  
  115. if(Qt5_FOUND)
  116.     message(STATUS "Found Qt")
  117.     message(STATUS "  Module : ${Qt5Core_DIR}")
  118.     message(STATUS "  Module : ${Qt5OpenGL_DIR}")
  119.     message(STATUS "  Module : ${Qt5Widgets_DIR}")
  120. endif()
  121.  
  122. if(CGAL_FOUND)
  123.     message(STATUS "Found CGAL")
  124.     message(STATUS "  Includes : ${CGAL_INCLUDE_DIRS}")
  125.     message(STATUS "  Libraries : ${CGAL_LIBRARY}")
  126. endif()
  127.  
  128.  
  129. ################################################################################
  130. # Compiler specific configuration
  131. ################################################################################
  132.  
  133. if(CMAKE_BUILD_TYPE)
  134.     message(STATUS "Build type specified as ${CMAKE_BUILD_TYPE}")
  135. else()
  136.     message(STATUS "Build type not specified, using Release")
  137.     set(CMAKE_BUILD_TYPE Release)
  138.     set(IS_DEBUG OFF)
  139. endif()
  140.  
  141. if(IS_MSVC)
  142.     # Some fixes for the Glog library.
  143.     add_definitions("-DGLOG_NO_ABBREVIATED_SEVERITIES")
  144.     add_definitions("-DGL_GLEXT_PROTOTYPES")
  145.     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
  146.     # Enable object level parallel builds in Visual Studio.
  147.     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP")
  148.     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
  149. endif()
  150.  
  151. if(IS_GNU)
  152.     # Hide incorrect warnings for uninitialized Eigen variables under GCC.
  153.     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-maybe-uninitialized")
  154.     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-maybe-uninitialized")
  155. endif()
  156.  
  157. if(IS_DEBUG)
  158.     add_definitions("-DEIGEN_INITIALIZE_MATRICES_BY_NAN")
  159. endif()
  160.  
  161. if(SIMD_ENABLED)
  162.     message(STATUS "Enabling SIMD support")
  163. else()
  164.     message(STATUS "Disabling SIMD support")
  165. endif()
  166.  
  167. if(OPENMP_ENABLED AND OPENMP_FOUND)
  168.     message(STATUS "Enabling OpenMP support")
  169.     add_definitions("-DOPENMP_ENABLED")
  170.     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
  171.     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
  172. else()
  173.     message(STATUS "Disabling OpenMP support")
  174. endif()
  175.  
  176. if(IPO_ENABLED AND NOT IS_DEBUG AND NOT IS_GNU)
  177.     message(STATUS "Enabling interprocedural optimization")
  178.     set_property(DIRECTORY PROPERTY INTERPROCEDURAL_OPTIMIZATION 1)
  179. else()
  180.     message(STATUS "Disabling interprocedural optimization")
  181. endif()
  182.  
  183. if(CUDA_FOUND)
  184.     if(CUDA_ENABLED)
  185.         add_definitions("-DCUDA_ENABLED")
  186.  
  187.         include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/SelectCudaComputeArch.cmake)
  188.  
  189.         CUDA_SELECT_NVCC_ARCH_FLAGS(CUDA_ARCH_FLAGS ${CUDA_ARCHS})
  190.  
  191.         set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} ${CUDA_ARCH_FLAGS}")
  192.  
  193.         # Fix for some combinations of CUDA and GCC (e.g. under Ubuntu 16.04).
  194.         set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -D_FORCE_INLINES")
  195.         # Do not show warnings if the architectures are deprecated.
  196.         set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -Wno-deprecated-gpu-targets")
  197.  
  198.         message(STATUS "Enabling CUDA support (version: ${CUDA_VERSION_STRING},"
  199.                        " archs: ${CUDA_ARCH_FLAGS_readable})")
  200.     else()
  201.         set(CUDA_FOUND OFF)
  202.         message(STATUS "Disabling CUDA support")
  203.     endif()
  204. else()
  205.     set(CUDA_ENABLED OFF)
  206.     if(CUDA_VERSION_STRING)
  207.         message(STATUS "Disabling CUDA support (found version "
  208.                 "${CUDA_VERSION_STRING} but >= ${CUDA_MIN_VERSION} required)")
  209.     else()
  210.         message(STATUS "Disabling CUDA support")
  211.     endif()
  212. endif()
  213.  
  214. if(OPENGL_ENABLED)
  215.     add_definitions("-DOPENGL_ENABLED")
  216.     message(STATUS "Enabling OpenGL support")
  217. else()
  218.     message(STATUS "Disabling OpenGL support")
  219. endif()
  220.  
  221. if(PROFILING_ENABLED)
  222.     message(STATUS "Enabling profiling support")
  223.     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lprofiler -ltcmalloc")
  224.     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lprofiler -ltcmalloc")
  225. else()
  226.     message(STATUS "Disabling profiling support")
  227. endif()
  228.  
  229. if(CGAL_FOUND AND CGAL_ENABLED)
  230.     message(STATUS "Enabling CGAL support")
  231.     add_definitions("-DCGAL_ENABLED")
  232. else()
  233.     message(STATUS "Disabling CGAL support")
  234.     set(CGAL_ENABLED OFF)
  235. endif()
  236.  
  237. # Qt5 was built with -reduce-relocations.
  238. if(Qt5_POSITION_INDEPENDENT_CODE)
  239.     set(CMAKE_POSITION_INDEPENDENT_CODE ON)
  240.     if(CUDA_ENABLED AND NOT IS_MSVC)
  241.         set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} --compiler-options -fPIC")
  242.     endif()
  243. endif()
  244.  
  245. # Enable automatic compilation of Qt resource files.
  246. set(CMAKE_AUTORCC ON)
  247.  
  248.  
  249. ################################################################################
  250. # Add sources
  251. ################################################################################
  252.  
  253. # Generate source file with version definitions.
  254. include(GenerateVersionDefinitions)
  255.  
  256. set(COLMAP_INCLUDE_DIRS
  257.     ${Boost_INCLUDE_DIRS}
  258.     ${EIGEN3_INCLUDE_DIRS}
  259.     ${GLOG_INCLUDE_DIRS}
  260.     ${FREEIMAGE_INCLUDE_DIRS}
  261.     ${CERES_INCLUDE_DIRS}
  262.     ${GLEW_INCLUDE_DIRS}
  263.     ${Qt5Core_INCLUDE_DIRS}
  264.     ${Qt5OpenGL_INCLUDE_DIRS}
  265.     ${Qt5Widgets_INCLUDE_DIRS}
  266. )
  267.  
  268. set(COLMAP_LINK_DIRS
  269.     ${Boost_LIBRARY_DIRS}
  270. )
  271.  
  272. set(COLMAP_EXTERNAL_LIBRARIES
  273.     ${CMAKE_DL_LIBS}
  274.     ${Boost_FILESYSTEM_LIBRARY}
  275.     ${Boost_PROGRAM_OPTIONS_LIBRARY}
  276.     ${Boost_SYSTEM_LIBRARY}
  277.     ${GLOG_LIBRARIES}
  278.     ${FREEIMAGE_LIBRARIES}
  279.     ${CERES_LIBRARIES}
  280.     ${OPENGL_gl_LIBRARY}
  281.     ${OPENGL_glu_LIBRARY}
  282.     ${Qt5Core_LIBRARIES}
  283.     ${Qt5OpenGL_LIBRARIES}
  284.     ${Qt5Widgets_LIBRARIES}
  285. )
  286.  
  287. if(CGAL_ENABLED)
  288.     list(APPEND COLMAP_INCLUDE_DIRS ${CGAL_INCLUDE_DIRS} ${GMP_INCLUDE_DIR})
  289.     list(APPEND COLMAP_EXTERNAL_LIBRARIES ${CGAL_LIBRARY} ${GMP_LIBRARIES})
  290.     list(APPEND COLMAP_LINK_DIRS ${CGAL_LIBRARIES_DIR})
  291. endif()
  292.  
  293. if(UNIX)
  294.     list(APPEND COLMAP_EXTERNAL_LIBRARIES pthread)
  295. endif()
  296.  
  297. set(COLMAP_INTERNAL_LIBRARIES
  298.     colmap
  299.     flann
  300.     graclus
  301.     lsd
  302.     pba
  303.     poisson_recon
  304.     sqlite3
  305.     sift_gpu
  306.     vlfeat
  307. )
  308.  
  309. if(CUDA_ENABLED)
  310.     list(APPEND COLMAP_INTERNAL_LIBRARIES colmap_cuda colmap)
  311. endif()
  312.  
  313. set(COLMAP_LIBRARIES
  314.     ${COLMAP_INTERNAL_LIBRARIES}
  315.     ${COLMAP_EXTERNAL_LIBRARIES}
  316. )
  317.  
  318. include_directories(
  319.     lib
  320.     src
  321.     ${COLMAP_INCLUDE_DIRS}
  322. )
  323.  
  324. link_directories(${COLMAP_LINK_DIRS})
  325.  
  326. add_subdirectory(lib)
  327. add_subdirectory(src)
  328.  
  329.  
  330. ################################################################################
  331. # Generate source groups for Visual Studio, XCode, etc.
  332. ################################################################################
  333.  
  334. COLMAP_ADD_SOURCE_DIR(lib/FLANN LIB_FLANN_SRCS *.h *.cpp *.hpp *.cu)
  335. COLMAP_ADD_SOURCE_DIR(lib/Graclus LIB_GRACLUS_SRCS *.h *.c)
  336. COLMAP_ADD_SOURCE_DIR(lib/LSD LIB_LSD_SRCS *.h *.c)
  337. COLMAP_ADD_SOURCE_DIR(lib/PBA LIB_PBA_SRCS *.h *.cpp *.cu)
  338. COLMAP_ADD_SOURCE_DIR(lib/PoissonRecon LIB_POISSON_RECON_SRCS *.h *.cpp *.inl)
  339. COLMAP_ADD_SOURCE_DIR(lib/SiftGPU LIB_SIFT_GPU_SRCS *.h *.cpp *.cu)
  340. COLMAP_ADD_SOURCE_DIR(lib/SQLite LIB_SQLITE_SRCS *.h *.c)
  341. COLMAP_ADD_SOURCE_DIR(lib/VLFeat LIB_VLFEAT_SRCS *.h *.c *.tc)
  342.  
  343. COLMAP_ADD_SOURCE_DIR(src/base BASE_SRCS *.h *.cc)
  344. COLMAP_ADD_SOURCE_DIR(src/controllers CONTROLLERS_SRCS *.h *.cc)
  345. COLMAP_ADD_SOURCE_DIR(src/estimators ESTIMATORS_SRCS *.h *.cc)
  346. COLMAP_ADD_SOURCE_DIR(src/exe EXE_SRCS *.h *.cc)
  347. COLMAP_ADD_SOURCE_DIR(src/feature FEATURE_SRCS *.h *.cc)
  348. COLMAP_ADD_SOURCE_DIR(src/mvs MVS_SRCS *.h *.cc *.cu)
  349. COLMAP_ADD_SOURCE_DIR(src/optim OPTIM_SRCS *.h *.cc)
  350. COLMAP_ADD_SOURCE_DIR(src/retrieval RETRIEVAL_SRCS *.h *.cc)
  351. COLMAP_ADD_SOURCE_DIR(src/sfm SFM_SRCS *.h *.cc)
  352. COLMAP_ADD_SOURCE_DIR(src/tools TOOLS_SRCS *.h *.cc)
  353. COLMAP_ADD_SOURCE_DIR(src/ui UI_SRCS *.h *.cc)
  354. COLMAP_ADD_SOURCE_DIR(src/util UTIL_SRCS *.h *.cc)
  355.  
  356. # Add all of the source files to a regular library target, as using a custom
  357. # target does not allow us to set its C++ include directories (and thus
  358. # intellisense can't find any of the included files).
  359. add_library(
  360.     ${COLMAP_SRC_ROOT_FOLDER}
  361.     ${LIB_FLANN_SRCS}
  362.     ${LIB_GRACLUS_SRCS}
  363.     ${LIB_LSD_SRCS}
  364.     ${LIB_PBA_SRCS}
  365.     ${LIB_POISSON_RECON_SRCS}
  366.     ${LIB_SIFT_GPU_SRCS}
  367.     ${LIB_SQLITE_SRCS}
  368.     ${LIB_VLFEAT_SRCS}
  369.     ${BASE_SRCS}
  370.     ${CONTROLLERS_SRCS}
  371.     ${ESTIMATORS_SRCS}
  372.     ${EXE_SRCS}
  373.     ${FEATURE_SRCS}
  374.     ${MVS_SRCS}
  375.     ${OPTIM_SRCS}
  376.     ${RETRIEVAL_SRCS}
  377.     ${SFM_SRCS}
  378.     ${TOOLS_SRCS}
  379.     ${UI_SRCS}
  380.     ${UTIL_SRCS}
  381. )
  382.  
  383. # Prevent the library from being compiled automatically.
  384. set_target_properties(
  385.     ${COLMAP_SRC_ROOT_FOLDER} PROPERTIES
  386.     EXCLUDE_FROM_ALL 1
  387.     EXCLUDE_FROM_DEFAULT_BUILD 1)
  388.  
  389.  
  390. ################################################################################
  391. # Install and uninstall scripts
  392. ################################################################################
  393.  
  394. # Install header files.
  395. install(DIRECTORY src/
  396.         DESTINATION include/colmap
  397.         FILES_MATCHING PATTERN "*.h")
  398. install(DIRECTORY lib/
  399.         DESTINATION include/colmap/lib
  400.         FILES_MATCHING REGEX ".*[.]h|.*[.]hpp|.*[.]inl")
  401.  
  402. # Generate and install CMake configuration.
  403. configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/CMakeConfig.cmake.in"
  404.                "${CMAKE_CURRENT_BINARY_DIR}/COLMAPConfig.cmake" @ONLY)
  405. install(FILES "${CMAKE_CURRENT_BINARY_DIR}/COLMAPConfig.cmake"
  406.         DESTINATION "share/colmap")
  407. configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/CMakeConfigVersion.cmake.in"
  408.                "${CMAKE_CURRENT_BINARY_DIR}/COLMAPConfigVersion.cmake" @ONLY)
  409. install(FILES "${CMAKE_CURRENT_BINARY_DIR}/COLMAPConfigVersion.cmake"
  410.         DESTINATION "share/colmap")
  411.  
  412. # Install find_package scripts for dependencies.
  413. install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake
  414.         DESTINATION share/colmap
  415.         FILES_MATCHING PATTERN "Find*.cmake")
  416.  
  417. # Install batch scripts under Windows.
  418. if(IS_MSVC)
  419.     install(FILES "scripts/shell/COLMAP.bat" "scripts/shell/RUN_TESTS.bat"
  420.             PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
  421.                         GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
  422.             DESTINATION "/")
  423. endif()
  424.  
  425. # Install application meny entry under Linux/Unix.
  426. if(UNIX AND NOT APPLE)
  427.     install(FILES "doc/COLMAP.desktop" DESTINATION "share/applications")
  428. endif()
  429.  
  430. # Configure the uninstallation script.
  431. configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/CMakeUninstall.cmake.in"
  432.                "${CMAKE_CURRENT_BINARY_DIR}/CMakeUninstall.cmake"
  433.                IMMEDIATE @ONLY)
  434. add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/CMakeUninstall.cmake)
  435. set_target_properties(uninstall PROPERTIES FOLDER ${CMAKE_TARGETS_ROOT_FOLDER})
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement