Skip to content

Commit 408aa5a

Browse files
kouxhochy
authored andcommitted
ARROW-2416: [C++] Support system libprotobuf
Author: Kouhei Sutou <kou@clear-code.com> Closes #1854 from kou/cpp-system-protobuf and squashes the following commits: 25d3d34 <Kouhei Sutou> Support system libprotobuf
1 parent f88949b commit 408aa5a

File tree

3 files changed

+37
-6
lines changed

3 files changed

+37
-6
lines changed

cpp/CMakeLists.txt

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,10 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
139139
"Use vendored Boost instead of existing Boost"
140140
OFF)
141141

142+
option(ARROW_PROTOBUF_USE_SHARED
143+
"Rely on Protocol Buffers shared libraries where relevant"
144+
OFF)
145+
142146
option(ARROW_PYTHON
143147
"Build the Arrow CPython extensions"
144148
OFF)
@@ -531,6 +535,7 @@ endif(UNIX)
531535
# Linker and Dependencies
532536
############################################################
533537

538+
set(ARROW_LINK_LIBS)
534539
set(ARROW_STATIC_LINK_LIBS)
535540

536541
if (ARROW_WITH_BROTLI)
@@ -568,8 +573,16 @@ endif()
568573
if (ARROW_ORC)
569574
SET(ARROW_STATIC_LINK_LIBS
570575
orc
571-
protobuf
572576
${ARROW_STATIC_LINK_LIBS})
577+
if (ARROW_PROTOBUF_USE_SHARED)
578+
SET(ARROW_LINK_LIBS
579+
protobuf
580+
${ARROW_LINK_LIBS})
581+
else()
582+
SET(ARROW_STATIC_LINK_LIBS
583+
protobuf
584+
${ARROW_STATIC_LINK_LIBS})
585+
endif()
573586
endif()
574587

575588
if (ARROW_STATIC_LINK_LIBS)
@@ -583,7 +596,8 @@ set(ARROW_BENCHMARK_LINK_LIBS
583596
${ARROW_STATIC_LINK_LIBS})
584597

585598
set(ARROW_LINK_LIBS
586-
${ARROW_STATIC_LINK_LIBS})
599+
${ARROW_STATIC_LINK_LIBS}
600+
${ARROW_LINK_LIBS})
587601

588602
set(ARROW_SHARED_PRIVATE_LINK_LIBS
589603
${BOOST_SYSTEM_LIBRARY}

cpp/cmake_modules/FindProtobuf.cmake

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,23 @@ find_path (PROTOBUF_INCLUDE_DIR google/protobuf/io/coded_stream.h HINTS
3636
NO_DEFAULT_PATH
3737
PATH_SUFFIXES "include")
3838

39+
set (lib_dirs "lib")
40+
if (EXISTS "${_protobuf_path}/lib64")
41+
set (lib_dirs "lib64" ${lib_dirs})
42+
endif ()
43+
if (EXISTS "${_protobuf_path}/lib/${CMAKE_LIBRARY_ARCHITECTURE}")
44+
set (lib_dirs "lib/${CMAKE_LIBRARY_ARCHITECTURE}" ${lib_dirs})
45+
endif ()
46+
3947
find_library (PROTOBUF_LIBRARY NAMES protobuf PATHS
4048
${_protobuf_path}
4149
NO_DEFAULT_PATH
42-
PATH_SUFFIXES "lib")
50+
PATH_SUFFIXES ${lib_dirs})
4351

4452
find_library (PROTOC_LIBRARY NAMES protoc PATHS
4553
${_protobuf_path}
4654
NO_DEFAULT_PATH
47-
PATH_SUFFIXES "lib")
55+
PATH_SUFFIXES ${lib_dirs})
4856

4957
find_program(PROTOBUF_EXECUTABLE protoc HINTS
5058
${_protobuf_path}
@@ -53,6 +61,8 @@ find_program(PROTOBUF_EXECUTABLE protoc HINTS
5361

5462
if (PROTOBUF_INCLUDE_DIR AND PROTOBUF_LIBRARY AND PROTOC_LIBRARY AND PROTOBUF_EXECUTABLE)
5563
set (PROTOBUF_FOUND TRUE)
64+
set (PROTOBUF_SHARED_LIB ${PROTOBUF_LIBRARY})
65+
set (PROTOC_SHARED_LIB ${PROTOC_LIBRARY})
5666
get_filename_component (PROTOBUF_LIBS ${PROTOBUF_LIBRARY} PATH)
5767
set (PROTOBUF_LIB_NAME protobuf)
5868
set (PROTOC_LIB_NAME protoc)
@@ -64,7 +74,9 @@ endif ()
6474

6575
if (PROTOBUF_FOUND)
6676
message (STATUS "Found the Protobuf headers: ${PROTOBUF_INCLUDE_DIR}")
77+
message (STATUS "Found the Protobuf shared library: ${PROTOBUF_SHARED_LIB}")
6778
message (STATUS "Found the Protobuf library: ${PROTOBUF_STATIC_LIB}")
79+
message (STATUS "Found the Protoc shared library: ${PROTOC_SHARED_LIB}")
6880
message (STATUS "Found the Protoc library: ${PROTOC_STATIC_LIB}")
6981
message (STATUS "Found the Protoc executable: ${PROTOBUF_EXECUTABLE}")
7082
else()

cpp/cmake_modules/ThirdpartyToolchain.cmake

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -915,8 +915,13 @@ if (ARROW_ORC)
915915
endif ()
916916

917917
include_directories (SYSTEM ${PROTOBUF_INCLUDE_DIR})
918-
ADD_THIRDPARTY_LIB(protobuf
919-
STATIC_LIB ${PROTOBUF_STATIC_LIB})
918+
if (ARROW_PROTOBUF_USE_SHARED)
919+
ADD_THIRDPARTY_LIB(protobuf
920+
SHARED_LIB ${PROTOBUF_LIBRARY})
921+
else ()
922+
ADD_THIRDPARTY_LIB(protobuf
923+
STATIC_LIB ${PROTOBUF_STATIC_LIB})
924+
endif ()
920925

921926
if (PROTOBUF_VENDORED)
922927
add_dependencies (protobuf protobuf_ep)

0 commit comments

Comments
 (0)