Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/3rdparty/carotene/hal/CMakeLists.txt
16337 views
1
cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)
2
3
include(CheckCCompilerFlag)
4
include(CheckCXXCompilerFlag)
5
6
set(TEGRA_HAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
7
set(CAROTENE_DIR "${TEGRA_HAL_DIR}/../")
8
9
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm.*|ARM.*)")
10
set(ARM TRUE)
11
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64.*|AARCH64.*")
12
set(AARCH64 TRUE)
13
endif()
14
15
set(TEGRA_COMPILER_FLAGS "")
16
17
if(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)
21
endif()
22
23
if(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()
36
endif()
37
38
string(REPLACE ";" " " TEGRA_COMPILER_FLAGS "${TEGRA_COMPILER_FLAGS}")
39
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${TEGRA_COMPILER_FLAGS}")
40
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TEGRA_COMPILER_FLAGS}")
41
42
if(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()
47
endif()
48
49
if(WITH_LOGS)
50
add_definitions(-DHAVE_LOGS)
51
endif()
52
53
set(CAROTENE_NS "carotene_o4t" CACHE STRING "" FORCE)
54
55
function(compile_carotene)
56
if(ENABLE_NEON)
57
set(WITH_NEON ON)
58
endif()
59
60
add_subdirectory("${CAROTENE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/carotene")
61
62
if(ARM OR AARCH64)
63
if(CMAKE_BUILD_TYPE)
64
set(CMAKE_TRY_COMPILE_CONFIGURATION ${CMAKE_BUILD_TYPE})
65
endif()
66
check_cxx_compiler_flag("-mfpu=neon" CXX_HAS_MFPU_NEON)
67
check_c_compiler_flag("-mfpu=neon" C_HAS_MFPU_NEON)
68
if(${CXX_HAS_MFPU_NEON} AND ${C_HAS_MFPU_NEON} AND NOT "${CMAKE_CXX_FLAGS} " MATCHES "-mfpu=neon[^ ]*")
69
get_target_property(old_flags "carotene_objs" COMPILE_FLAGS)
70
if(old_flags)
71
set_target_properties("carotene_objs" PROPERTIES COMPILE_FLAGS "${old_flags} -mfpu=neon")
72
else()
73
set_target_properties("carotene_objs" PROPERTIES COMPILE_FLAGS "-mfpu=neon")
74
endif()
75
endif()
76
endif()
77
endfunction()
78
79
compile_carotene()
80
81
include_directories("${CAROTENE_DIR}/include")
82
83
get_target_property(carotene_defs carotene_objs INTERFACE_COMPILE_DEFINITIONS)
84
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS ${carotene_defs})
85
86
if(CV_GCC)
87
# allow more inlines - these parameters improve performance for:
88
# matchTemplate about 5-10%
89
# goodFeaturesToTrack 10-20%
90
# cornerHarris 30% for some cases
91
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")
92
# 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")
93
endif()
94
95
add_library(tegra_hal STATIC $<TARGET_OBJECTS:carotene_objs>)
96
set_target_properties(tegra_hal PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${3P_LIBRARY_OUTPUT_PATH})
97
set(OPENCV_SRC_DIR "${CMAKE_SOURCE_DIR}")
98
if(NOT BUILD_SHARED_LIBS)
99
ocv_install_target(tegra_hal EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev)
100
endif()
101
target_include_directories(tegra_hal PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${OPENCV_SRC_DIR}/modules/core/include)
102
103
set(CAROTENE_HAL_VERSION "0.0.1" PARENT_SCOPE)
104
set(CAROTENE_HAL_LIBRARIES "tegra_hal" PARENT_SCOPE)
105
set(CAROTENE_HAL_HEADERS "carotene/tegra_hal.hpp" PARENT_SCOPE)
106
set(CAROTENE_HAL_INCLUDE_DIRS "${CMAKE_BINARY_DIR}" PARENT_SCOPE)
107
108
configure_file("tegra_hal.hpp" "${CMAKE_BINARY_DIR}/carotene/tegra_hal.hpp" COPYONLY)
109
configure_file("${CAROTENE_DIR}/include/carotene/definitions.hpp" "${CMAKE_BINARY_DIR}/carotene/definitions.hpp" COPYONLY)
110
configure_file("${CAROTENE_DIR}/include/carotene/functions.hpp" "${CMAKE_BINARY_DIR}/carotene/functions.hpp" COPYONLY)
111
configure_file("${CAROTENE_DIR}/include/carotene/types.hpp" "${CMAKE_BINARY_DIR}/carotene/types.hpp" COPYONLY)
112
113