Update CMakeLists.txt to preprare for gRPC deps. (#691)

master
Christoph Schütte 2017-11-22 16:29:01 +01:00 committed by Wally B. Feed
parent 31f28b5097
commit c233aaaac8
2 changed files with 55 additions and 1 deletions

View File

@ -21,6 +21,8 @@ set(CARTOGRAPHER_MINOR_VERSION 0)
set(CARTOGRAPHER_PATCH_VERSION 0)
set(CARTOGRAPHER_VERSION ${CARTOGRAPHER_MAJOR_VERSION}.${CARTOGRAPHER_MINOR_VERSION}.${CARTOGRAPHER_PATCH_VERSION})
set(CARTOGRAPHER_SOVERSION ${CARTOGRAPHER_MAJOR_VERSION}.${CARTOGRAPHER_MINOR_VERSION})
option(BUILD_GRPC "build Cartographer gRPC support" false)
set(GRPC_PLUGIN_PATH "/usr/local/bin/grpc_cpp_plugin")
include("${PROJECT_SOURCE_DIR}/cmake/functions.cmake")
google_initialize_cartographer_project()
@ -56,8 +58,20 @@ file(GLOB_RECURSE ALL_TESTS "*_test.cc")
file(GLOB_RECURSE ALL_EXECUTABLES "*_main.cc")
list(REMOVE_ITEM ALL_SRCS ${ALL_TESTS})
list(REMOVE_ITEM ALL_SRCS ${ALL_EXECUTABLES})
file(GLOB_RECURSE ALL_GRPC_FILES "cartographer_grpc/*")
if (NOT ${BUILD_GRPC})
list_remove_item(ALL_SRCS ALL_GRPC_FILES)
list_remove_item(ALL_TESTS ALL_GRPC_FILES)
list_remove_item(ALL_EXECUTABLES ALL_GRPC_FILES)
endif()
file(GLOB_RECURSE ALL_PROTOS "*.proto")
file(GLOB_RECURSE ALL_GRPC_SERVICES "*_service.proto")
list(REMOVE_ITEM ALL_PROTOS ALL_GRPC_SERVICES)
if (NOT ${BUILD_GRPC})
list_remove_item(ALL_PROTOS ALL_GRPC_FILES)
endif()
set(ALL_PROTO_SRCS)
set(ALL_PROTO_HDRS)
foreach(ABS_FIL ${ALL_PROTOS})
@ -79,10 +93,42 @@ foreach(ABS_FIL ${ALL_PROTOS})
VERBATIM
)
endforeach()
set_source_files_properties(${ALL_PROTO_SRCS} ${ALL_PROTO_HDRS} PROPERTIES GENERATED TRUE)
list(APPEND ALL_SRCS ${ALL_PROTO_SRCS} ${ALL_PROTO_HDRS})
if(${BUILD_GRPC})
set(ALL_GRPC_SERVICE_SRCS)
set(ALL_GRPC_SERVICE_HDRS)
foreach(ABS_FIL ${ALL_GRPC_SERVICES})
file(RELATIVE_PATH REL_FIL ${PROJECT_SOURCE_DIR} ${ABS_FIL})
get_filename_component(DIR ${REL_FIL} DIRECTORY)
get_filename_component(FIL_WE ${REL_FIL} NAME_WE)
list(APPEND ALL_GRPC_SERVICE_SRCS "${PROJECT_BINARY_DIR}/${DIR}/${FIL_WE}.pb.cc")
list(APPEND ALL_GRPC_SERVICE_HDRS "${PROJECT_BINARY_DIR}/${DIR}/${FIL_WE}.pb.h")
list(APPEND ALL_GRPC_SERVICE_SRCS "${PROJECT_BINARY_DIR}/${DIR}/${FIL_WE}.grpc.pb.cc")
list(APPEND ALL_GRPC_SERVICE_HDRS "${PROJECT_BINARY_DIR}/${DIR}/${FIL_WE}.grpc.pb.h")
add_custom_command(
OUTPUT "${PROJECT_BINARY_DIR}/${DIR}/${FIL_WE}.pb.cc"
"${PROJECT_BINARY_DIR}/${DIR}/${FIL_WE}.pb.h"
"${PROJECT_BINARY_DIR}/${DIR}/${FIL_WE}.grpc.pb.cc"
"${PROJECT_BINARY_DIR}/${DIR}/${FIL_WE}.grpc.pb.h"
COMMAND ${PROTOBUF_PROTOC_EXECUTABLE}
ARGS --grpc_out ${PROJECT_BINARY_DIR}
--cpp_out ${PROJECT_BINARY_DIR}
-I ${PROJECT_SOURCE_DIR}
--plugin=protoc-gen-grpc=${GRPC_PLUGIN_PATH}
${ABS_FIL}
DEPENDS ${ABS_FIL}
COMMENT "Running C++ protocol buffer compiler with gRPC support on ${ABS_FIL}"
VERBATIM
)
endforeach()
set_source_files_properties(${ALL_GRPC_SERVICE_SRCS} ${ALL_GRPC_SERVICE_HDRS} PROPERTIES GENERATED TRUE)
list(APPEND ALL_SRCS ${ALL_GRPC_SERVICE_SRCS} ${ALL_GRPC_SERVICE_HDRS})
endif()
add_library(${PROJECT_NAME} ${ALL_SRCS})
configure_file(

View File

@ -132,3 +132,11 @@ macro(google_enable_testing)
enable_testing()
find_package(GMock REQUIRED)
endmacro()
macro(list_remove_item REMOVE_FROM TO_REMOVE)
if(${TO_REMOVE})
list(REMOVE_ITEM ${REMOVE_FROM} ${${TO_REMOVE}})
message(WARNING "Unnecessary use of list_remove_item. Consider using "
"list(REMOVE_ITEM ${REMOVE_FROM} \${${TO_REMOVE}}.")
endif()
endmacro()