From 32d3d6fa9745d76a2dba2524151f4beb8e45174e Mon Sep 17 00:00:00 2001 From: Maksim Shabunin Date: Tue, 3 Sep 2024 16:30:49 +0300 Subject: [PATCH] build: minor changes for cmake 3.30 and some cleanup --- CMakeLists.txt | 87 ++++++----------------------- cmake/OpenCVDetectCXXCompiler.cmake | 8 ++- cmake/OpenCVDownload.cmake | 5 +- 3 files changed, 29 insertions(+), 71 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e4ea325d69..623c2b9540 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -121,14 +121,20 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ${ENABLE_PIC}) ocv_cmake_hook(PRE_CMAKE_BOOTSTRAP) # Bootstrap CMake system: setup CMAKE_SYSTEM_NAME and other vars + +# workaround: https://gitlab.kitware.com/cmake/cmake/-/issues/20989 if(OPENCV_WORKAROUND_CMAKE_20989) set(CMAKE_SYSTEM_PROCESSOR_BACKUP ${CMAKE_SYSTEM_PROCESSOR}) endif() -enable_language(CXX C) + +project(OpenCV CXX C) + if(OPENCV_WORKAROUND_CMAKE_20989) set(CMAKE_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR_BACKUP}) endif() +enable_testing() + ocv_cmake_hook(POST_CMAKE_BOOTSTRAP) if(NOT OPENCV_SKIP_CMAKE_SYSTEM_FILE) @@ -151,10 +157,6 @@ if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) # https://cmake.org/cmake/help/ endif() endif() -enable_testing() - -project(OpenCV CXX C) - if(MSVC) set(CMAKE_USE_RELATIVE_PATHS ON CACHE INTERNAL "" FORCE) endif() @@ -163,70 +165,30 @@ ocv_cmake_eval(DEBUG_PRE ONCE) ocv_clear_vars(OpenCVModules_TARGETS) -include(cmake/OpenCVDownload.cmake) - -set(BUILD_LIST "" CACHE STRING "Build only listed modules (comma-separated, e.g. 'videoio,dnn,ts')") - # ---------------------------------------------------------------------------- -# Break in case of popular CMake configuration mistakes +# Autodetect if we are in a GIT repository # ---------------------------------------------------------------------------- -if(NOT CMAKE_SIZEOF_VOID_P GREATER 0) - message(FATAL_ERROR "CMake fails to determine the bitness of the target platform. - Please check your CMake and compiler installation. If you are cross-compiling then ensure that your CMake toolchain file correctly sets the compiler details.") +find_host_package(Git QUIET) + +if(NOT DEFINED OPENCV_VCSVERSION AND GIT_FOUND) + ocv_git_describe(OPENCV_VCSVERSION "${OpenCV_SOURCE_DIR}") +elseif(NOT DEFINED OPENCV_VCSVERSION) + # We don't have git: + set(OPENCV_VCSVERSION "unknown") endif() +include(cmake/OpenCVDownload.cmake) + # ---------------------------------------------------------------------------- # Detect compiler and target platform architecture # ---------------------------------------------------------------------------- include(cmake/OpenCVDetectCXXCompiler.cmake) ocv_cmake_hook(POST_DETECT_COMPILER) -# Add these standard paths to the search paths for FIND_LIBRARY -# to find libraries from these locations first -if(UNIX AND NOT ANDROID) - if(X86_64 OR CMAKE_SIZEOF_VOID_P EQUAL 8) - if(EXISTS /lib64) - list(APPEND CMAKE_LIBRARY_PATH /lib64) - else() - list(APPEND CMAKE_LIBRARY_PATH /lib) - endif() - if(EXISTS /usr/lib64) - list(APPEND CMAKE_LIBRARY_PATH /usr/lib64) - else() - list(APPEND CMAKE_LIBRARY_PATH /usr/lib) - endif() - elseif(X86 OR CMAKE_SIZEOF_VOID_P EQUAL 4) - if(EXISTS /lib32) - list(APPEND CMAKE_LIBRARY_PATH /lib32) - else() - list(APPEND CMAKE_LIBRARY_PATH /lib) - endif() - if(EXISTS /usr/lib32) - list(APPEND CMAKE_LIBRARY_PATH /usr/lib32) - else() - list(APPEND CMAKE_LIBRARY_PATH /usr/lib) - endif() - endif() -endif() - -# Add these standard paths to the search paths for FIND_PATH -# to find include files from these locations first -if(MINGW) - if(EXISTS /mingw) - list(APPEND CMAKE_INCLUDE_PATH /mingw) - endif() - if(EXISTS /mingw32) - list(APPEND CMAKE_INCLUDE_PATH /mingw32) - endif() - if(EXISTS /mingw64) - list(APPEND CMAKE_INCLUDE_PATH /mingw64) - endif() -endif() - # ---------------------------------------------------------------------------- # OpenCV cmake options # ---------------------------------------------------------------------------- - +set(BUILD_LIST "" CACHE STRING "Build only listed modules (comma-separated, e.g. 'videoio,dnn,ts')") OCV_OPTION(OPENCV_ENABLE_NONFREE "Enable non-free algorithms" OFF) # 3rd party libs @@ -660,19 +622,6 @@ ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR}) # ---------------------------------------------------------------------------- set(OPENCV_EXTRA_MODULES_PATH "" CACHE PATH "Where to look for additional OpenCV modules (can be ;-separated list of paths)") -# ---------------------------------------------------------------------------- -# Autodetect if we are in a GIT repository -# ---------------------------------------------------------------------------- -find_host_package(Git QUIET) - -if(NOT DEFINED OPENCV_VCSVERSION AND GIT_FOUND) - ocv_git_describe(OPENCV_VCSVERSION "${OpenCV_SOURCE_DIR}") -elseif(NOT DEFINED OPENCV_VCSVERSION) - # We don't have git: - set(OPENCV_VCSVERSION "unknown") -endif() - - # ---------------------------------------------------------------------------- # OpenCV compiler and linker options # ---------------------------------------------------------------------------- diff --git a/cmake/OpenCVDetectCXXCompiler.cmake b/cmake/OpenCVDetectCXXCompiler.cmake index 448afd46ea..77c9e5c985 100644 --- a/cmake/OpenCVDetectCXXCompiler.cmake +++ b/cmake/OpenCVDetectCXXCompiler.cmake @@ -83,6 +83,10 @@ if(NOT DEFINED CMAKE_SIZEOF_VOID_P AND NOT OPENCV_SUPPRESS_MESSAGE_MISSING_CMAKE_SIZEOF_VOID_P) message(WARNING "OpenCV: CMAKE_SIZEOF_VOID_P is not defined. Perhaps CMake toolchain is broken") endif() +if(NOT CMAKE_SIZEOF_VOID_P GREATER 0) + message(FATAL_ERROR "CMake fails to determine the bitness of the target platform. + Please check your CMake and compiler installation. If you are cross-compiling then ensure that your CMake toolchain file correctly sets the compiler details.") +endif() message(STATUS "Detected processor: ${CMAKE_SYSTEM_PROCESSOR}") if(OPENCV_SKIP_SYSTEM_PROCESSOR_DETECTION) @@ -156,8 +160,10 @@ elseif(MSVC) set(OpenCV_ARCH "ARM") elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8") set(OpenCV_ARCH "x64") + elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4") + set(OpenCV_ARCH "x86") else() - set(OpenCV_ARCH x86) + message(FATAL_ERROR "Failed to determine system architecture") endif() if(MSVC_VERSION EQUAL 1400) diff --git a/cmake/OpenCVDownload.cmake b/cmake/OpenCVDownload.cmake index 3e46515537..40e48d7465 100644 --- a/cmake/OpenCVDownload.cmake +++ b/cmake/OpenCVDownload.cmake @@ -40,11 +40,14 @@ file(REMOVE "${OPENCV_DOWNLOAD_WITH_WGET}") ocv_check_environment_variables(OPENCV_DOWNLOAD_MIRROR_ID) function(ocv_init_download_mirror) + if(NOT GIT_FOUND) + return() + endif() if(NOT DEFINED OPENCV_DOWNLOAD_MIRROR_ID) # Run `git remote get-url origin` to get remote source execute_process( COMMAND - git remote get-url origin + ${GIT_EXECUTABLE} remote get-url origin WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} RESULT_VARIABLE