123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 |
- # 非招行开发人员不允许改动本文件!!
- set(RVC_INTEGRATE_BUILD TRUE)
- set(RVC_INTEGRATE_BUILDV2 TRUE)
- set(DEVADAPTER_USING_CONAN TRUE)
- if(WITH_LOCAL_DEVLIB)
- set(DEVADAPTER_USING_CONAN FALSE)
- endif(WITH_LOCAL_DEVLIB)
- if(MSVC AND (CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i686|x86|AMD64") )
- set(DIFF_PLATFORM_SUB_DIR "msvc_x86")
- elseif((NOT MSVC) AND (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64"))
- set(DIFF_PLATFORM_SUB_DIR "gcc_aarch64")
- elseif((NOT MSVC) AND (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64"))
- set(DIFF_PLATFORM_SUB_DIR "gcc_x64")
- endif()
- message(STATUS "lib rely on directory: ${DIFF_PLATFORM_SUB_DIR}")
- include_directories(${RVC_COMMON_INCLUDE_DIR})
- macro(rvc_traverse_sub_cmake_dirs)
- file(GLOB all_valid_subdirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/CMakeLists.txt")
- foreach(dir ${all_valid_subdirs})
- if(${dir} MATCHES "^([^/]*)/+CMakeLists.txt")
- string(REGEX REPLACE "^([^/]*)/+CMakeLists.txt" "\\1" dir_trimmed ${dir})
- message(STATUS "add module ${dir_trimmed}")
- add_subdirectory(${dir_trimmed})
- endif()
- endforeach(dir)
- endmacro(rvc_traverse_sub_cmake_dirs)
- macro(rvc_define_dependen_dirs)
- set(VENDOR_CURRENT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
- # include vendor static libraries and comm header files in conan way.
- if(DEVADAPTER_USING_CONAN)
- STRING( REGEX REPLACE ".*/(.*)" "\\1" CURRENT_VENDOR_FOLDER ${CMAKE_CURRENT_SOURCE_DIR} )
- message(STATUS "vendor name : ${CURRENT_VENDOR_FOLDER}")
- string(TOUPPER ${CURRENT_VENDOR_FOLDER} CURRENT_VENDOR_FOLDER)
- #if defined conan dependency package for specified vendor
- if(${CURRENT_VENDOR_FOLDER}_CONAN_LIB_NAME)
- conan_cmake_run(REQUIRES ${${CURRENT_VENDOR_FOLDER}_CONAN_LIB_NAME}
- BASIC_SETUP CMAKE_TARGETS)
- # 如果使用Conan,则替换为Conan的路径引用
- set(VENDOR_CURRENT_SOURCE_DIR ${CONAN_${CURRENT_VENDOR_FOLDER}_ROOT})
- endif()
- endif(DEVADAPTER_USING_CONAN)
- # 放置有源码的适配器依赖库工程文件
- set(VENDOR_CURRENT_DEPS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/deps")
- set(VENDOR_CURRENT_INCLUDE_DIR "${VENDOR_CURRENT_SOURCE_DIR}/include")
- set(VENDOR_CURRENT_ASSET_DIR "${VENDOR_CURRENT_SOURCE_DIR}/assets")
- set(VENDOR_CURRENT_LIB_DIR "${VENDOR_CURRENT_SOURCE_DIR}/lib/${DIFF_PLATFORM_SUB_DIR}")
- set(VENDOR_CURRENT_BIN_DIR "${VENDOR_CURRENT_SOURCE_DIR}/bin/${DIFF_PLATFORM_SUB_DIR}")
- endmacro(rvc_define_dependen_dirs)
- macro(rvc_aggerate_vendor_libs _vendor_name)
- # include vendor all devadapter libraries in conan way.
- if(DEVADAPTER_USING_CONAN)
- message(STATUS "vendor name v2 : ${_vendor_name}")
- string(TOUPPER ${_vendor_name} CURRENT_VENDOR)
- #if defined conan dependency package for specified vendor
- if(${CURRENT_VENDOR}_CONAN_ALL_LIB_NAME)
- conan_cmake_run(REQUIRES ${${CURRENT_VENDOR}_CONAN_ALL_LIB_NAME}
- BASIC_SETUP CMAKE_TARGETS)
- set(VENDOR_CURRENT_ALL_LIB_ROOT_DIR ${CONAN_${CURRENT_VENDOR}_ROOT})
- set(VENDOR_ALL_DEPS_DIR "${VENDOR_CURRENT_ALL_LIB_ROOT_DIR}/dep")
- set(RVC_VENDOR_DEP_LIB_DIRS ${RVC_VENDOR_DEP_LIB_DIRS} ${VENDOR_ALL_DEPS_DIR})
- endif()
- endif(DEVADAPTER_USING_CONAN)
- endmacro(rvc_aggerate_vendor_libs)
- macro(rvc_dev_define_module _module_name)
- set(MODULE_NAME "${_module_name}")
- string(TOUPPER "${MODULE_NAME}" MODULE_PREFIX)
- endmacro(rvc_dev_define_module)
- # 工程配置文件
- macro(rvc_dev_config_library _module_name _module_prefix)
-
- set(${_module_prefix}_CHARACTERISTIC "${${_module_prefix}_VENDOR}.${${_module_prefix}_VERSION}.${${_module_prefix}_BATCH}")
- set(MODULE_FULL_NAME "${_module_name}_${${_module_prefix}_VENDOR}_${${_module_prefix}_VERSION}_${${_module_prefix}_BATCH}")
- if (MSVC)
- set (RC_VERSION_MAJOR ${${_module_prefix}_VERSION})
- set (RC_VERSION_MINOR ${${_module_prefix}_BATCH})
- set (RC_VERSION_BUILD ${MSVC_TOOLSET_VERSION})
- set (RC_VERSION_PATCH ${MSVC_VERSION})
- configure_file(
- ${CMAKE_SOURCE_DIR}/version.rc.in
- ${CMAKE_CURRENT_BINARY_DIR}/version.rc
- @ONLY)
- set ( ${_module_prefix}_SRCS ${${_module_prefix}_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
- endif(MSVC)
- add_library(${MODULE_FULL_NAME} ${${_module_prefix}_SRCS})
- set_target_properties(${MODULE_FULL_NAME} PROPERTIES COMPILE_DEFINITIONS "DEVICEBASE_EXPORTS")
- set_target_properties(${MODULE_FULL_NAME} PROPERTIES
- OUTPUT_NAME "${_module_name}.${${_module_prefix}_CHARACTERISTIC}")
- target_include_directories(${MODULE_FULL_NAME} PRIVATE ${DEVADAPTER_CURRENT_INCLUDES_DIR} ${VENDOR_CURRENT_INCLUDE_DIR})
- target_link_directories(${MODULE_FULL_NAME} PRIVATE ${DEVADAPTER_CURRENT_LIB_DIR} ${VENDOR_CURRENT_LIB_DIR})
- if(MSVC)
- set_property(TARGET ${MODULE_FULL_NAME} PROPERTY FOLDER "devadapter/${CURRENT_VENDOR}/")
- endif(MSVC)
- endmacro(rvc_dev_config_library)
- # 该宏仅在招行的编译生成环境下才会应用
- macro(rvc_dev_target_install _target)
- if(RVC_INTEGRATE_BUILD)
- if(MSVC)
- install(TARGETS ${_target}
- RUNTIME DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters
- ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}" COMPONENT develops EXCLUDE_FROM_ALL
- LIBRARY DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters
- )
- else()
- install(TARGETS ${_target}
- RUNTIME DESTINATION "${RVC_VENDOR_PATH}"
- ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}"
- LIBRARY DESTINATION "${RVC_VENDOR_PATH}"
- COMPONENT libraries)
- endif(MSVC)
- elseif(RVC_VENDOR_CONFIGV2)
- install(TARGETS ${_target}
- RUNTIME DESTINATION "${RVC_VENDOR_PATH}"
- ARCHIVE DESTINATION "${RVC_VENDOR_PATH}"
- LIBRARY DESTINATION "${RVC_VENDOR_PATH}")
- endif(RVC_INTEGRATE_BUILD)
- endmacro(rvc_dev_target_install)
- # 用于收录厂商文件夹目录下 lib 下的 .so 库 或者 bin 下的 .dll 库 以及 资源文件
- macro(rvc_aggereate_runtime_file)
- if(RVC_INTEGRATE_BUILD)
- set(RVC_VENDOR_DEP_LIB_DIRS ${RVC_VENDOR_DEP_LIB_DIRS} ${RVC_VENDOR_LIB_DIRS}
- ${VENDOR_CURRENT_BIN_DIR} ${VENDOR_CURRENT_ASSET_DIR} PARENT_SCOPE)
- if(NOT MSVC)
- set(RVC_VENDOR_DEP_LIB_DIRS ${RVC_VENDOR_DEP_LIB_DIRS} ${VENDOR_CURRENT_LIB_DIR} ${VENDOR_CURRENT_ASSET_DIR} PARENT_SCOPE)
- endif(NOT MSVC)
- elseif(RVC_VENDOR_CONFIGV2)
- set(RVC_VENDOR_DEP_LIB_DIRS ${RVC_VENDOR_DEP_LIB_DIRS} ${RVC_VENDOR_LIB_DIRS}
- ${VENDOR_CURRENT_BIN_DIR} ${VENDOR_CURRENT_ASSET_DIR} PARENT_SCOPE)
- if(NOT MSVC)
- set(RVC_VENDOR_DEP_LIB_DIRS ${RVC_VENDOR_DEP_LIB_DIRS} ${VENDOR_CURRENT_LIB_DIR} ${VENDOR_CURRENT_ASSET_DIR} PARENT_SCOPE)
- endif(NOT MSVC)
- endif(RVC_INTEGRATE_BUILD)
- endmacro(rvc_aggereate_runtime_file)
- set(DEVADAPTER_CURRENT_INCLUDES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
- set(DEVADAPTER_CURRENT_ASSET_DIR "${CMAKE_CURRENT_SOURCE_DIR}/assets")
- set(DEVADAPTER_CURRENT_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib/${DIFF_PLATFORM_SUB_DIR}")
- set(DEVADAPTER_CURRENT_BIN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/bin/${DIFF_PLATFORM_SUB_DIR}")
- # 用于收录每一个厂商目录下 bin/*.dll 和 lib/*.so 文件,先收集当前目录下统一的库文件以及资源文件
- set(RVC_VENDOR_DEP_LIB_DIRS ${DEVADAPTER_CURRENT_BIN_DIR} ${DEVADAPTER_CURRENT_ASSET_DIR})
- if(NOT MSVC)
- set(RVC_VENDOR_DEP_LIB_DIRS ${RVC_VENDOR_DEP_LIB_DIRS} ${DEVADAPTER_CURRENT_LIB_DIR})
- endif(NOT MSVC)
- set(VENDOR_LOG_LIBRARY_NAME "cmblog4vendor")
- # 使用工程源码编译
- set(VENDOR_LOG_LIB_NAME log4vendor)
- add_subdirectory(liblog4vendor)
- message(STATUS "vendor log library: ${VENDOR_LOG_LIB_NAME}")
- # 通过conan的方式管理厂商库
- if(DEVADAPTER_USING_CONAN)
- if(MSVC)
- set(SELF_CONAN_LIB_NAME self/2024.1217.01@LR04.02_VendorLib/testing)
- add_subdirectory(self)
- endif(MSVC)
- endif(DEVADAPTER_USING_CONAN)
- file(GLOB all_valid_subdirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/CMakeLists.txt")
- foreach(dir ${all_valid_subdirs})
- if(${dir} MATCHES "^([^/]*)/+CMakeLists.txt")
- string(REGEX REPLACE "^([^/]*)/+CMakeLists.txt" "\\1" dir_trimmed ${dir})
- # remove 'self' sub directory bcz it would be added seperately
- if(DEVOPS_ON_CMAKE_PRD)
- #硬件模拟器在生产流水线不参与编译
- #liblog4vendor 和 self 已在上面提前单独编译
- #simulator 编译纯适配器时无法编译,因为依赖框架RVCComm库
- string(FIND "liblog4vendor|self|cmbsz|simulator" ${dir_trimmed} found)
- else()
- if(DEVOPS_ON)
- string(FIND "liblog4vendor|self|cmbsz" ${dir_trimmed} found)
- else()
- string(FIND "liblog4vendor|self" ${dir_trimmed} found)
- endif(DEVOPS_ON)
- endif(DEVOPS_ON_CMAKE_PRD)
- message(STATUS "found: ${found}")
- if((NOT RVC_INTEGRATE_BUILD) OR (${found} EQUAL -1))
- message(STATUS "Adding vendor component ${dir_trimmed}")
- add_subdirectory(${dir_trimmed})
- endif((NOT RVC_INTEGRATE_BUILD) OR (${found} EQUAL -1))
- endif()
- endforeach(dir)
- if(RVC_INTEGRATE_BUILD)
- #安装VS2010下的厂商文件,先安装,防止旧的覆盖新的内容
- if(CONAN_RES_DIRS_VENDORDLL)
- file(GLOB RVC_DEP_BIN_FILES "${CONAN_RES_DIRS_VENDORDLL}/*")
- install(FILES ${RVC_DEP_BIN_FILES} DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters)
- endif(CONAN_RES_DIRS_VENDORDLL)
- list(REMOVE_DUPLICATES RVC_VENDOR_DEP_LIB_DIRS)
- message(STATUS "dep_dirs:${RVC_VENDOR_DEP_LIB_DIRS}")
- foreach(dep_dir ${RVC_VENDOR_DEP_LIB_DIRS})
- message(STATUS "dep_dir: ${dep_dir}")
- file(GLOB RVC_DEP_BIN_FILES "${dep_dir}/*")
- list(REMOVE_DUPLICATES RVC_DEP_BIN_FILES)
- message(STATUS "before file: ${RVC_DEP_BIN_FILES}")
- list(FILTER RVC_DEP_BIN_FILES EXCLUDE REGEX ".*\\.a$")
- list(FILTER RVC_DEP_BIN_FILES EXCLUDE REGEX ".*\\liblog4cplus.so$")
- list(FILTER RVC_DEP_BIN_FILES EXCLUDE REGEX ".*\\libcmblog4vendor.so$")
- message(STATUS "after file: ${RVC_DEP_BIN_FILES}")
- foreach(bin_file ${RVC_DEP_BIN_FILES})
- if(IS_DIRECTORY ${bin_file})
- string(REGEX MATCH ".*/grg$" GRG_LIB_DIR_NAME "${bin_file}")
- string(LENGTH "${GRG_LIB_DIR_NAME}" GRG_LIB_DIR_NAME_length)
- if(NOT ${GRG_LIB_DIR_NAME_length})
- install(DIRECTORY "${bin_file}" DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters)
- else()
- message(STATUS "skip install dir: ${bin_file}")
- endif(NOT ${GRG_LIB_DIR_NAME_length})
- else()
- install(PROGRAMS ${bin_file} DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters)
- endif()
- endforeach()
- endforeach()
- elseif(RVC_VENDOR_CONFIGV2)
- # 此列表中的文件已在终端应用中包含,所以要移除,TODO: Windows 需要兼容
- set(USELESS_DEVADAPTER_FILE_NAMES
- liblog4cplus.so
- libcmblog4vendor.so
- )
- list(REMOVE_DUPLICATES RVC_VENDOR_DEP_LIB_DIRS)
- foreach(dep_dir ${RVC_VENDOR_DEP_LIB_DIRS})
- message(STATUS "dep_dir: ${dep_dir}")
- file(GLOB RVC_DEP_BIN_FILES "${dep_dir}/*")
- list(REMOVE_DUPLICATES RVC_DEP_BIN_FILES)
- message(STATUS "before file: ${RVC_DEP_BIN_FILES}")
- foreach(filter_elem ${USELESS_DEVADAPTER_FILE_NAMES})
- set(filter_args ".*\\${filter_elem}$")
- list(FILTER RVC_DEP_BIN_FILES EXCLUDE REGEX ${filter_args})
- endforeach()
- list(FILTER RVC_DEP_BIN_FILES EXCLUDE REGEX ".*\\.a$")
- message(STATUS "after file: ${RVC_DEP_BIN_FILES}")
- foreach(bin_file ${RVC_DEP_BIN_FILES})
- if(IS_DIRECTORY ${bin_file})
- install(DIRECTORY "${bin_file}" DESTINATION "${RVC_VENDOR_PATH}")
- else()
- install(PROGRAMS ${bin_file} DESTINATION "${RVC_VENDOR_PATH}")
- endif()
- endforeach()
- endforeach()
- endif(RVC_INTEGRATE_BUILD)
- if((NOT RVC_INTEGRATE_BUILD) AND RVC_VENDOR_CONFIGV2)
- if(NOT CPACK_GENERATOR)
- set(CPACK_GENERATOR "ZIP")
- message(STATUS "set zip package file type for matching head bank publish")
- endif()
- set(CPACK_PACKAGE_FILE_NAME "${DEVADAPTER_VENDOR}_${DEVADAPTER_PROJECT_NAME}_${DEVADAPTER_VERSION}")
- set(CPACK_PACKAGE_NAME "${DEVADAPTER_VENDOR}-${DEVADAPTER_PROJECT_NAME}")
- set(CPACK_PACKAGE_VENDOR "${DEVADAPTER_VENDOR}")
- set(CPACK_PACKAGE_VERSION ${DEVADAPTER_VERSION})
- set(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE TRUE)
- include(CPack)
- endif((NOT RVC_INTEGRATE_BUILD) AND RVC_VENDOR_CONFIGV2)
|