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