From f0884ec25b5f56cea3ed135efaf5fca744d3f1ee Mon Sep 17 00:00:00 2001 From: redPanther Date: Mon, 13 Jun 2016 08:11:57 +0200 Subject: [PATCH] add support for using system protoc instead of version in submodule (#698) --- dependencies/CMakeLists.txt | 46 ++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/dependencies/CMakeLists.txt b/dependencies/CMakeLists.txt index 52d7f741..26dd96c5 100644 --- a/dependencies/CMakeLists.txt +++ b/dependencies/CMakeLists.txt @@ -9,27 +9,35 @@ if(ENABLE_WS281XPWM) external/rpi_ws281x/mailbox.c external/rpi_ws281x/ws2811.c external/rpi_ws281x/pwm.c external/rpi_ws281x/dma.c external/rpi_ws281x/rpihw.c) -endif(ENABLE_WS281XPWM) - -set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared protobuf library") -add_subdirectory(external/protobuf) - -if(CMAKE_CROSSCOMPILING) - # when crosscompiling import the protoc executable targets from a file generated by a native build - option(IMPORT_PROTOC "Protoc export file (protoc_export.cmake) from a native build" "IMPORT_PROTOC-FILE_NOT_FOUND") - include(${IMPORT_PROTOC}) -else() - # export the protoc compiler so it can be used when cross compiling - export(TARGETS protoc_compiler FILE "${CMAKE_BINARY_DIR}/protoc_export.cmake") endif() -# define the include for the protobuf library at the parent scope -set(PROTOBUF_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/external/protobuf/src") -set(PROTOBUF_INCLUDE_DIRS ${PROTOBUF_INCLUDE_DIRS} PARENT_SCOPE) +set(USE_SYSTEM_PROTO_LIBS OFF CACHE BOOL "use protobuf library from system") + +if (USE_SYSTEM_PROTO_LIBS) + find_package(Protobuf REQUIRED) + include_directories(${PROTOBUF_INCLUDE_DIRS}) +else () + set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared protobuf library") + add_subdirectory(external/protobuf) + + if(CMAKE_CROSSCOMPILING) + # when crosscompiling import the protoc executable targets from a file generated by a native build + option(IMPORT_PROTOC "Protoc export file (protoc_export.cmake) from a native build" "IMPORT_PROTOC-FILE_NOT_FOUND") + include(${IMPORT_PROTOC}) + else() + # export the protoc compiler so it can be used when cross compiling + export(TARGETS protoc_compiler FILE "${CMAKE_BINARY_DIR}/protoc_export.cmake") + endif() + + # define the include for the protobuf library at the parent scope + set(PROTOBUF_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/external/protobuf/src") + set(PROTOBUF_INCLUDE_DIRS ${PROTOBUF_INCLUDE_DIRS} PARENT_SCOPE) + + # define the protoc executable at the parent scope + get_property(PROTOBUF_PROTOC_EXECUTABLE TARGET protoc_compiler PROPERTY LOCATION) + set(PROTOBUF_PROTOC_EXECUTABLE ${PROTOBUF_PROTOC_EXECUTABLE} PARENT_SCOPE) +endif() -# define the protoc executable at the parent scope -get_property(PROTOBUF_PROTOC_EXECUTABLE TARGET protoc_compiler PROPERTY LOCATION) -set(PROTOBUF_PROTOC_EXECUTABLE ${PROTOBUF_PROTOC_EXECUTABLE} PARENT_SCOPE) message(STATUS "Using protobuf compiler: " ${PROTOBUF_PROTOC_EXECUTABLE}) #============================================================================= @@ -76,7 +84,7 @@ function(PROTOBUF_GENERATE_CPP SRCS HDRS) endforeach() endif() - if(CMAKE_CROSSCOMPILING) + if(CMAKE_CROSSCOMPILING OR USE_SYSTEM_PROTO_LIBS) set(PROTOC_DEPENDENCY ${PROTOBUF_PROTOC_EXECUTABLE}) else() set(PROTOC_DEPENDENCY protoc_compiler)