CMakeLists.txt 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. # 非招行开发人员不允许改动本文件!!
  2. if(RVC_VERSION)
  3. set(RVC_INTEGRATE_BUILD TRUE)
  4. else()
  5. project(DevAdapter)
  6. cmake_minimum_required (VERSION 3.8)
  7. endif(RVC_VERSION)
  8. if(MSVC AND (CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i686|x86|AMD64") )
  9. set(DIFF_PLATFORM_SUB_DIR "msvc_x86")
  10. elseif((NOT MSVC) AND (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64"))
  11. set(DIFF_PLATFORM_SUB_DIR "gcc_aarch64")
  12. elseif((NOT MSVC) AND (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64"))
  13. set(DIFF_PLATFORM_SUB_DIR "gcc_x64")
  14. endif()
  15. message(STATUS "lib rely on directory: ${DIFF_PLATFORM_SUB_DIR}")
  16. if(RVC_INTEGRATE_BUILD)
  17. include_directories(${RVC_COMMON_INCLUDE_DIR})
  18. if(SIMULATE_ON)
  19. rvc_set_library_output_dir("${RVC_INSTALL_PREFIX}${RVC_VENDOR_PATH}")
  20. endif(SIMULATE_ON)
  21. endif(RVC_INTEGRATE_BUILD)
  22. macro(rvc_dev_define_module _module_name)
  23. set(MODULE_NAME "${_module_name}")
  24. string(TOUPPER "${MODULE_NAME}" MODULE_PREFIX)
  25. endmacro(rvc_dev_define_module)
  26. # 工程配置文件
  27. macro(rvc_dev_config_library _module_name _module_prefix)
  28. set(${_module_prefix}_CHARACTERISTIC "${${_module_prefix}_VENDOR}.${${_module_prefix}_VERSION}.${${_module_prefix}_BATCH}")
  29. set(MODULE_FULL_NAME "${_module_name}_${${_module_prefix}_VENDOR}_${${_module_prefix}_VERSION}_${${_module_prefix}_BATCH}")
  30. add_library(${MODULE_FULL_NAME} ${${_module_prefix}_SRCS})
  31. set_target_properties(${MODULE_FULL_NAME} PROPERTIES COMPILE_DEFINITIONS "DEVICEBASE_EXPORTS")
  32. set_target_properties(${MODULE_FULL_NAME} PROPERTIES
  33. OUTPUT_NAME "${_module_name}.${${_module_prefix}_CHARACTERISTIC}")
  34. target_include_directories(${MODULE_FULL_NAME} PRIVATE ${DEVADAPTER_CURRENT_INCLUDES_DIR})
  35. target_link_directories(${MODULE_FULL_NAME} PRIVATE ${DEVADAPTER_CURRENT_LIB_DIR})
  36. if(SIMULATE_ON)
  37. set_target_properties(${MODULE_FULL_NAME} PROPERTIES
  38. LIBRARY_OUTPUT_DIRECTORY_DEBUG "${RVC_INSTALL_PREFIX}${RVC_VENDOR_PATH}"
  39. LIBRARY_OUTPUT_DIRECTORY_RELEASE "${RVC_INSTALL_PREFIX}${RVC_VENDOR_PATH}"
  40. )
  41. endif(SIMULATE_ON)
  42. endmacro(rvc_dev_config_library)
  43. # 该宏仅在招行的编译生成环境下才会应用
  44. macro(rvc_dev_target_install _target)
  45. if(RVC_INTEGRATE_BUILD)
  46. if(MSVC)
  47. install(TARGETS ${_target}
  48. RUNTIME DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters
  49. ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}" COMPONENT develops EXCLUDE_FROM_ALL
  50. LIBRARY DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters
  51. )
  52. else()
  53. install(TARGETS ${_target}
  54. RUNTIME DESTINATION "${RVC_VENDOR_PATH}"
  55. ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}"
  56. LIBRARY DESTINATION "${RVC_VENDOR_PATH}"
  57. COMPONENT libraries)
  58. endif(MSVC)
  59. endif(RVC_INTEGRATE_BUILD)
  60. endmacro(rvc_dev_target_install)
  61. macro(rvc_aggereate_runtime_file)
  62. if(RVC_INTEGRATE_BUILD)
  63. set(TEMP_CURRENT_ASSET_DIR "${CMAKE_CURRENT_SOURCE_DIR}/assets")
  64. set(TEMP_CURRENT_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib/${DIFF_PLATFORM_SUB_DIR}")
  65. set(TEMP_CURRENT_BIN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/bin/${DIFF_PLATFORM_SUB_DIR}")
  66. # 添加如下内容用于收录 lib 下的 .so 库 或者 bin 下的 .dll 库 以及 资源文件
  67. set(RVC_VENDOR_DEP_LIB_DIRS ${RVC_VENDOR_DEP_LIB_DIRS}
  68. ${TEMP_CURRENT_BIN_DIR} ${TEMP_CURRENT_ASSET_DIR} PARENT_SCOPE)
  69. if(NOT MSVC)
  70. set(RVC_VENDOR_DEP_LIB_DIRS ${RVC_VENDOR_DEP_LIB_DIRS}
  71. ${TEMP_CURRENT_LIB_DIR} PARENT_SCOPE)
  72. endif(NOT MSVC)
  73. endif(RVC_INTEGRATE_BUILD)
  74. endmacro(rvc_aggereate_runtime_file)
  75. set(DEVADAPTER_CURRENT_INCLUDES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
  76. set(DEVADAPTER_CURRENT_ASSET_DIR "${CMAKE_CURRENT_SOURCE_DIR}/assets")
  77. set(DEVADAPTER_CURRENT_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib/${DIFF_PLATFORM_SUB_DIR}")
  78. set(DEVADAPTER_CURRENT_BIN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/bin/${DIFF_PLATFORM_SUB_DIR}")
  79. # 用于收录每一个厂商目录下 bin/*.dll 和 lib/*.so 文件,先收集当前目录下统一的库文件以及资源文件
  80. set(RVC_VENDOR_DEP_LIB_DIRS ${DEVADAPTER_CURRENT_BIN_DIR} ${DEVADAPTER_CURRENT_ASSET_DIR})
  81. if(NOT MSVC)
  82. set(RVC_VENDOR_DEP_LIB_DIRS ${RVC_VENDOR_DEP_LIB_DIRS} ${DEVADAPTER_CURRENT_LIB_DIR})
  83. endif(NOT MSVC)
  84. set(VENDOR_LOG_LIB_NAME log4vendor)
  85. if(NOT RVC_INTEGRATE_BUILD)
  86. set(VENDOR_LOG_LIB_NAME log4vendord)
  87. else()
  88. add_subdirectory(self)
  89. endif(NOT RVC_INTEGRATE_BUILD)
  90. message(STATUS "vendor log library: ${VENDOR_LOG_LIB_NAME}.")
  91. file(GLOB all_valid_subdirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/CMakeLists.txt")
  92. foreach(dir ${all_valid_subdirs})
  93. if(${dir} MATCHES "^([^/]*)/+CMakeLists.txt")
  94. string(REGEX REPLACE "^([^/]*)/+CMakeLists.txt" "\\1" dir_trimmed ${dir})
  95. string(COMPARE EQUAL ${dir_trimmed} "self" result)
  96. if(NOT RVC_INTEGRATE_BUILD OR NOT result)
  97. message(STATUS "Adding vendor component ${dir_trimmed}")
  98. add_subdirectory(${dir_trimmed})
  99. endif(NOT RVC_INTEGRATE_BUILD OR NOT result)
  100. endif()
  101. endforeach(dir)
  102. if(RVC_INTEGRATE_BUILD)
  103. list(REMOVE_DUPLICATES RVC_VENDOR_DEP_LIB_DIRS)
  104. foreach(dep_dir ${RVC_VENDOR_DEP_LIB_DIRS})
  105. message(STATUS "dep_dir: ${dep_dir}")
  106. file(GLOB RVC_DEP_BIN_FILES "${dep_dir}/*")
  107. list(REMOVE_DUPLICATES RVC_DEP_BIN_FILES)
  108. message(STATUS "before file: ${RVC_DEP_BIN_FILES}")
  109. list(FILTER RVC_DEP_BIN_FILES EXCLUDE REGEX ".*\.a$")
  110. message(STATUS "after file: ${RVC_DEP_BIN_FILES}")
  111. foreach(bin_file ${RVC_DEP_BIN_FILES})
  112. if(IS_DIRECTORY ${bin_file})
  113. install(DIRECTORY "${bin_file}" DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters)
  114. else()
  115. install(PROGRAMS ${bin_file} DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters)
  116. endif()
  117. endforeach()
  118. endforeach()
  119. endif(RVC_INTEGRATE_BUILD)