CMakeLists.txt 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386
  1. # 非招行开发人员不允许改动本文件!!
  2. if(RVC_VERSION)
  3. set(RVC_INTEGRATE_BUILD TRUE)
  4. set(RVC_INTEGRATE_BUILDV2 TRUE)
  5. set(DEVADAPTER_USING_CONAN TRUE)
  6. if(WITH_LOCAL_DEVLIB)
  7. set(DEVADAPTER_USING_CONAN FALSE)
  8. endif(WITH_LOCAL_DEVLIB)
  9. else()
  10. cmake_minimum_required (VERSION 3.8)
  11. project(DevAdapter)
  12. set(DEVADAPTER_VENDOR "demo")
  13. set(DEVADAPTER_VERSION "1.2.3.4")
  14. set(DEVADAPTER_PROJECT_NAME ${CMAKE_PROJECT_NAME})
  15. set(DEVADAPTER_DESCRIPTION "describe what this version conatains")
  16. set(RVC_INTEGRATE_BUILD FALSE)
  17. set(DEVADAPTER_USING_CONAN FALSE)
  18. set(RVC_VENDOR_CONFIGV2 TRUE)
  19. if(RVC_VENDOR_CONFIGV2)
  20. set(JENKINS_ON FALSE)
  21. if(DEFINED ENV{JENKINS_HOME})
  22. set(JENKINS_ON TRUE)
  23. endif(DEFINED ENV{JENKINS_HOME})
  24. if(JENKINS_ON)
  25. set(DEVADAPTER_VENDOR $ENV{JOB_BASE_NAME})
  26. set(DEVADAPTER_PROJECT_NAME $ENV{BUILD_TAG_ID})
  27. string(TIMESTAMP tmVar "%Y%m%d")
  28. set(DEVADAPTER_VERSION "${tmVar}_$ENV{BUILD_NUMBER}")
  29. endif(JENKINS_ON)
  30. set(CMAKE_CXX_STANDARD 11)
  31. # Turn on solution folders (2.8.4+) for Visual Studio.
  32. set_property(GLOBAL PROPERTY USE_FOLDERS ON)
  33. if(NOT DEFINED CMAKE_CONFIGURATION_TYPES AND NOT DEFINED CMAKE_BUILD_TYPE)
  34. message(FATAL_ERROR "User should define CMAKE_CONFIGURATION_TYPES or CMAKE_BUILD_TYPE")
  35. elseif(DEFINED CMAKE_CONFIGURATION_TYPES AND NOT DEFINED CMAKE_BUILD_TYPE)
  36. set(CMAKE_BUILD_TYPE ${CMAKE_CONFIGURATION_TYPES})
  37. elseif(DEFINED CMAKE_BUILD_TYPE AND NOT DEFINED CMAKE_CONFIGURATION_TYPES)
  38. set(CMAKE_CONFIGURATION_TYPES ${CMAKE_BUILD_TYPE})
  39. endif()
  40. # Enable 64bit file support on linux and FreeBSD.
  41. if("${CMAKE_SYSTEM_NAME}" MATCHES "Linux" OR FREEBSD)
  42. add_definitions("-D_FILE_OFFSET_BITS=64")
  43. endif()
  44. if(CMAKE_COMPILER_IS_GNUCC)
  45. if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "i686")
  46. CHECK_SYMBOL_EXISTS(__x86_64__ "" IS_X86_64)
  47. if(IS_X86_64)
  48. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
  49. message(STATUS "set -fPIC")
  50. else()
  51. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=i686")
  52. message(STATUS "set -march=i686")
  53. endif()
  54. else()
  55. if(CMAKE_POSITION_INDEPENDENT_CODE)
  56. if(${CMAKE_VERSION} VERSION_LESS 2.8.9)
  57. message(STATUS "set -fPIC 2")
  58. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
  59. endif()
  60. endif()
  61. endif()
  62. # active warning or gun c compiler would not burn warning if not necessary.
  63. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
  64. endif()
  65. set(PACK_INSTALL_RUN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/release")
  66. set(RVC_VENDOR_PATH "dep")
  67. set(CMAKE_INSTALL_PREFIX ${PACK_INSTALL_RUN_DIR})
  68. #clean the built dir which create from last compiling job.
  69. file(GLOB RVC_OLD_DEP_BIN_FILES "${PACK_INSTALL_RUN_DIR}/*")
  70. string(LENGTH "${RVC_OLD_DEP_BIN_FILES}" RVC_OLD_DEP_BIN_FILES_length)
  71. if(${RVC_OLD_DEP_BIN_FILES_length})
  72. file(REMOVE_RECURSE ${RVC_OLD_DEP_BIN_FILES})
  73. endif(${RVC_OLD_DEP_BIN_FILES_length})
  74. endif(RVC_VENDOR_CONFIGV2)
  75. endif(RVC_VERSION)
  76. if(MSVC AND (CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i686|x86|AMD64") )
  77. set(DIFF_PLATFORM_SUB_DIR "msvc_x86")
  78. elseif((NOT MSVC) AND (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64"))
  79. set(DIFF_PLATFORM_SUB_DIR "gcc_aarch64")
  80. elseif((NOT MSVC) AND (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64"))
  81. set(DIFF_PLATFORM_SUB_DIR "gcc_x64")
  82. endif()
  83. message(STATUS "lib rely on directory: ${DIFF_PLATFORM_SUB_DIR}")
  84. if(RVC_INTEGRATE_BUILD)
  85. #include ErrorCode.h
  86. include_directories(${RVC_COMMON_INCLUDE_DIR})
  87. endif(RVC_INTEGRATE_BUILD)
  88. macro(rvc_traverse_sub_cmake_dirs)
  89. file(GLOB all_valid_subdirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/CMakeLists.txt")
  90. foreach(dir ${all_valid_subdirs})
  91. if(${dir} MATCHES "^([^/]*)/+CMakeLists.txt")
  92. string(REGEX REPLACE "^([^/]*)/+CMakeLists.txt" "\\1" dir_trimmed ${dir})
  93. message(STATUS "add module ${dir_trimmed}")
  94. add_subdirectory(${dir_trimmed})
  95. endif()
  96. endforeach(dir)
  97. endmacro(rvc_traverse_sub_cmake_dirs)
  98. macro(rvc_define_dependen_dirs)
  99. set(VENDOR_CURRENT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
  100. # include vendor static libraries and comm header files in conan way.
  101. if(DEVADAPTER_USING_CONAN)
  102. STRING( REGEX REPLACE ".*/(.*)" "\\1" CURRENT_VENDOR_FOLDER ${CMAKE_CURRENT_SOURCE_DIR} )
  103. message(STATUS "vendor name : ${CURRENT_VENDOR_FOLDER}")
  104. string(TOUPPER ${CURRENT_VENDOR_FOLDER} CURRENT_VENDOR_FOLDER)
  105. #if defined conan dependency package for specified vendor
  106. if(${CURRENT_VENDOR_FOLDER}_CONAN_LIB_NAME)
  107. conan_cmake_run(REQUIRES ${${CURRENT_VENDOR_FOLDER}_CONAN_LIB_NAME}
  108. BASIC_SETUP CMAKE_TARGETS)
  109. # 如果使用Conan,则替换为Conan的路径引用
  110. set(VENDOR_CURRENT_SOURCE_DIR ${CONAN_${CURRENT_VENDOR_FOLDER}_ROOT})
  111. endif()
  112. endif(DEVADAPTER_USING_CONAN)
  113. # 放置有源码的适配器依赖库工程文件
  114. set(VENDOR_CURRENT_DEPS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/deps")
  115. set(VENDOR_CURRENT_INCLUDE_DIR "${VENDOR_CURRENT_SOURCE_DIR}/include")
  116. set(VENDOR_CURRENT_ASSET_DIR "${VENDOR_CURRENT_SOURCE_DIR}/assets")
  117. set(VENDOR_CURRENT_LIB_DIR "${VENDOR_CURRENT_SOURCE_DIR}/lib/${DIFF_PLATFORM_SUB_DIR}")
  118. set(VENDOR_CURRENT_BIN_DIR "${VENDOR_CURRENT_SOURCE_DIR}/bin/${DIFF_PLATFORM_SUB_DIR}")
  119. endmacro(rvc_define_dependen_dirs)
  120. macro(rvc_aggerate_vendor_libs _vendor_name)
  121. # include vendor all devadapter libraries in conan way.
  122. if(DEVADAPTER_USING_CONAN)
  123. message(STATUS "vendor name v2 : ${_vendor_name}")
  124. string(TOUPPER ${_vendor_name} CURRENT_VENDOR)
  125. #if defined conan dependency package for specified vendor
  126. if(${CURRENT_VENDOR}_CONAN_ALL_LIB_NAME)
  127. conan_cmake_run(REQUIRES ${${CURRENT_VENDOR}_CONAN_ALL_LIB_NAME}
  128. BASIC_SETUP CMAKE_TARGETS)
  129. set(VENDOR_CURRENT_ALL_LIB_ROOT_DIR ${CONAN_${CURRENT_VENDOR}_ROOT})
  130. set(VENDOR_ALL_DEPS_DIR "${VENDOR_CURRENT_ALL_LIB_ROOT_DIR}/dep")
  131. set(RVC_VENDOR_DEP_LIB_DIRS ${RVC_VENDOR_DEP_LIB_DIRS} ${VENDOR_ALL_DEPS_DIR})
  132. endif()
  133. endif(DEVADAPTER_USING_CONAN)
  134. endmacro(rvc_aggerate_vendor_libs)
  135. macro(rvc_dev_define_module _module_name)
  136. set(MODULE_NAME "${_module_name}")
  137. string(TOUPPER "${MODULE_NAME}" MODULE_PREFIX)
  138. endmacro(rvc_dev_define_module)
  139. # 工程配置文件
  140. macro(rvc_dev_config_library _module_name _module_prefix)
  141. set(${_module_prefix}_CHARACTERISTIC "${${_module_prefix}_VENDOR}.${${_module_prefix}_VERSION}.${${_module_prefix}_BATCH}")
  142. set(MODULE_FULL_NAME "${_module_name}_${${_module_prefix}_VENDOR}_${${_module_prefix}_VERSION}_${${_module_prefix}_BATCH}")
  143. if (MSVC)
  144. set (RC_VERSION_MAJOR ${${_module_prefix}_VERSION})
  145. set (RC_VERSION_MINOR ${${_module_prefix}_BATCH})
  146. set (RC_VERSION_BUILD ${MSVC_TOOLSET_VERSION})
  147. set (RC_VERSION_PATCH ${MSVC_VERSION})
  148. configure_file(
  149. ${CMAKE_SOURCE_DIR}/version.rc.in
  150. ${CMAKE_CURRENT_BINARY_DIR}/version.rc
  151. @ONLY)
  152. set ( ${_module_prefix}_SRCS ${${_module_prefix}_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
  153. endif(MSVC)
  154. add_library(${MODULE_FULL_NAME} ${${_module_prefix}_SRCS})
  155. set_target_properties(${MODULE_FULL_NAME} PROPERTIES COMPILE_DEFINITIONS "DEVICEBASE_EXPORTS")
  156. set_target_properties(${MODULE_FULL_NAME} PROPERTIES
  157. OUTPUT_NAME "${_module_name}.${${_module_prefix}_CHARACTERISTIC}")
  158. target_include_directories(${MODULE_FULL_NAME} PRIVATE ${DEVADAPTER_CURRENT_INCLUDES_DIR} ${VENDOR_CURRENT_INCLUDE_DIR})
  159. target_link_directories(${MODULE_FULL_NAME} PRIVATE ${DEVADAPTER_CURRENT_LIB_DIR} ${VENDOR_CURRENT_LIB_DIR})
  160. if(MSVC)
  161. set_property(TARGET ${MODULE_FULL_NAME} PROPERTY FOLDER "devadapter/${CURRENT_VENDOR}/")
  162. endif(MSVC)
  163. endmacro(rvc_dev_config_library)
  164. # 该宏仅在招行的编译生成环境下才会应用
  165. macro(rvc_dev_target_install _target)
  166. if(RVC_INTEGRATE_BUILD)
  167. if(MSVC)
  168. install(TARGETS ${_target}
  169. RUNTIME DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters
  170. ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}" COMPONENT develops EXCLUDE_FROM_ALL
  171. LIBRARY DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters
  172. )
  173. else()
  174. install(TARGETS ${_target}
  175. RUNTIME DESTINATION "${RVC_VENDOR_PATH}"
  176. ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}"
  177. LIBRARY DESTINATION "${RVC_VENDOR_PATH}"
  178. COMPONENT libraries)
  179. endif(MSVC)
  180. elseif(RVC_VENDOR_CONFIGV2)
  181. install(TARGETS ${_target}
  182. RUNTIME DESTINATION "${RVC_VENDOR_PATH}"
  183. ARCHIVE DESTINATION "${RVC_VENDOR_PATH}"
  184. LIBRARY DESTINATION "${RVC_VENDOR_PATH}")
  185. endif(RVC_INTEGRATE_BUILD)
  186. endmacro(rvc_dev_target_install)
  187. # 用于收录厂商文件夹目录下 lib 下的 .so 库 或者 bin 下的 .dll 库 以及 资源文件
  188. macro(rvc_aggereate_runtime_file)
  189. if(RVC_INTEGRATE_BUILD)
  190. set(RVC_VENDOR_DEP_LIB_DIRS ${RVC_VENDOR_DEP_LIB_DIRS} ${RVC_VENDOR_LIB_DIRS}
  191. ${VENDOR_CURRENT_BIN_DIR} ${VENDOR_CURRENT_ASSET_DIR} PARENT_SCOPE)
  192. if(NOT MSVC)
  193. set(RVC_VENDOR_DEP_LIB_DIRS ${RVC_VENDOR_DEP_LIB_DIRS} ${VENDOR_CURRENT_LIB_DIR} PARENT_SCOPE)
  194. endif(NOT MSVC)
  195. elseif(RVC_VENDOR_CONFIGV2)
  196. set(RVC_VENDOR_DEP_LIB_DIRS ${RVC_VENDOR_DEP_LIB_DIRS} ${RVC_VENDOR_LIB_DIRS}
  197. ${VENDOR_CURRENT_BIN_DIR} ${VENDOR_CURRENT_ASSET_DIR} PARENT_SCOPE)
  198. if(NOT MSVC)
  199. set(RVC_VENDOR_DEP_LIB_DIRS ${RVC_VENDOR_DEP_LIB_DIRS} ${VENDOR_CURRENT_LIB_DIR} PARENT_SCOPE)
  200. endif(NOT MSVC)
  201. endif(RVC_INTEGRATE_BUILD)
  202. endmacro(rvc_aggereate_runtime_file)
  203. set(DEVADAPTER_CURRENT_INCLUDES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
  204. set(DEVADAPTER_CURRENT_ASSET_DIR "${CMAKE_CURRENT_SOURCE_DIR}/assets")
  205. set(DEVADAPTER_CURRENT_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib/${DIFF_PLATFORM_SUB_DIR}")
  206. set(DEVADAPTER_CURRENT_BIN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/bin/${DIFF_PLATFORM_SUB_DIR}")
  207. # 用于收录每一个厂商目录下 bin/*.dll 和 lib/*.so 文件,先收集当前目录下统一的库文件以及资源文件
  208. set(RVC_VENDOR_DEP_LIB_DIRS ${DEVADAPTER_CURRENT_BIN_DIR} ${DEVADAPTER_CURRENT_ASSET_DIR})
  209. if(NOT MSVC)
  210. set(RVC_VENDOR_DEP_LIB_DIRS ${RVC_VENDOR_DEP_LIB_DIRS} ${DEVADAPTER_CURRENT_LIB_DIR})
  211. endif(NOT MSVC)
  212. set(VENDOR_LOG_LIBRARY_NAME "cmblog4vendor")
  213. if(NOT RVC_INTEGRATE_BUILD)
  214. # 单独的库名称
  215. set(VENDOR_LOG_LIB_NAME ${VENDOR_LOG_LIBRARY_NAME})
  216. else()
  217. # 使用工程源码编译
  218. set(VENDOR_LOG_LIB_NAME log4vendor)
  219. endif(NOT RVC_INTEGRATE_BUILD)
  220. message(STATUS "vendor log library: ${VENDOR_LOG_LIB_NAME}")
  221. # 通过conan的方式管理厂商库
  222. if(DEVADAPTER_USING_CONAN)
  223. if(MSVC) #Windows 厂商适配器
  224. if(RVC_INTEGRATE_BUILDV2)
  225. #厂商适配器兼容WIN的提交,需要将以前的ZIP链接转化为Conan依赖包,处理完之后这里填写内容进行拉取:Demo
  226. #set(CMB_CONAN_ALL_LIB_NAME cmb/2024.0315.20@LR04.02_VendorLib/msvc)
  227. set(GWI_CONAN_ALL_LIB_NAME gwi/2024.0312.04@LR04.02_VendorLib/msvc)
  228. set(KEBA_CONAN_ALL_LIB_NAME keba/2024.0326.23@LR04.02_VendorLib/msvc)
  229. set(SZZT_CONAN_ALL_LIB_NAME szzt/2024.0430.33@LR04.02_VendorLib/msvc)
  230. #rvc_aggerate_vendor_libs(cmb)
  231. rvc_aggerate_vendor_libs(szzt)
  232. rvc_aggerate_vendor_libs(gwi)
  233. rvc_aggerate_vendor_libs(keba)
  234. endif(RVC_INTEGRATE_BUILDV2)
  235. else() #UOS厂商适配器
  236. if(RVC_INTEGRATE_BUILDV2)
  237. set(KEBA_CONAN_ALL_LIB_NAME keba/2024.0119.25@LR04.02_VendorLib/stable)
  238. set(CW_CONAN_ALL_LIB_NAME cw/2024.0325.25@LR04.02_VendorLib/stable)
  239. set(SZZT_CONAN_ALL_LIB_NAME szzt/2024.0508.25@LR04.02_VendorLib/stable)
  240. set(GWI_CONAN_ALL_LIB_NAME gwi/2024.0407.15@LR04.02_VendorLib/stable)
  241. set(NANTIAN_CONAN_ALL_LIB_NAME nantian/2023.1206.1@LR04.02_VendorLib/stable)
  242. set(GRG_CONAN_ALL_LIB_NAME grg/2023.1213.24@LR04.02_VendorLib/stable)
  243. rvc_aggerate_vendor_libs(keba)
  244. rvc_aggerate_vendor_libs(cw)
  245. rvc_aggerate_vendor_libs(szzt)
  246. rvc_aggerate_vendor_libs(gwi)
  247. rvc_aggerate_vendor_libs(nantian)
  248. rvc_aggerate_vendor_libs(grg)
  249. endif(RVC_INTEGRATE_BUILDV2)
  250. endif(MSVC)
  251. if(MSVC)
  252. #合入目前全量包中的DEP文件内容
  253. conan_cmake_run(REQUIRES VendorDLL/7.3.0@LR04.02_VendorLib/msvc
  254. BASIC_SETUP CMAKE_TARGETS)
  255. set(SELF_CONAN_LIB_NAME self/2024.0607.01@LR04.02_VendorLib/testing)
  256. add_subdirectory(self)
  257. endif(MSVC)
  258. endif(DEVADAPTER_USING_CONAN)
  259. file(GLOB all_valid_subdirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/CMakeLists.txt")
  260. foreach(dir ${all_valid_subdirs})
  261. if(${dir} MATCHES "^([^/]*)/+CMakeLists.txt")
  262. string(REGEX REPLACE "^([^/]*)/+CMakeLists.txt" "\\1" dir_trimmed ${dir})
  263. # remove 'self' sub directory bcz it would be added seperately
  264. if(DEVOPS_ON)
  265. #硬件模拟器在生产流水线不参与编译
  266. if(DEVOPS_ON_CMAKE_PRD)
  267. string(FIND "self|cmbsz|simulator" ${dir_trimmed} found)
  268. else()
  269. string(FIND "self|cmbsz" ${dir_trimmed} found)
  270. endif(DEVOPS_ON_CMAKE_PRD)
  271. else()
  272. string(FIND "self" ${dir_trimmed} found)
  273. endif(DEVOPS_ON)
  274. message(STATUS "found: ${found}")
  275. if((NOT RVC_INTEGRATE_BUILD) OR (${found} EQUAL -1))
  276. message(STATUS "Adding vendor component ${dir_trimmed}")
  277. add_subdirectory(${dir_trimmed})
  278. endif((NOT RVC_INTEGRATE_BUILD) OR (${found} EQUAL -1))
  279. endif()
  280. endforeach(dir)
  281. if(RVC_INTEGRATE_BUILD)
  282. #安装VS2010下的厂商文件,先安装,防止旧的覆盖新的内容
  283. if(CONAN_RES_DIRS_VENDORDLL)
  284. file(GLOB RVC_DEP_BIN_FILES "${CONAN_RES_DIRS_VENDORDLL}/*")
  285. install(FILES ${RVC_DEP_BIN_FILES} DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters)
  286. endif(CONAN_RES_DIRS_VENDORDLL)
  287. list(REMOVE_DUPLICATES RVC_VENDOR_DEP_LIB_DIRS)
  288. message(STATUS "dep_dirs:${RVC_VENDOR_DEP_LIB_DIRS}")
  289. foreach(dep_dir ${RVC_VENDOR_DEP_LIB_DIRS})
  290. message(STATUS "dep_dir: ${dep_dir}")
  291. file(GLOB RVC_DEP_BIN_FILES "${dep_dir}/*")
  292. list(REMOVE_DUPLICATES RVC_DEP_BIN_FILES)
  293. message(STATUS "before file: ${RVC_DEP_BIN_FILES}")
  294. list(FILTER RVC_DEP_BIN_FILES EXCLUDE REGEX ".*\\.a$")
  295. message(STATUS "after file: ${RVC_DEP_BIN_FILES}")
  296. foreach(bin_file ${RVC_DEP_BIN_FILES})
  297. if(IS_DIRECTORY ${bin_file})
  298. string(REGEX MATCH ".*/grg$" GRG_LIB_DIR_NAME "${bin_file}")
  299. string(LENGTH "${GRG_LIB_DIR_NAME}" GRG_LIB_DIR_NAME_length)
  300. if(NOT ${GRG_LIB_DIR_NAME_length})
  301. install(DIRECTORY "${bin_file}" DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters)
  302. else()
  303. message(STATUS "skip install dir: ${bin_file}")
  304. endif(NOT ${GRG_LIB_DIR_NAME_length})
  305. else()
  306. install(PROGRAMS ${bin_file} DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters)
  307. endif()
  308. endforeach()
  309. endforeach()
  310. elseif(RVC_VENDOR_CONFIGV2)
  311. # 此列表中的文件已在终端应用中包含,所以要移除,TODO: Windows 需要兼容
  312. set(USELESS_DEVADAPTER_FILE_NAMES
  313. liblog4cplus.so
  314. libcmblog4vendor.so
  315. )
  316. list(REMOVE_DUPLICATES RVC_VENDOR_DEP_LIB_DIRS)
  317. foreach(dep_dir ${RVC_VENDOR_DEP_LIB_DIRS})
  318. message(STATUS "dep_dir: ${dep_dir}")
  319. file(GLOB RVC_DEP_BIN_FILES "${dep_dir}/*")
  320. list(REMOVE_DUPLICATES RVC_DEP_BIN_FILES)
  321. message(STATUS "before file: ${RVC_DEP_BIN_FILES}")
  322. foreach(filter_elem ${USELESS_DEVADAPTER_FILE_NAMES})
  323. set(filter_args ".*\\${filter_elem}$")
  324. list(FILTER RVC_DEP_BIN_FILES EXCLUDE REGEX ${filter_args})
  325. endforeach()
  326. list(FILTER RVC_DEP_BIN_FILES EXCLUDE REGEX ".*\\.a$")
  327. message(STATUS "after file: ${RVC_DEP_BIN_FILES}")
  328. foreach(bin_file ${RVC_DEP_BIN_FILES})
  329. if(IS_DIRECTORY ${bin_file})
  330. install(DIRECTORY "${bin_file}" DESTINATION "${RVC_VENDOR_PATH}")
  331. else()
  332. install(PROGRAMS ${bin_file} DESTINATION "${RVC_VENDOR_PATH}")
  333. endif()
  334. endforeach()
  335. endforeach()
  336. endif(RVC_INTEGRATE_BUILD)
  337. if((NOT RVC_INTEGRATE_BUILD) AND RVC_VENDOR_CONFIGV2)
  338. if(NOT CPACK_GENERATOR)
  339. set(CPACK_GENERATOR "ZIP")
  340. message(STATUS "set zip package file type for matching head bank publish")
  341. endif()
  342. set(CPACK_PACKAGE_FILE_NAME "${DEVADAPTER_VENDOR}_${DEVADAPTER_PROJECT_NAME}_${DEVADAPTER_VERSION}")
  343. set(CPACK_PACKAGE_NAME "${DEVADAPTER_VENDOR}-${DEVADAPTER_PROJECT_NAME}")
  344. set(CPACK_PACKAGE_VENDOR "${DEVADAPTER_VENDOR}")
  345. set(CPACK_PACKAGE_VERSION ${DEVADAPTER_VERSION})
  346. set(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE TRUE)
  347. include(CPack)
  348. endif((NOT RVC_INTEGRATE_BUILD) AND RVC_VENDOR_CONFIGV2)