• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)
2
3include(CheckCCompilerFlag)
4include(CheckCXXCompilerFlag)
5
6set(TEGRA_HAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
7set(CAROTENE_DIR "${TEGRA_HAL_DIR}/../")
8
9if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm.*|ARM.*)")
10  set(ARM TRUE)
11elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64.*|AARCH64.*")
12  set(AARCH64 TRUE)
13endif()
14
15set(TEGRA_COMPILER_FLAGS "")
16
17if(CV_GCC OR CV_CLANG)
18  # Generate unwind information even for functions that can't throw/propagate exceptions.
19  # This lets debuggers and such get non-broken backtraces for such functions, even without debugging symbols.
20  list(APPEND TEGRA_COMPILER_FLAGS -funwind-tables)
21endif()
22
23if(CV_GCC OR CV_CLANG)
24  if(X86 OR ARMEABI_V6 OR (MIPS AND ANDROID_COMPILER_VERSION VERSION_LESS "4.6"))
25    list(APPEND TEGRA_COMPILER_FLAGS -fweb -fwrapv -frename-registers -fsched-stalled-insns-dep=100 -fsched-stalled-insns=2)
26  elseif(CV_CLANG)
27    list(APPEND TEGRA_COMPILER_FLAGS -fwrapv)
28  else()
29    list(APPEND TEGRA_COMPILER_FLAGS -fweb -fwrapv -frename-registers -fsched2-use-superblocks -fsched2-use-traces
30                                     -fsched-stalled-insns-dep=100 -fsched-stalled-insns=2)
31  endif()
32  if((ANDROID_COMPILER_IS_CLANG OR NOT ANDROID_COMPILER_VERSION VERSION_LESS "4.7") AND ANDROID_NDK_RELEASE STRGREATER "r8d" )
33    list(APPEND TEGRA_COMPILER_FLAGS -fgraphite -fgraphite-identity -floop-block -floop-flatten -floop-interchange
34                                     -floop-strip-mine -floop-parallelize-all -ftree-loop-linear)
35  endif()
36endif()
37
38string(REPLACE ";" " " TEGRA_COMPILER_FLAGS "${TEGRA_COMPILER_FLAGS}")
39set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${TEGRA_COMPILER_FLAGS}")
40set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TEGRA_COMPILER_FLAGS}")
41
42if(ARMEABI_V7A)
43  if(CV_GCC OR CV_CLANG)
44    set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-tree-vectorize" )
45    set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-tree-vectorize" )
46  endif()
47endif()
48
49if(WITH_LOGS)
50  add_definitions(-DHAVE_LOGS)
51endif()
52
53set(CAROTENE_NS "carotene_o4t" CACHE STRING "" FORCE)
54
55function(compile_carotene)
56  if(";${CPU_BASELINE_FINAL};" MATCHES ";NEON;")
57    set(WITH_NEON ON)
58  endif()
59
60  add_subdirectory("${CAROTENE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/carotene")
61endfunction()
62
63compile_carotene()
64
65include_directories("${CAROTENE_DIR}/include")
66
67get_target_property(carotene_defs carotene_objs INTERFACE_COMPILE_DEFINITIONS)
68set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS ${carotene_defs})
69
70  if(CV_GCC)
71    # allow more inlines - these parameters improve performance for:
72    #   matchTemplate about 5-10%
73    #   goodFeaturesToTrack 10-20%
74    #   cornerHarris 30% for some cases
75    if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "10.0.0")
76      set_source_files_properties(impl.cpp $<TARGET_OBJECTS:carotene_objs> COMPILE_FLAGS "--param ipcp-unit-growth=100000 --param inline-unit-growth=100000 --param large-stack-frame-growth=5000")
77    else()
78      set_source_files_properties(impl.cpp $<TARGET_OBJECTS:carotene_objs> COMPILE_FLAGS "--param ipa-cp-unit-growth=100000 --param inline-unit-growth=100000 --param large-stack-frame-growth=5000")
79    endif()
80#    set_source_files_properties(impl.cpp $<TARGET_OBJECTS:carotene_objs> COMPILE_FLAGS "--param ipcp-unit-growth=100000 --param inline-unit-growth=100000 --param large-stack-frame-growth=5000")
81  endif()
82
83add_library(tegra_hal STATIC $<TARGET_OBJECTS:carotene_objs>)
84set_target_properties(tegra_hal PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${3P_LIBRARY_OUTPUT_PATH})
85set(OPENCV_SRC_DIR "${CMAKE_SOURCE_DIR}")
86if(NOT BUILD_SHARED_LIBS)
87  ocv_install_target(tegra_hal EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev)
88endif()
89target_include_directories(tegra_hal PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${OPENCV_SRC_DIR}/modules/core/include)
90
91set(CAROTENE_HAL_VERSION "0.0.1" PARENT_SCOPE)
92set(CAROTENE_HAL_LIBRARIES "tegra_hal" PARENT_SCOPE)
93set(CAROTENE_HAL_HEADERS "carotene/tegra_hal.hpp" PARENT_SCOPE)
94set(CAROTENE_HAL_INCLUDE_DIRS "${CMAKE_BINARY_DIR}" PARENT_SCOPE)
95
96configure_file("tegra_hal.hpp" "${CMAKE_BINARY_DIR}/carotene/tegra_hal.hpp" COPYONLY)
97configure_file("${CAROTENE_DIR}/include/carotene/definitions.hpp" "${CMAKE_BINARY_DIR}/carotene/definitions.hpp" COPYONLY)
98configure_file("${CAROTENE_DIR}/include/carotene/functions.hpp" "${CMAKE_BINARY_DIR}/carotene/functions.hpp" COPYONLY)
99configure_file("${CAROTENE_DIR}/include/carotene/types.hpp" "${CMAKE_BINARY_DIR}/carotene/types.hpp" COPYONLY)
100