CMakeLists.txt 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. # 非招行开发人员不允许改动本文件!!
  2. if(RVC_VERSION)
  3. set(RVC_INTEGRATE_BUILD TRUE)
  4. set(DEVADAPTER_USING_CONAN TRUE)
  5. if(WITH_LOCAL_DEVLIB)
  6. set(DEVADAPTER_USING_CONAN FALSE)
  7. endif(WITH_LOCAL_DEVLIB)
  8. else()
  9. project(DevAdapter)
  10. cmake_minimum_required (VERSION 3.8)
  11. set(DEVADAPTER_USING_CONAN FALSE)
  12. endif(RVC_VERSION)
  13. if(MSVC AND (CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i686|x86|AMD64") )
  14. set(DIFF_PLATFORM_SUB_DIR "msvc_x86")
  15. elseif((NOT MSVC) AND (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64"))
  16. set(DIFF_PLATFORM_SUB_DIR "gcc_aarch64")
  17. elseif((NOT MSVC) AND (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64"))
  18. set(DIFF_PLATFORM_SUB_DIR "gcc_x64")
  19. endif()
  20. message(STATUS "lib rely on directory: ${DIFF_PLATFORM_SUB_DIR}")
  21. if(RVC_INTEGRATE_BUILD)
  22. include_directories(${RVC_COMMON_INCLUDE_DIR})
  23. if(SIMULATE_ON)
  24. rvc_set_library_output_dir("${RVC_INSTALL_PREFIX}${RVC_VENDOR_PATH}")
  25. endif(SIMULATE_ON)
  26. endif(RVC_INTEGRATE_BUILD)
  27. macro(rvc_traverse_sub_cmake_dirs)
  28. file(GLOB all_valid_subdirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/CMakeLists.txt")
  29. foreach(dir ${all_valid_subdirs})
  30. if(${dir} MATCHES "^([^/]*)/+CMakeLists.txt")
  31. string(REGEX REPLACE "^([^/]*)/+CMakeLists.txt" "\\1" dir_trimmed ${dir})
  32. message(STATUS "add module ${dir_trimmed}")
  33. add_subdirectory(${dir_trimmed})
  34. endif()
  35. endforeach(dir)
  36. endmacro(rvc_traverse_sub_cmake_dirs)
  37. macro(rvc_define_dependen_dirs)
  38. set(VENDOR_CURRENT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
  39. if(DEVADAPTER_USING_CONAN)
  40. STRING( REGEX REPLACE ".*/(.*)" "\\1" CURRENT_VENDOR_FOLDER ${CMAKE_CURRENT_SOURCE_DIR} )
  41. message(STATUS "vendor name : ${CURRENT_VENDOR_FOLDER}")
  42. string(TOUPPER ${CURRENT_VENDOR_FOLDER} CURRENT_VENDOR_FOLDER)
  43. if(${CURRENT_VENDOR_FOLDER}_CONAN_LIB_NAME)
  44. conan_cmake_run(REQUIRES ${${CURRENT_VENDOR_FOLDER}_CONAN_LIB_NAME}
  45. BASIC_SETUP CMAKE_TARGETS)
  46. set(VENDOR_CURRENT_SOURCE_DIR ${CONAN_${CURRENT_VENDOR_FOLDER}_ROOT})
  47. endif()
  48. endif(DEVADAPTER_USING_CONAN)
  49. # 放置有源码的适配器依赖库工程文件
  50. set(VENDOR_CURRENT_DEPS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/deps")
  51. set(VENDOR_CURRENT_INCLUDE_DIR "${VENDOR_CURRENT_SOURCE_DIR}/include")
  52. set(VENDOR_CURRENT_ASSET_DIR "${VENDOR_CURRENT_SOURCE_DIR}/assets")
  53. set(VENDOR_CURRENT_LIB_DIR "${VENDOR_CURRENT_SOURCE_DIR}/lib/${DIFF_PLATFORM_SUB_DIR}")
  54. set(VENDOR_CURRENT_BIN_DIR "${VENDOR_CURRENT_SOURCE_DIR}/bin/${DIFF_PLATFORM_SUB_DIR}")
  55. endmacro(rvc_define_dependen_dirs)
  56. macro(rvc_dev_define_module _module_name)
  57. set(MODULE_NAME "${_module_name}")
  58. string(TOUPPER "${MODULE_NAME}" MODULE_PREFIX)
  59. endmacro(rvc_dev_define_module)
  60. # 工程配置文件
  61. macro(rvc_dev_config_library _module_name _module_prefix)
  62. set(${_module_prefix}_CHARACTERISTIC "${${_module_prefix}_VENDOR}.${${_module_prefix}_VERSION}.${${_module_prefix}_BATCH}")
  63. set(MODULE_FULL_NAME "${_module_name}_${${_module_prefix}_VENDOR}_${${_module_prefix}_VERSION}_${${_module_prefix}_BATCH}")
  64. add_library(${MODULE_FULL_NAME} ${${_module_prefix}_SRCS})
  65. set_target_properties(${MODULE_FULL_NAME} PROPERTIES COMPILE_DEFINITIONS "DEVICEBASE_EXPORTS")
  66. set_target_properties(${MODULE_FULL_NAME} PROPERTIES
  67. OUTPUT_NAME "${_module_name}.${${_module_prefix}_CHARACTERISTIC}")
  68. target_include_directories(${MODULE_FULL_NAME} PRIVATE ${DEVADAPTER_CURRENT_INCLUDES_DIR} ${VENDOR_CURRENT_INCLUDE_DIR})
  69. target_link_directories(${MODULE_FULL_NAME} PRIVATE ${DEVADAPTER_CURRENT_LIB_DIR} ${VENDOR_CURRENT_LIB_DIR})
  70. if(SIMULATE_ON)
  71. set_target_properties(${MODULE_FULL_NAME} PROPERTIES
  72. LIBRARY_OUTPUT_DIRECTORY_DEBUG "${RVC_INSTALL_PREFIX}${RVC_VENDOR_PATH}"
  73. LIBRARY_OUTPUT_DIRECTORY_RELEASE "${RVC_INSTALL_PREFIX}${RVC_VENDOR_PATH}"
  74. )
  75. endif(SIMULATE_ON)
  76. endmacro(rvc_dev_config_library)
  77. # 该宏仅在招行的编译生成环境下才会应用
  78. macro(rvc_dev_target_install _target)
  79. if(RVC_INTEGRATE_BUILD)
  80. if(MSVC)
  81. install(TARGETS ${_target}
  82. RUNTIME DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters
  83. ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}" COMPONENT develops EXCLUDE_FROM_ALL
  84. LIBRARY DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters
  85. )
  86. else()
  87. install(TARGETS ${_target}
  88. RUNTIME DESTINATION "${RVC_VENDOR_PATH}"
  89. ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}"
  90. LIBRARY DESTINATION "${RVC_VENDOR_PATH}"
  91. COMPONENT libraries)
  92. endif(MSVC)
  93. endif(RVC_INTEGRATE_BUILD)
  94. endmacro(rvc_dev_target_install)
  95. # 用于收录 lib 下的 .so 库 或者 bin 下的 .dll 库 以及 资源文件
  96. macro(rvc_aggereate_runtime_file)
  97. if(RVC_INTEGRATE_BUILD)
  98. set(RVC_VENDOR_DEP_LIB_DIRS ${RVC_VENDOR_DEP_LIB_DIRS}
  99. ${VENDOR_CURRENT_BIN_DIR} ${VENDOR_CURRENT_ASSET_DIR} PARENT_SCOPE)
  100. if(NOT MSVC)
  101. set(RVC_VENDOR_DEP_LIB_DIRS ${RVC_VENDOR_DEP_LIB_DIRS} ${VENDOR_CURRENT_LIB_DIR} PARENT_SCOPE)
  102. endif(NOT MSVC)
  103. endif(RVC_INTEGRATE_BUILD)
  104. endmacro(rvc_aggereate_runtime_file)
  105. set(DEVADAPTER_CURRENT_INCLUDES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
  106. set(DEVADAPTER_CURRENT_ASSET_DIR "${CMAKE_CURRENT_SOURCE_DIR}/assets")
  107. set(DEVADAPTER_CURRENT_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib/${DIFF_PLATFORM_SUB_DIR}")
  108. set(DEVADAPTER_CURRENT_BIN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/bin/${DIFF_PLATFORM_SUB_DIR}")
  109. # 用于收录每一个厂商目录下 bin/*.dll 和 lib/*.so 文件,先收集当前目录下统一的库文件以及资源文件
  110. set(RVC_VENDOR_DEP_LIB_DIRS ${DEVADAPTER_CURRENT_BIN_DIR} ${DEVADAPTER_CURRENT_ASSET_DIR})
  111. if(NOT MSVC)
  112. set(RVC_VENDOR_DEP_LIB_DIRS ${RVC_VENDOR_DEP_LIB_DIRS} ${DEVADAPTER_CURRENT_LIB_DIR})
  113. endif(NOT MSVC)
  114. set(VENDOR_LOG_LIBRARY_NAME "cmblog4vendor")
  115. if(NOT RVC_INTEGRATE_BUILD)
  116. set(VENDOR_LOG_LIB_NAME ${VENDOR_LOG_LIBRARY_NAME})
  117. else()
  118. set(VENDOR_LOG_LIB_NAME log4vendor)
  119. add_subdirectory(self)
  120. endif(NOT RVC_INTEGRATE_BUILD)
  121. message(STATUS "vendor log library: ${VENDOR_LOG_LIB_NAME}")
  122. # 通过conan的方式管理厂商库
  123. if(DEVADAPTER_USING_CONAN)
  124. set(KEBA_CONAN_LIB_NAME keba/2022.0425.01@LR04.02_VendorLib/testing)
  125. set(NANTIAN_CONAN_LIB_NAME nantian/2022.0224.01@LR04.02_VendorLib/testing)
  126. set(GRG_CONAN_LIB_NAME grg/2022.0310.01@LR04.02_VendorLib/testing)
  127. set(CW_CONAN_LIB_NAME cw/2021.0927.01@LR04.02_VendorLib/testing)
  128. endif(DEVADAPTER_USING_CONAN)
  129. file(GLOB all_valid_subdirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/CMakeLists.txt")
  130. foreach(dir ${all_valid_subdirs})
  131. if(${dir} MATCHES "^([^/]*)/+CMakeLists.txt")
  132. string(REGEX REPLACE "^([^/]*)/+CMakeLists.txt" "\\1" dir_trimmed ${dir})
  133. string(COMPARE EQUAL ${dir_trimmed} "self" result)
  134. if(NOT RVC_INTEGRATE_BUILD OR NOT result)
  135. message(STATUS "Adding vendor component ${dir_trimmed}")
  136. add_subdirectory(${dir_trimmed})
  137. endif(NOT RVC_INTEGRATE_BUILD OR NOT result)
  138. endif()
  139. endforeach(dir)
  140. if(RVC_INTEGRATE_BUILD)
  141. list(REMOVE_DUPLICATES RVC_VENDOR_DEP_LIB_DIRS)
  142. foreach(dep_dir ${RVC_VENDOR_DEP_LIB_DIRS})
  143. message(STATUS "dep_dir: ${dep_dir}")
  144. file(GLOB RVC_DEP_BIN_FILES "${dep_dir}/*")
  145. list(REMOVE_DUPLICATES RVC_DEP_BIN_FILES)
  146. message(STATUS "before file: ${RVC_DEP_BIN_FILES}")
  147. list(FILTER RVC_DEP_BIN_FILES EXCLUDE REGEX ".*\\.a$")
  148. message(STATUS "after file: ${RVC_DEP_BIN_FILES}")
  149. foreach(bin_file ${RVC_DEP_BIN_FILES})
  150. if(IS_DIRECTORY ${bin_file})
  151. string(REGEX MATCH ".*/grg$" GRG_LIB_DIR_NAME "${bin_file}")
  152. string(LENGTH "${GRG_LIB_DIR_NAME}" GRG_LIB_DIR_NAME_length)
  153. if(NOT ${GRG_LIB_DIR_NAME_length})
  154. install(DIRECTORY "${bin_file}" DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters)
  155. else()
  156. message(STATUS "skip install dir: ${bin_file}")
  157. endif(NOT ${GRG_LIB_DIR_NAME_length})
  158. else()
  159. install(PROGRAMS ${bin_file} DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters)
  160. endif()
  161. endforeach()
  162. endforeach()
  163. endif(RVC_INTEGRATE_BUILD)