From 16368a275b59fad1fc7ca6a82c243070a5fae608 Mon Sep 17 00:00:00 2001 From: Dmitry Kurtaev Date: Wed, 21 Jun 2017 14:33:47 +0300 Subject: [PATCH] cmake: add Halide support (#8794) --- CMakeLists.txt | 23 ++++++++++++++++- cmake/OpenCVDetectHalide.cmake | 45 ++++++++++++++++++++++++++++++++++ cmake/OpenCVUtils.cmake | 2 +- cmake/templates/cvconfig.h.in | 3 +++ modules/core/CMakeLists.txt | 2 +- 5 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 cmake/OpenCVDetectHalide.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 08bed826ba..f919577c4d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -112,6 +112,12 @@ endif() include(cmake/OpenCVUtils.cmake) +if(OPENCV_CXX11) + #cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) + set(CMAKE_CXX_STANDARD 11) + set(CMAKE_CXX_STANDARD_REQUIRED TRUE) +endif() + # must go before the project command ocv_update(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE) if(DEFINED CMAKE_BUILD_TYPE) @@ -212,6 +218,7 @@ OCV_OPTION(WITH_GSTREAMER_0_10 "Enable Gstreamer 0.10 support (instead of 1.x)" OCV_OPTION(WITH_GTK "Include GTK support" ON IF (UNIX AND NOT APPLE AND NOT ANDROID) ) OCV_OPTION(WITH_GTK_2_X "Use GTK version 2" OFF IF (UNIX AND NOT APPLE AND NOT ANDROID) ) OCV_OPTION(WITH_IPP "Include Intel IPP support" NOT MINGW IF (X86_64 OR X86) AND NOT WINRT ) +OCV_OPTION(WITH_HALIDE "Include Halide support" OFF) OCV_OPTION(WITH_JASPER "Include JPEG2K support" ON IF (NOT IOS) ) OCV_OPTION(WITH_JPEG "Include JPEG support" ON) OCV_OPTION(WITH_WEBP "Include WebP support" ON IF (NOT WINRT) ) @@ -295,6 +302,7 @@ OCV_OPTION(INSTALL_TESTS "Install accuracy and performance test binar # OpenCV build options # =================================================== +OCV_OPTION(OPENCV_CXX11 "Enable C++11 compilation mode" OFF ) OCV_OPTION(ENABLE_CCACHE "Use ccache" (UNIX AND NOT IOS AND (CMAKE_GENERATOR MATCHES "Makefile" OR CMAKE_GENERATOR MATCHES "Ninja")) ) OCV_OPTION(ENABLE_PRECOMPILED_HEADERS "Use precompiled headers" ON IF (NOT IOS AND NOT CMAKE_CROSSCOMPILING) ) OCV_OPTION(ENABLE_SOLUTION_FOLDERS "Solution folder in Visual Studio or in other IDEs" (MSVC_IDE OR CMAKE_GENERATOR MATCHES Xcode) ) @@ -623,6 +631,11 @@ if(WITH_OPENCL) include(cmake/OpenCVDetectOpenCL.cmake) endif() +# --- Halide --- +if(WITH_HALIDE) + include(cmake/OpenCVDetectHalide.cmake) +endif() + # --- DirectX --- if(WITH_DIRECTX) include(cmake/OpenCVDetectDirectX.cmake) @@ -768,7 +781,9 @@ endif() include(cmake/OpenCVGenHeaders.cmake) # Generate opencv.pc for pkg-config command -include(cmake/OpenCVGenPkgconfig.cmake) +if(NOT OPENCV_SKIP_PKGCONFIG_GENERATION) + include(cmake/OpenCVGenPkgconfig.cmake) +endif() # Generate OpenCV.mk for ndk-build (Android build tool) include(cmake/OpenCVGenAndroidMK.cmake) @@ -934,6 +949,9 @@ string(STRIP "${OPENCV_COMPILER_STR}" OPENCV_COMPILER_STR) status("") status(" C/C++:") status(" Built as dynamic libs?:" BUILD_SHARED_LIBS THEN YES ELSE NO) +if(OPENCV_CXX11) +status(" C++11:" "YES") +endif() status(" C++ Compiler:" ${OPENCV_COMPILER_STR}) status(" C++ flags (Release):" ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}) status(" C++ flags (Debug):" ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}) @@ -1302,6 +1320,9 @@ endif(DEFINED WITH_LAPACK) status(" Use Eigen:" HAVE_EIGEN THEN "YES (ver ${EIGEN_WORLD_VERSION}.${EIGEN_MAJOR_VERSION}.${EIGEN_MINOR_VERSION})" ELSE NO) status(" Use Cuda:" HAVE_CUDA THEN "YES (ver ${CUDA_VERSION_STRING})" ELSE NO) status(" Use OpenCL:" HAVE_OPENCL THEN YES ELSE NO) +if(WITH_HALIDE OR HAVE_HALIDE) +status(" Use Halide:" HAVE_HALIDE THEN "YES (${HALIDE_LIBRARIES} ${HALIDE_INCLUDE_DIRS})" ELSE NO) +endif() status(" Use OpenVX:" HAVE_OPENVX THEN "YES (${OPENVX_LIBRARIES})" ELSE "NO") status(" Use custom HAL:" OpenCV_USED_HAL THEN "YES (${OpenCV_USED_HAL})" ELSE "NO") diff --git a/cmake/OpenCVDetectHalide.cmake b/cmake/OpenCVDetectHalide.cmake new file mode 100644 index 0000000000..790f692056 --- /dev/null +++ b/cmake/OpenCVDetectHalide.cmake @@ -0,0 +1,45 @@ +cmake_minimum_required(VERSION 3.1) + +if(" ${HALIDE_ROOT_DIR}" STREQUAL " ") + unset(HALIDE_ROOT_DIR CACHE) +endif() +ocv_check_environment_variables(HALIDE_ROOT_DIR) +set(HALIDE_ROOT_DIR "${HALIDE_ROOT_DIR}" CACHE PATH "Halide root directory") + +if(NOT HAVE_HALIDE) + find_package(Halide QUIET) # Try CMake-based config files + if(Halide_FOUND) + set(HALIDE_INCLUDE_DIRS "${Halide_INCLUDE_DIRS}" CACHE PATH "Halide include directories" FORCE) + set(HALIDE_LIBRARIES "${Halide_LIBRARIES}" CACHE PATH "Halide libraries" FORCE) + set(HAVE_HALIDE TRUE) + endif() +endif() + +if(NOT HAVE_HALIDE AND HALIDE_ROOT_DIR) + # Try manual search + find_library(HALIDE_LIBRARY + NAMES Halide + HINTS ${HALIDE_ROOT_DIR}/lib # Unix + HINTS ${HALIDE_ROOT_DIR}/lib/Release # Win32 + ) + find_path(HALIDE_INCLUDE_DIR + NAMES Halide.h HalideRuntime.h + HINTS ${HALIDE_ROOT_DIR}/include + ) + if(HALIDE_LIBRARY AND HALIDE_INCLUDE_DIR) + # TODO try_compile + set(HALIDE_INCLUDE_DIRS "${HALIDE_INCLUDE_DIR}" CACHE PATH "Halide include directories" FORCE) + set(HALIDE_LIBRARIES "${HALIDE_LIBRARY}" CACHE PATH "Halide libraries" FORCE) + set(HAVE_HALIDE TRUE) + endif() + if(NOT HAVE_HALIDE) + ocv_clear_vars(HALIDE_LIBRARIES HALIDE_INCLUDE_DIRS CACHE) + endif() +endif() + +if(HAVE_HALIDE) + include_directories(${HALIDE_INCLUDE_DIRS}) + list(APPEND OPENCV_LINKER_LIBS ${HALIDE_LIBRARIES}) +else() + ocv_clear_vars(HALIDE_INCLUDE_DIRS HALIDE_LIBRARIES) +endif() diff --git a/cmake/OpenCVUtils.cmake b/cmake/OpenCVUtils.cmake index 433e497dd0..1c4ea4c7bf 100644 --- a/cmake/OpenCVUtils.cmake +++ b/cmake/OpenCVUtils.cmake @@ -79,7 +79,7 @@ endmacro() macro(ocv_check_environment_variables) foreach(_var ${ARGN}) - if(NOT DEFINED ${_var} AND DEFINED ENV{${_var}}) + if(" ${${_var}}" STREQUAL " " AND DEFINED ENV{${_var}}) set(__value "$ENV{${_var}}") file(TO_CMAKE_PATH "${__value}" __value) # Assume that we receive paths set(${_var} "${__value}") diff --git a/cmake/templates/cvconfig.h.in b/cmake/templates/cvconfig.h.in index 754409a6b2..6b021f99b4 100644 --- a/cmake/templates/cvconfig.h.in +++ b/cmake/templates/cvconfig.h.in @@ -92,6 +92,9 @@ /* GTK+ 2.x toolkit */ #cmakedefine HAVE_GTK +/* Halide support */ +#cmakedefine HAVE_HALIDE + /* Define to 1 if you have the header file. */ #cmakedefine HAVE_INTTYPES_H 1 diff --git a/modules/core/CMakeLists.txt b/modules/core/CMakeLists.txt index 1ca1daf827..b3580f7ba5 100644 --- a/modules/core/CMakeLists.txt +++ b/modules/core/CMakeLists.txt @@ -35,7 +35,7 @@ ocv_glob_module_sources(SOURCES "${OPENCV_MODULE_opencv_core_BINARY_DIR}/version ocv_module_include_directories(${the_module} ${ZLIB_INCLUDE_DIRS} ${OPENCL_INCLUDE_DIRS} ${CPUFEATURES_INCLUDE_DIRS}) ocv_create_module(${extra_libs}) -ocv_target_link_libraries(${the_module} ${ZLIB_LIBRARIES} "${OPENCL_LIBRARIES}" "${VA_LIBRARIES}" "${LAPACK_LIBRARIES}" "${CPUFEATURES_LIBRARIES}") +ocv_target_link_libraries(${the_module} ${ZLIB_LIBRARIES} "${OPENCL_LIBRARIES}" "${VA_LIBRARIES}" "${LAPACK_LIBRARIES}" "${CPUFEATURES_LIBRARIES}" "${HALIDE_LIBRARIES}") ocv_add_accuracy_tests() ocv_add_perf_tests()