cmake: add Halide support (#8794)
authorDmitry Kurtaev <dmitry.kurtaev+github@gmail.com>
Wed, 21 Jun 2017 11:33:47 +0000 (14:33 +0300)
committerVadim Pisarevsky <vadim.pisarevsky@gmail.com>
Wed, 21 Jun 2017 11:33:47 +0000 (14:33 +0300)
CMakeLists.txt
cmake/OpenCVDetectHalide.cmake [new file with mode: 0644]
cmake/OpenCVUtils.cmake
cmake/templates/cvconfig.h.in
modules/core/CMakeLists.txt

index 08bed82..f919577 100644 (file)
@@ -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 (file)
index 0000000..790f692
--- /dev/null
@@ -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()
index 433e497..1c4ea4c 100644 (file)
@@ -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}")
index 754409a..6b021f9 100644 (file)
@@ -92,6 +92,9 @@
 /* GTK+ 2.x toolkit */
 #cmakedefine HAVE_GTK
 
+/* Halide support */
+#cmakedefine HAVE_HALIDE
+
 /* Define to 1 if you have the <inttypes.h> header file. */
 #cmakedefine HAVE_INTTYPES_H 1
 
index 1ca1daf..b3580f7 100644 (file)
@@ -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()