CMakeLists.txt 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. set(MODULE_NAME "objc_bindings_generator")
  2. set(OPENCV_MODULE_IS_PART_OF_WORLD FALSE)
  3. ocv_add_module(${MODULE_NAME} INTERNAL opencv_core opencv_imgproc)
  4. #set(OPENCV_OBJC_SIGNATURES_FILE "${CMAKE_CURRENT_BINARY_DIR}/opencv_objc_signatures.json" CACHE INTERNAL "")
  5. set(OPENCV_OBJC_BINDINGS_DIR "${CMAKE_CURRENT_BINARY_DIR}" CACHE INTERNAL "")
  6. file(REMOVE_RECURSE "${OPENCV_OBJC_BINDINGS_DIR}/osx")
  7. file(REMOVE "${OPENCV_DEPHELPER}/gen_opencv_objc_source_osx") # force re-run after CMake
  8. file(REMOVE_RECURSE "${OPENCV_OBJC_BINDINGS_DIR}/ios")
  9. file(REMOVE "${OPENCV_DEPHELPER}/gen_opencv_objc_source_ios") # force re-run after CMake
  10. # This file is included from a subdirectory
  11. set(OBJC_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/..")
  12. include(${OBJC_SOURCE_DIR}/common.cmake) # fill OPENCV_OBJC_MODULES
  13. # common files
  14. file(GLOB_RECURSE deps "${CMAKE_CURRENT_SOURCE_DIR}/templates/*")
  15. set(__modules_config "") # list of OpenCV modules
  16. foreach(m ${OPENCV_OBJC_MODULES})
  17. set(module_objc_dir "${OPENCV_MODULE_${m}_LOCATION}/misc/objc")
  18. list(APPEND deps ${OPENCV_MODULE_${m}_HEADERS})
  19. file(GLOB_RECURSE misc_files "${module_objc_dir}/*")
  20. list(APPEND deps ${misc_files})
  21. string(REGEX REPLACE "^opencv_" "" m_ "${m}")
  22. if(__modules_config)
  23. set(__modules_config "${__modules_config},\n")
  24. endif()
  25. file(RELATIVE_PATH rel_path "${OpenCV_SOURCE_DIR}" "${OPENCV_MODULE_${m}_LOCATION}")
  26. set(__modules_config "${__modules_config} { \"name\": \"${m_}\", \"location\": \"${rel_path}\" }")
  27. endforeach(m)
  28. if(HAVE_opencv_objc)
  29. set(__objc_build_dir "\"objc_build_dir\": \"${CMAKE_CURRENT_BINARY_DIR}/../objc\",")
  30. endif()
  31. set(CONFIG_FILE "${CMAKE_CURRENT_BINARY_DIR}/gen_objc.json")
  32. set(__config_str
  33. "{
  34. \"rootdir\": \"${OpenCV_SOURCE_DIR}\",
  35. ${__objc_build_dir}
  36. \"modules\": [
  37. ${__modules_config}
  38. ]
  39. }
  40. ")
  41. #TODO: ocv_update_file("${CONFIG_FILE}" "${__config_str}" ON_CHANGE_REMOVE "${OPENCV_DEPHELPER}/gen_opencv_objc_source")
  42. if(EXISTS "${CONFIG_FILE}")
  43. file(READ "${CONFIG_FILE}" __content)
  44. else()
  45. set(__content "")
  46. endif()
  47. if(NOT "${__content}" STREQUAL "${__config_str}")
  48. file(WRITE "${CONFIG_FILE}" "${__config_str}")
  49. file(REMOVE "${OPENCV_DEPHELPER}/gen_opencv_objc_source")
  50. endif()
  51. unset(__config_str)
  52. set(objc_generated_files
  53. # "${OPENCV_OBJC_SIGNATURES_FILE}"
  54. )
  55. string(REPLACE "opencv_" "" MODULES "${OPENCV_OBJC_MODULES}")
  56. if(NOT DEFINED OPENCV_OBJC_TARGET AND APPLE_FRAMEWORK)
  57. if(IOS)
  58. set(OPENCV_OBJC_TARGET "ios")
  59. else()
  60. set(OPENCV_OBJC_TARGET "osx")
  61. endif()
  62. endif()
  63. if(NOT DEFINED OPENCV_OBJC_FRAMEWORK_NAME)
  64. if(DEFINED FRAMEWORK_NAME)
  65. set(OPENCV_OBJC_FRAMEWORK_NAME "${FRAMEWORK_NAME}")
  66. else()
  67. set(OPENCV_OBJC_FRAMEWORK_NAME "opencv2")
  68. endif()
  69. endif()
  70. set(objc_generated_targets "")
  71. macro(ocv_add_objc_generated_target TARGET)
  72. set(objc_${TARGET}_generated_output_dependecy "${OPENCV_DEPHELPER}/gen_opencv_objc_source_${TARGET}")
  73. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}")
  74. add_custom_command(
  75. OUTPUT ${objc_generated_files} "${objc_${TARGET}_generated_output_dependecy}"
  76. COMMAND ${PYTHON_DEFAULT_EXECUTABLE} "${OBJC_SOURCE_DIR}/generator/gen_objc.py"
  77. -p "${OBJC_SOURCE_DIR}/../python/src2/gen2.py"
  78. -c "${CONFIG_FILE}"
  79. -t "${TARGET}"
  80. -f "${OPENCV_OBJC_FRAMEWORK_NAME}"
  81. COMMAND ${CMAKE_COMMAND} -E touch "${objc_${TARGET}_generated_output_dependecy}"
  82. WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}"
  83. DEPENDS "${OpenCV_SOURCE_DIR}/modules/objc/generator/gen_objc.py"
  84. "${OpenCV_SOURCE_DIR}/modules/python/src2/gen2.py"
  85. "${OpenCV_SOURCE_DIR}/modules/python/src2/hdr_parser.py"
  86. # don't, result of file(WRITE): "${CMAKE_CURRENT_BINARY_DIR}/gen_objc.json"
  87. ${deps}
  88. # not allowed (file(WRITE) result): "${CONFIG_FILE}"
  89. COMMENT "Generate files for Objective-C bindings (${TARGET})"
  90. )
  91. add_custom_target(gen_opencv_objc_source_${TARGET}
  92. # excluded from all: ALL
  93. DEPENDS ${objc_generated_files} ${objc_${TARGET}_generated_output_dependecy}
  94. SOURCES "${OBJC_SOURCE_DIR}/generator/gen_objc.py"
  95. "${OBJC_SOURCE_DIR}/generator/templates/cmakelists.template"
  96. "${CMAKE_CURRENT_BINARY_DIR}/gen_objc.json"
  97. )
  98. list(APPEND objc_generated_targets gen_opencv_objc_source_${TARGET})
  99. endmacro()
  100. if(OPENCV_OBJC_TARGET)
  101. ocv_add_objc_generated_target(${OPENCV_OBJC_TARGET})
  102. else()
  103. ocv_add_objc_generated_target(osx)
  104. ocv_add_objc_generated_target(ios)
  105. endif()
  106. add_custom_target(gen_opencv_objc_source
  107. # excluded from all: ALL
  108. DEPENDS ${objc_generated_targets}
  109. )