You can not select more than 25 topics
Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
- function(PROTOBUF_GENERATE_CPP_WITH_ROOT SRCS HDRS ROOT_DIR)
- if(NOT ARGN)
- message(
- SEND_ERROR
- "Error: PROTOBUF_GENERATE_CPP_WITH_ROOT() called without any proto files")
- return()
- endif()
-
- set(${SRCS})
- set(${HDRS})
- foreach(FIL ${ARGN})
- set(ABS_FIL ${ROOT_DIR}/${FIL})
- get_filename_component(FIL_WE ${FIL} NAME_WE)
- get_filename_component(FIL_DIR ${ABS_FIL} PATH)
- file(RELATIVE_PATH REL_DIR ${ROOT_DIR} ${FIL_DIR})
-
- list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc")
- list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h")
-
- add_custom_command(
- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc"
- "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h"
- COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} ARGS --cpp_out ${CMAKE_CURRENT_BINARY_DIR}
- -I ${FIL_DIR} ${ABS_FIL} -I ${PROTOBUF_INCLUDE_DIRS}
- DEPENDS ${ABS_FIL} libprotobuf
- COMMENT "Running C++ protocol buffer compiler on ${FIL}"
- VERBATIM)
- endforeach()
-
- set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE)
- set(${SRCS}
- ${${SRCS}}
- PARENT_SCOPE)
- set(${HDRS}
- ${${HDRS}}
- PARENT_SCOPE)
- endfunction()
-
- if(MGE_USE_SYSTEM_LIB)
- find_package(Protobuf)
- if(Protobuf_FOUND)
- add_library(libprotobuf INTERFACE)
- target_link_libraries(libprotobuf INTERFACE ${Protobuf_LIBRARIES})
- target_include_directories(libprotobuf INTERFACE ${Protobuf_INCLUDE_DIRS})
- get_filename_component(Protobuf_ROOT ${Protobuf_INCLUDE_DIR} DIRECTORY)
- set(PROTOBUF_ROOT ${Protobuf_ROOT})
- set(PROTOBUF_PROTOC_EXECUTABLE ${Protobuf_PROTOC_EXECUTABLE})
- set(PROTOBUF_INCLUDE_DIRS ${Protobuf_INCLUDE_DIRS})
- return()
- endif()
- endif()
-
- include(ExternalProject)
- include(GNUInstallDirs)
-
- set(PROTOBUF_DIR
- "${PROJECT_SOURCE_DIR}/third_party/protobuf"
- CACHE STRING "protobuf directory")
- set(PROTOBUF_BUILD_DIR ${PROJECT_BINARY_DIR}/third_party/protobuf)
-
- if(${CMAKE_BUILD_TYPE} STREQUAL "Debug")
- set(PROTOBUF_LIB ${PROTOBUF_BUILD_DIR}/${CMAKE_INSTALL_LIBDIR}/libprotobufd.a)
- else()
- set(PROTOBUF_LIB ${PROTOBUF_BUILD_DIR}/${CMAKE_INSTALL_LIBDIR}/libprotobuf.a)
- endif()
- set(PROTOBUF_PROTOC_EXECUTABLE ${PROTOBUF_BUILD_DIR}/bin/protoc)
-
- ExternalProject_Add(
- protobuf
- SOURCE_DIR ${PROTOBUF_DIR}/cmake
- PREFIX ${PROTOBUF_BUILD_DIR}
- CMAKE_ARGS -DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER}
- -DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER}
- -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
- -DCMAKE_INSTALL_PREFIX=${PROTOBUF_BUILD_DIR}
- -Dprotobuf_BUILD_EXAMPLES=OFF
- -Dprotobuf_BUILD_TESTS=OFF
- -DBUILD_SHARED_LIBS=OFF
- -DCMAKE_POSITION_INDEPENDENT_CODE=ON
- BUILD_BYPRODUCTS ${PROTOBUF_LIB} ${PROTOBUF_PROTOC_EXECUTABLE})
-
- set(PROTOBUF_INC ${PROTOBUF_BUILD_DIR}/include)
- file(MAKE_DIRECTORY ${PROTOBUF_INC})
-
- add_library(libprotobuf STATIC IMPORTED GLOBAL)
- add_dependencies(libprotobuf protobuf)
- set_target_properties(
- libprotobuf PROPERTIES IMPORTED_LOCATION ${PROTOBUF_LIB}
- INTERFACE_INCLUDE_DIRECTORIES ${PROTOBUF_BUILD_DIR}/include)
-
- add_executable(protoc IMPORTED GLOBAL)
- add_dependencies(protoc protobuf)
- set_target_properties(protoc PROPERTIES IMPORTED_LOCATION
- ${PROTOBUF_BUILD_DIR}/bin/protoc)
-
- set(PROTOBUF_ROOT ${PROTOBUF_BUILD_DIR})
- set(PROTOBUF_PROTOC_EXECUTABLE protoc)
- set(PROTOBUF_INCLUDE_DIRS ${PROTOBUF_BUILD_DIR}/include)
|