CMakeLists.txt 4.5 KB

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