Skip to content

Commit

Permalink
common: refactor CUDA support in CMake
Browse files Browse the repository at this point in the history
(cherry picked from commit b96dd573680262e6b94f6d7e53d80c994074cc96)
  • Loading branch information
cdcseacave committed Sep 23, 2024
1 parent 2090fa9 commit aa86191
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 21 deletions.
35 changes: 22 additions & 13 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,22 @@
########################################################################
#
# Project-wide settings
CMAKE_MINIMUM_REQUIRED(VERSION 3.8.2)
CMAKE_MINIMUM_REQUIRED(VERSION 3.10)
IF(POLICY CMP0011)
CMAKE_POLICY(SET CMP0011 NEW)
ENDIF()
IF(POLICY CMP0072)
CMAKE_POLICY(SET CMP0072 NEW)
ENDIF()
IF(POLICY CMP0074)
CMAKE_POLICY(SET CMP0074 NEW)
ENDIF()
IF(POLICY CMP0104)
CMAKE_POLICY(SET CMP0104 NEW)
ENDIF()
IF(POLICY CMP0146)
CMAKE_POLICY(SET CMP0146 OLD) # not required, but forced by OpenCV old support for CUDA
ENDIF()

# List configuration options
SET(OpenMVS_BUILD_TOOLS ON CACHE BOOL "Build example applications")
Expand Down Expand Up @@ -49,14 +55,14 @@ ENDIF()
# 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)
PROJECT(OpenMVS LANGUAGES CXX)

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
# Disable SSE on unsupported platforms
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm|ARM|aarch64|AARCH64)")
SET(OpenMVS_USE_SSE OFF)
ENDIF()
Expand Down Expand Up @@ -95,9 +101,6 @@ if(OpenMVS_USE_OPENMP)
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})
Expand All @@ -109,15 +112,20 @@ if(OpenMVS_USE_OPENGL)
endif()

if(OpenMVS_USE_CUDA)
if(POLICY CMP0146)
cmake_policy(SET CMP0146 NEW)
endif()
FIND_PACKAGE(CUDA)
if(CUDA_FOUND)
INCLUDE(CheckLanguage)
CHECK_LANGUAGE(CUDA)
if(CMAKE_CUDA_COMPILER)
SET(CUDA_FOUND TRUE)
if(NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
SET(CMAKE_CUDA_ARCHITECTURES "native")
endif()
ENABLE_LANGUAGE(CUDA)
# not required, but forced by OpenCV old support for CUDA
FIND_PACKAGE(CUDA REQUIRED)
# 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)
string(REGEX MATCH "^[0-9]+" CUDA_VERSION_MAJOR ${CMAKE_CUDA_COMPILER_VERSION})
string(REGEX REPLACE "([0-9]+)\\.([0-9]+).*" "\\2" CUDA_VERSION_MINOR ${CMAKE_CUDA_COMPILER_VERSION})
if(${CUDA_VERSION_MAJOR} GREATER 10)
SET(CMAKE_CUDA_STANDARD 17)
endif()
EXECUTE_PROCESS(COMMAND "${CMAKE_CUDA_COMPILER}" --list-gpu-arch
Expand Down Expand Up @@ -159,6 +167,7 @@ if(OpenMVS_USE_CUDA)
SET(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --expt-relaxed-constexpr")
INCLUDE_DIRECTORIES(${CUDA_INCLUDE_DIRS})
SET(_USE_CUDA TRUE)
MESSAGE("-- Found CUDA: " ${CMAKE_CUDA_COMPILER_VERSION} " with GPU arch: " ${CMAKE_CUDA_ARCHITECTURES})
else()
SET(CUDA_CUDA_LIBRARY "")
MESSAGE("-- Can't find CUDA. Continuing without it.")
Expand Down
21 changes: 13 additions & 8 deletions build/Utils.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -360,14 +360,17 @@ macro(add_extra_compiler_option option)
if(CMAKE_BUILD_TYPE)
set(CMAKE_TRY_COMPILE_CONFIGURATION ${CMAKE_BUILD_TYPE})
endif()
_check_flag_support(CXX "${option}" _varname "${BUILD_EXTRA_CXX_FLAGS} ${ARGN}")
if(${_varname})
set(BUILD_EXTRA_CXX_FLAGS "${BUILD_EXTRA_CXX_FLAGS} ${option}")
if(CMAKE_CXX_COMPILER_ID)
_check_flag_support(CXX "${option}" _varname "${BUILD_EXTRA_CXX_FLAGS} ${ARGN}")
if(${_varname})
set(BUILD_EXTRA_CXX_FLAGS "${BUILD_EXTRA_CXX_FLAGS} ${option}")
endif()
endif()

_check_flag_support(C "${option}" _varname "${BUILD_EXTRA_C_FLAGS} ${ARGN}")
if(${_varname})
set(BUILD_EXTRA_C_FLAGS "${BUILD_EXTRA_C_FLAGS} ${option}")
if(CMAKE_C_COMPILER_ID)
_check_flag_support(C "${option}" _varname "${BUILD_EXTRA_C_FLAGS} ${ARGN}")
if(${_varname})
set(BUILD_EXTRA_C_FLAGS "${BUILD_EXTRA_C_FLAGS} ${option}")
endif()
endif()
endmacro()

Expand Down Expand Up @@ -707,7 +710,9 @@ macro(optimize_default_compiler_settings)
string(REPLACE "/Zm1000" "" ${flags} "${${flags}}")
endforeach()
endif()
CHECK_INCLUDE_FILE("inttypes.h" HAVE_INTTYPES_H)
if(CMAKE_C_COMPILER_ID)
CHECK_INCLUDE_FILE("inttypes.h" HAVE_INTTYPES_H)
endif()
endmacro()


Expand Down

0 comments on commit aa86191

Please sign in to comment.