CMakeLists.txt 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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)
  9. set(DIFF_PLATFORM_SUB_DIR "msvc_x86")
  10. else()
  11. set(DIFF_PLATFORM_SUB_DIR "gcc_x64")
  12. endif(MSVC)
  13. if(RVC_INTEGRATE_BUILD)
  14. include_directories(${RVC_COMMON_INCLUDE_DIR})
  15. if(SIMULATE_ON)
  16. rvc_set_library_output_dir("${RVC_INSTALL_PREFIX}${RVC_VENDOR_PATH}")
  17. endif(SIMULATE_ON)
  18. endif(RVC_INTEGRATE_BUILD)
  19. macro(rvc_dev_define_module _module_name)
  20. set(MODULE_NAME "${_module_name}")
  21. string(TOUPPER "${MODULE_NAME}" MODULE_PREFIX)
  22. endmacro(rvc_dev_define_module)
  23. # 工程配置文件
  24. macro(rvc_dev_config_library _module_name _module_prefix)
  25. set(${_module_prefix}_CHARACTERISTIC "${${_module_prefix}_VENDOR}.${${_module_prefix}_VERSION}.${${_module_prefix}_BATCH}")
  26. set(MODULE_FULL_NAME "${_module_name}_${${_module_prefix}_VENDOR}_${${_module_prefix}_VERSION}_${${_module_prefix}_BATCH}")
  27. add_library(${MODULE_FULL_NAME} ${${_module_prefix}_SRCS})
  28. set_target_properties(${MODULE_FULL_NAME} PROPERTIES COMPILE_DEFINITIONS "DEVICEBASE_EXPORTS")
  29. set_target_properties(${MODULE_FULL_NAME} PROPERTIES
  30. OUTPUT_NAME "${_module_name}.${${_module_prefix}_CHARACTERISTIC}")
  31. target_include_directories(${MODULE_FULL_NAME} PRIVATE ${DEVADAPTER_CURRENT_INCLUDES_DIR})
  32. target_link_directories(${MODULE_FULL_NAME} PRIVATE ${DEVADAPTER_CURRENT_LIB_DIR})
  33. if(SIMULATE_ON)
  34. set_target_properties(${MODULE_FULL_NAME} PROPERTIES
  35. LIBRARY_OUTPUT_DIRECTORY_DEBUG "${RVC_INSTALL_PREFIX}${RVC_VENDOR_PATH}"
  36. LIBRARY_OUTPUT_DIRECTORY_RELEASE "${RVC_INSTALL_PREFIX}${RVC_VENDOR_PATH}"
  37. )
  38. endif(SIMULATE_ON)
  39. endmacro(rvc_dev_config_library)
  40. # 该宏仅在招行的编译生成环境下才会应用
  41. macro(rvc_dev_target_install _target)
  42. if(RVC_INTEGRATE_BUILD)
  43. if(MSVC)
  44. install(TARGETS ${_target}
  45. RUNTIME DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters
  46. ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}" COMPONENT develops EXCLUDE_FROM_ALL
  47. LIBRARY DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters
  48. )
  49. else()
  50. install(TARGETS ${_target}
  51. RUNTIME DESTINATION "${RVC_VENDOR_PATH}"
  52. ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}"
  53. LIBRARY DESTINATION "${RVC_VENDOR_PATH}"
  54. COMPONENT libraries)
  55. endif(MSVC)
  56. endif(RVC_INTEGRATE_BUILD)
  57. endmacro(rvc_dev_target_install)
  58. macro(rvc_aggereate_runtime_file)
  59. if(RVC_INTEGRATE_BUILD)
  60. set(TEMP_CURRENT_ASSET_DIR "${CMAKE_CURRENT_SOURCE_DIR}/assets")
  61. set(TEMP_CURRENT_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib/${DIFF_PLATFORM_SUB_DIR}")
  62. set(TEMP_CURRENT_BIN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/bin/${DIFF_PLATFORM_SUB_DIR}")
  63. # 添加如下内容用于收录 lib 下的 .so 库 或者 bin 下的 .dll 库 以及 资源文件
  64. set(RVC_VENDOR_DEP_LIB_DIRS ${RVC_VENDOR_DEP_LIB_DIRS}
  65. ${TEMP_CURRENT_BIN_DIR} ${TEMP_CURRENT_ASSET_DIR} PARENT_SCOPE)
  66. if(NOT MSVC)
  67. set(RVC_VENDOR_DEP_LIB_DIRS ${RVC_VENDOR_DEP_LIB_DIRS}
  68. ${TEMP_CURRENT_LIB_DIR} PARENT_SCOPE)
  69. endif(NOT MSVC)
  70. endif(RVC_INTEGRATE_BUILD)
  71. endmacro(rvc_aggereate_runtime_file)
  72. set(DEVADAPTER_CURRENT_INCLUDES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
  73. set(DEVADAPTER_CURRENT_ASSET_DIR "${CMAKE_CURRENT_SOURCE_DIR}/assets")
  74. set(DEVADAPTER_CURRENT_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib/${DIFF_PLATFORM_SUB_DIR}")
  75. set(DEVADAPTER_CURRENT_BIN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/bin/${DIFF_PLATFORM_SUB_DIR}")
  76. # 用于收录每一个厂商目录下 bin/*.dll 和 lib/*.so 文件
  77. set(RVC_VENDOR_DEP_LIB_DIRS ${DEVADAPTER_CURRENT_BIN_DIR})
  78. if(NOT MSVC)
  79. set(RVC_VENDOR_DEP_LIB_DIRS ${RVC_VENDOR_DEP_LIB_DIRS} ${DEVADAPTER_CURRENT_LIB_DIR})
  80. endif(NOT MSVC)
  81. set(VENDOR_LOG_LIB_NAME log4vendor)
  82. if(MSVC AND NOT RVC_INTEGRATE_BUILD)
  83. set(VENDOR_LOG_LIB_NAME log4vendord)
  84. endif(MSVC)
  85. if(RVC_INTEGRATE_BUILD)
  86. add_subdirectory(self)
  87. endif(RVC_INTEGRATE_BUILD)
  88. add_subdirectory(cmbsz)
  89. if(RVC_INTEGRATE_BUILD)
  90. list(REMOVE_DUPLICATES RVC_VENDOR_DEP_LIB_DIRS)
  91. foreach(dep_dir ${RVC_VENDOR_DEP_LIB_DIRS})
  92. message(STATUS "dep_dir: ${dep_dir}")
  93. file(GLOB RVC_DEP_BIN_FILES "${dep_dir}/*")
  94. message(STATUS "before file: ${RVC_DEP_BIN_FILES}")
  95. list(FILTER RVC_DEP_BIN_FILES EXCLUDE REGEX ".*\.a$")
  96. message(STATUS "after file: ${RVC_DEP_BIN_FILES}")
  97. install(PROGRAMS ${RVC_DEP_BIN_FILES} DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters)
  98. endforeach()
  99. endif(RVC_INTEGRATE_BUILD)