This is an automated email from the ASF dual-hosted git repository.
gangwu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/orc.git
The following commit(s) were added to refs/heads/master by this push:
new ca007d5 [C++] Partially rework CMake modules to accommodate library
types
ca007d5 is described below
commit ca007d57cb6b399671bc71328f29d040032575df
Author: Nehal J Wani <[email protected]>
AuthorDate: Sat Oct 10 11:46:53 2020 +0530
[C++] Partially rework CMake modules to accommodate library types
This patch allows CMake selectively linking each third party library
statically with a fallback to dynamic linking if not available.
---
c++/src/CMakeLists.txt | 17 ++---
c++/test/CMakeLists.txt | 16 ++---
cmake_modules/FindGTest.cmake | 37 +++++++---
cmake_modules/FindLZ4.cmake | 21 +++---
cmake_modules/FindProtobuf.cmake | 27 ++++++--
cmake_modules/FindSnappy.cmake | 21 +++---
cmake_modules/FindZLIB.cmake | 20 +++---
cmake_modules/FindZSTD.cmake | 24 +++----
cmake_modules/ThirdpartyToolchain.cmake | 118 +++++++++++++++++++++++---------
tools/src/CMakeLists.txt | 3 +-
tools/test/CMakeLists.txt | 11 ++-
11 files changed, 200 insertions(+), 115 deletions(-)
diff --git a/c++/src/CMakeLists.txt b/c++/src/CMakeLists.txt
index 7ff543d..772f4c6 100644
--- a/c++/src/CMakeLists.txt
+++ b/c++/src/CMakeLists.txt
@@ -155,7 +155,7 @@ CHECK_CXX_SOURCE_RUNS("
)
set(CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIR})
-set(CMAKE_REQUIRED_LIBRARIES zlib)
+set(CMAKE_REQUIRED_LIBRARIES orc_zlib)
CHECK_CXX_SOURCE_COMPILES("
#define Z_PREFIX
#include<zlib.h>
@@ -174,12 +174,7 @@ configure_file (
include_directories (
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
- ${PROTOBUF_INCLUDE_DIR}
- ${ZLIB_INCLUDE_DIR}
- ${SNAPPY_INCLUDE_DIR}
- ${LZ4_INCLUDE_DIR}
${LIBHDFSPP_INCLUDE_DIR}
- ${ZSTD_INCLUDE_DIR}
)
add_custom_command(OUTPUT orc_proto.pb.h orc_proto.pb.cc
@@ -236,11 +231,11 @@ endif(BUILD_LIBHDFSPP)
add_library (orc STATIC ${SOURCE_FILES})
target_link_libraries (orc
- protobuf
- zlib
- snappy
- lz4
- zstd
+ orc::protobuf
+ orc::zlib
+ orc::snappy
+ orc::lz4
+ orc::zstd
${LIBHDFSPP_LIBRARIES}
)
diff --git a/c++/test/CMakeLists.txt b/c++/test/CMakeLists.txt
index ae4b807..da5ef57 100644
--- a/c++/test/CMakeLists.txt
+++ b/c++/test/CMakeLists.txt
@@ -14,10 +14,6 @@ include_directories(
${PROJECT_SOURCE_DIR}/c++/src
${PROJECT_BINARY_DIR}/c++/include
${PROJECT_BINARY_DIR}/c++/src
- ${PROTOBUF_INCLUDE_DIR}
- ${ZLIB_INCLUDE_DIR}
- ${SNAPPY_INCLUDE_DIR}
- ${GTEST_INCLUDE_DIR}
)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX11_FLAGS} ${WARN_FLAGS}")
@@ -54,11 +50,11 @@ add_executable (orc-test
target_link_libraries (orc-test
orc
- lz4
- protobuf
- snappy
- zlib
- ${GTEST_LIBRARIES}
+ orc::lz4
+ orc::protobuf
+ orc::snappy
+ orc::zlib
+ orc::gmock
)
add_executable (create-test-files
@@ -67,7 +63,7 @@ add_executable (create-test-files
target_link_libraries (create-test-files
orc
- protobuf
+ orc::protobuf
)
if (TEST_VALGRIND_MEMCHECK)
diff --git a/cmake_modules/FindGTest.cmake b/cmake_modules/FindGTest.cmake
index 3ae8954..c1326ea 100644
--- a/cmake_modules/FindGTest.cmake
+++ b/cmake_modules/FindGTest.cmake
@@ -13,8 +13,10 @@
# GTEST_HOME environmental variable is used to check for GTest headers and
static library
# GTEST_INCLUDE_DIR: directory containing headers
-# GTEST_LIBS: directory containing gtest libraries
+# GMOCK_LIBRARY: path to libgmock
+# GTEST_LIBRARY: path to libgtest
# GMOCK_STATIC_LIB: is set to gmock.a static library
+# GTEST_STATIC_LIB: is set to gtest.a static library
# GTEST_FOUND is set if GTEST is found
if (NOT "${GTEST_HOME}" STREQUAL "")
@@ -28,24 +30,40 @@ find_path (GTEST_INCLUDE_DIR gmock/gmock.h HINTS
NO_DEFAULT_PATH
PATH_SUFFIXES "include")
-find_library (GTEST_LIBRARIES NAMES gmock HINTS
+find_library (GMOCK_LIBRARY NAMES gmock HINTS
${_gtest_path}
PATH_SUFFIXES "lib")
-if (GTEST_INCLUDE_DIR AND GTEST_LIBRARIES)
+find_library (GTEST_LIBRARY NAMES gtest HINTS
+ ${_gtest_path}
+ PATH_SUFFIXES "lib")
+
+find_library (GMOCK_STATIC_LIB NAMES
${CMAKE_STATIC_LIBRARY_PREFIX}gmock${CMAKE_STATIC_LIBRARY_SUFFIX} HINTS
+ ${_gtest_path}
+ PATH_SUFFIXES "lib")
+
+find_library (GTEST_STATIC_LIB NAMES
${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX} HINTS
+ ${_gtest_path}
+ PATH_SUFFIXES "lib")
+
+if (GTEST_INCLUDE_DIR AND GMOCK_LIBRARY)
set (GTEST_FOUND TRUE)
- get_filename_component (GTEST_LIBS ${GTEST_LIBRARIES} PATH )
set (GTEST_HEADER_NAME gmock/gmock.h)
set (GTEST_HEADER ${GTEST_INCLUDE_DIR}/${GTEST_HEADER_NAME})
- set (GTEST_LIB_NAME gmock)
- set (GMOCK_STATIC_LIB
${GTEST_LIBS}/${CMAKE_STATIC_LIBRARY_PREFIX}${GTEST_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX})
else ()
set (GTEST_FOUND FALSE)
endif ()
if (GTEST_FOUND)
message (STATUS "Found the GTest header: ${GTEST_HEADER}")
- message (STATUS "Found the GTest library: ${GMOCK_STATIC_LIB}")
+ message (STATUS "Found the GTest library: ${GTEST_LIBRARY}")
+ message (STATUS "Found the GMock library: ${GMOCK_LIBRARY}")
+ if (GTEST_STATIC_LIB)
+ message (STATUS "Found the GTest static library: ${GTEST_STATIC_LIB}")
+ endif ()
+ if (GMOCK_STATIC_LIB)
+ message (STATUS "Found the GMock static library: ${GMOCK_STATIC_LIB}")
+ endif ()
else ()
if (_gtest_path)
set (GTEST_ERR_MSG "Could not find GTest. Looked in ${_gtest_path}.")
@@ -63,6 +81,7 @@ endif ()
mark_as_advanced (
GTEST_INCLUDE_DIR
GMOCK_STATIC_LIB
- GTEST_LIBS
- GTEST_LIBRARIES
+ GTEST_STATIC_LIB
+ GMOCK_LIBRARY
+ GTEST_LIBRARY
)
diff --git a/cmake_modules/FindLZ4.cmake b/cmake_modules/FindLZ4.cmake
index e522a6f..f579849 100644
--- a/cmake_modules/FindLZ4.cmake
+++ b/cmake_modules/FindLZ4.cmake
@@ -13,7 +13,7 @@
# LZ4_HOME environment variable is used to check for LZ4 headers and static
library
# LZ4_INCLUDE_DIR: directory containing headers
-# LZ4_LIBS: directory containing LZ4 libraries
+# LZ4_LIBRARY: path to liblz4
# LZ4_STATIC_LIB: path to lz4.a
# LZ4_FOUND: whether LZ4 has been found
@@ -28,24 +28,28 @@ find_path (LZ4_INCLUDE_DIR lz4.h HINTS
NO_DEFAULT_PATH
PATH_SUFFIXES "include")
-find_library (LZ4_LIBRARIES NAMES lz4 HINTS
+find_library (LZ4_LIBRARY NAMES lz4 HINTS
${_lz4_path}
PATH_SUFFIXES "lib" "lib64")
-if (LZ4_INCLUDE_DIR AND LZ4_LIBRARIES)
+find_library (LZ4_STATIC_LIB NAMES
${CMAKE_STATIC_LIBRARY_PREFIX}${LZ4_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}
HINTS
+ ${_lz4_path}
+ PATH_SUFFIXES "lib" "lib64")
+
+if (LZ4_INCLUDE_DIR AND LZ4_LIBRARY)
set (LZ4_FOUND TRUE)
- get_filename_component (LZ4_LIBS ${LZ4_LIBRARIES} PATH)
set (LZ4_HEADER_NAME lz4.h)
set (LZ4_HEADER ${LZ4_INCLUDE_DIR}/${LZ4_HEADER_NAME})
- set (LZ4_LIB_NAME lz4)
- set (LZ4_STATIC_LIB
${LZ4_LIBS}/${CMAKE_STATIC_LIBRARY_PREFIX}${LZ4_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX})
else ()
set (LZ4_FOUND FALSE)
endif ()
if (LZ4_FOUND)
message (STATUS "Found the LZ4 header: ${LZ4_HEADER}")
- message (STATUS "Found the LZ4 library: ${LZ4_STATIC_LIB}")
+ message (STATUS "Found the LZ4 library: ${LZ4_LIBRARY}")
+ if (LZ4_STATIC_LIB)
+ message (STATUS "Found the LZ4 static library: ${LZ4_STATIC_LIB}")
+ endif ()
else()
if (_lz4_path)
set (LZ4_ERR_MSG "Could not find LZ4. Looked in ${_lz4_path}.")
@@ -63,6 +67,5 @@ endif()
mark_as_advanced (
LZ4_INCLUDE_DIR
LZ4_STATIC_LIB
- LZ4_LIBS
- LZ4_LIBRARIES
+ LZ4_LIBRARY
)
diff --git a/cmake_modules/FindProtobuf.cmake b/cmake_modules/FindProtobuf.cmake
index d901c55..f2b6a7c 100644
--- a/cmake_modules/FindProtobuf.cmake
+++ b/cmake_modules/FindProtobuf.cmake
@@ -14,8 +14,9 @@
# PROTOBUF_FOUND is set if Protobuf is found
# PROTOBUF_INCLUDE_DIR: directory containing headers
-# PROTOBUF_LIBS: directory containing Protobuf libraries
+# PROTOBUF_LIBRARY: location of libprotobuf
# PROTOBUF_STATIC_LIB: location of protobuf.a
+# PROTOC_LIBRARY: location of libprotoc
# PROTOC_STATIC_LIB: location of protoc.a
# PROTOBUF_EXECUTABLE: location of protoc
@@ -40,10 +41,18 @@ find_library (PROTOBUF_LIBRARY NAMES protobuf HINTS
${_protobuf_path}
PATH_SUFFIXES "lib")
+find_library (PROTOBUF_STATIC_LIB NAMES
${CMAKE_STATIC_LIBRARY_PREFIX}protobuf${CMAKE_STATIC_LIBRARY_SUFFIX} HINTS
+ ${_protobuf_path}
+ PATH_SUFFIXES "lib")
+
find_library (PROTOC_LIBRARY NAMES protoc HINTS
${_protobuf_path}
PATH_SUFFIXES "lib")
+find_library (PROTOC_STATIC_LIB NAMES
${CMAKE_STATIC_LIBRARY_PREFIX}protoc${CMAKE_STATIC_LIBRARY_SUFFIX} HINTS
+ ${_protobuf_path}
+ PATH_SUFFIXES "lib")
+
find_program(PROTOBUF_EXECUTABLE protoc HINTS
${_protobuf_path}
NO_DEFAULT_PATH
@@ -51,20 +60,23 @@ find_program(PROTOBUF_EXECUTABLE protoc HINTS
if (PROTOBUF_INCLUDE_DIR AND PROTOBUF_LIBRARY AND PROTOC_LIBRARY AND
PROTOBUF_EXECUTABLE)
set (PROTOBUF_FOUND TRUE)
- get_filename_component (PROTOBUF_LIBS ${PROTOBUF_LIBRARY} PATH)
set (PROTOBUF_LIB_NAME protobuf)
set (PROTOC_LIB_NAME protoc)
- set (PROTOBUF_STATIC_LIB
${PROTOBUF_LIBS}/${CMAKE_STATIC_LIBRARY_PREFIX}${PROTOBUF_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX})
- set (PROTOC_STATIC_LIB
${PROTOBUF_LIBS}/${CMAKE_STATIC_LIBRARY_PREFIX}${PROTOC_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX})
else ()
set (PROTOBUF_FOUND FALSE)
endif ()
if (PROTOBUF_FOUND)
message (STATUS "Found the Protobuf headers: ${PROTOBUF_INCLUDE_DIR}")
- message (STATUS "Found the Protobuf library: ${PROTOBUF_STATIC_LIB}")
- message (STATUS "Found the Protoc library: ${PROTOC_STATIC_LIB}")
+ message (STATUS "Found the Protobuf library: ${PROTOBUF_LIBRARY}")
+ message (STATUS "Found the Protoc library: ${PROTOC_LIBRARY}")
message (STATUS "Found the Protoc executable: ${PROTOBUF_EXECUTABLE}")
+ if (PROTOBUF_STATIC_LIB)
+ message (STATUS "Found the Protobuf static library:
${PROTOBUF_STATIC_LIB}")
+ endif ()
+ if (PROTOC_STATIC_LIB)
+ message (STATUS "Found the Protoc static library: ${PROTOC_STATIC_LIB}")
+ endif ()
else()
if (_protobuf_path)
set (PROTOBUF_ERR_MSG "Could not find Protobuf. Looked in
${_protobuf_path}.")
@@ -81,7 +93,8 @@ endif()
mark_as_advanced (
PROTOBUF_INCLUDE_DIR
- PROTOBUF_LIBS
+ PROTOBUF_LIBRARY
PROTOBUF_STATIC_LIB
PROTOC_STATIC_LIB
+ PROTOC_LIBRARY
)
diff --git a/cmake_modules/FindSnappy.cmake b/cmake_modules/FindSnappy.cmake
index 5aeb88e..a834dd0 100644
--- a/cmake_modules/FindSnappy.cmake
+++ b/cmake_modules/FindSnappy.cmake
@@ -13,7 +13,7 @@
# SNAPPY_HOME environmental variable is used to check for Snappy headers and
static library
# SNAPPY_INCLUDE_DIR: directory containing headers
-# SNAPPY_LIBS: directory containing snappy libraries
+# SNAPPY_LIBRARY: path to libsnappy
# SNAPPY_STATIC_LIB: path to libsnappy.a
# SNAPPY_FOUND: whether snappy has been found
@@ -28,24 +28,28 @@ find_path (SNAPPY_INCLUDE_DIR snappy.h HINTS
NO_DEFAULT_PATH
PATH_SUFFIXES "include")
-find_library (SNAPPY_LIBRARIES NAMES snappy HINTS
+find_library (SNAPPY_LIBRARY NAMES snappy HINTS
${_snappy_path}
PATH_SUFFIXES "lib" "lib64")
-if (SNAPPY_INCLUDE_DIR AND SNAPPY_LIBRARIES)
+find_library (SNAPPY_STATIC_LIB NAMES
${CMAKE_STATIC_LIBRARY_PREFIX}${SNAPPY_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}
HINTS
+ ${_snappy_path}
+ PATH_SUFFIXES "lib" "lib64")
+
+if (SNAPPY_INCLUDE_DIR AND SNAPPY_LIBRARY)
set (SNAPPY_FOUND TRUE)
- get_filename_component (SNAPPY_LIBS ${SNAPPY_LIBRARIES} PATH)
set (SNAPPY_HEADER_NAME snappy.h)
set (SNAPPY_HEADER ${SNAPPY_INCLUDE_DIR}/${SNAPPY_HEADER_NAME})
- set (SNAPPY_LIB_NAME snappy)
- set (SNAPPY_STATIC_LIB
${SNAPPY_LIBS}/${CMAKE_STATIC_LIBRARY_PREFIX}${SNAPPY_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX})
else ()
set (SNAPPY_FOUND FALSE)
endif ()
if (SNAPPY_FOUND)
message (STATUS "Found the Snappy header: ${SNAPPY_HEADER}")
- message (STATUS "Found the Snappy library: ${SNAPPY_STATIC_LIB}")
+ message (STATUS "Found the Snappy library: ${SNAPPY_LIBRARY}")
+ if (SNAPPY_STATIC_LIB)
+ message (STATUS "Found the Snappy static library: ${SNAPPY_STATIC_LIB}")
+ endif()
else()
if (_snappy_path)
set (SNAPPY_ERR_MSG "Could not find Snappy. Looked in ${_snappy_path}.")
@@ -63,6 +67,5 @@ endif()
mark_as_advanced (
SNAPPY_INCLUDE_DIR
SNAPPY_STATIC_LIB
- SNAPPY_LIBS
- SNAPPY_LIBRARIES
+ SNAPPY_LIBRARY
)
diff --git a/cmake_modules/FindZLIB.cmake b/cmake_modules/FindZLIB.cmake
index 6c09640..968d148 100644
--- a/cmake_modules/FindZLIB.cmake
+++ b/cmake_modules/FindZLIB.cmake
@@ -13,7 +13,7 @@
# ZLIB_HOME environmental variable is used to check for ZLIB headers and
static library
# ZLIB_INCLUDE_DIR: directory containing headers
-# ZLIB_LIBS: directory containing ZLIB libraries
+# ZLIB_LIBRARY: path to libz/libzlib
# ZLIB_STATIC_LIB: path to zlib.a
# ZLIB_FOUND: whether ZLIB has been found
@@ -32,23 +32,28 @@ if (NOT ZLIB_STATIC_LIB_NAME)
set (ZLIB_STATIC_LIB_NAME z)
endif()
-find_library (ZLIB_LIBRARIES NAMES ${ZLIB_STATIC_LIB_NAME} HINTS
+find_library (ZLIB_LIBRARY NAMES z zlib ${ZLIB_STATIC_LIB_NAME} HINTS
${_zlib_path}
PATH_SUFFIXES "lib")
-if (ZLIB_INCLUDE_DIR AND ZLIB_LIBRARIES)
+find_library (ZLIB_STATIC_LIB NAMES
${CMAKE_STATIC_LIBRARY_PREFIX}${ZLIB_STATIC_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}
HINTS
+ ${_zlib_path}
+ PATH_SUFFIXES "lib")
+
+if (ZLIB_INCLUDE_DIR AND ZLIB_LIBRARY)
set (ZLIB_FOUND TRUE)
- get_filename_component (ZLIB_LIBS ${ZLIB_LIBRARIES} PATH )
set (ZLIB_HEADER_NAME zlib.h)
set (ZLIB_HEADER ${ZLIB_INCLUDE_DIR}/${ZLIB_HEADER_NAME})
- set (ZLIB_STATIC_LIB
${ZLIB_LIBS}/${CMAKE_STATIC_LIBRARY_PREFIX}${ZLIB_STATIC_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX})
else ()
set (ZLIB_FOUND FALSE)
endif ()
if (ZLIB_FOUND)
message (STATUS "Found the ZLIB header: ${ZLIB_HEADER}")
- message (STATUS "Found the ZLIB library: ${ZLIB_STATIC_LIB}")
+ message (STATUS "Found the ZLIB library: ${ZLIB_LIBRARY}")
+ if (ZLIB_STATIC_LIB)
+ message (STATUS "Found the ZLIB static library: ${ZLIB_STATIC_LIB}")
+ endif ()
else()
if (_zlib_path)
set (ZLIB_ERR_MSG "Could not find ZLIB. Looked in ${_zlib_path}.")
@@ -66,6 +71,5 @@ endif()
mark_as_advanced (
ZLIB_INCLUDE_DIR
ZLIB_STATIC_LIB
- ZLIB_LIBS
- ZLIB_LIBRARIES
+ ZLIB_LIBRARY
)
diff --git a/cmake_modules/FindZSTD.cmake b/cmake_modules/FindZSTD.cmake
index e088976..02c5889 100644
--- a/cmake_modules/FindZSTD.cmake
+++ b/cmake_modules/FindZSTD.cmake
@@ -13,7 +13,7 @@
# ZSTD_HOME environmental variable is used to check for Zstd headers and
static library
# ZSTD_INCLUDE_DIR: directory containing headers
-# ZSTD_LIBS: directory containing zstd libraries
+# ZSTD_LIBRARY: path to libzstd
# ZSTD_STATIC_LIB: path to libzstd.a
# ZSTD_FOUND: whether zstd has been found
@@ -23,32 +23,33 @@ endif()
message (STATUS "ZSTD_HOME: ${ZSTD_HOME}")
-if (NOT ZSTD_STATIC_LIB_NAME)
- set (ZSTD_STATIC_LIB_NAME ${CMAKE_STATIC_LIBRARY_PREFIX}zstd)
-endif()
-
find_path (ZSTD_INCLUDE_DIR zstd.h HINTS
${_zstd_path}
NO_DEFAULT_PATH
PATH_SUFFIXES "include")
-find_library (ZSTD_LIBRARIES NAMES ${ZSTD_STATIC_LIB_NAME} HINTS
+find_library (ZSTD_LIBRARY NAMES zstd HINTS
+ ${_zstd_path}
+ PATH_SUFFIXES "lib")
+
+find_library (ZSTD_STATIC_LIB NAMES
${CMAKE_STATIC_LIBRARY_PREFIX}zstd${CMAKE_STATIC_LIBRARY_SUFFIX} HINTS
${_zstd_path}
PATH_SUFFIXES "lib")
-if (ZSTD_INCLUDE_DIR AND ZSTD_LIBRARIES)
+if (ZSTD_INCLUDE_DIR AND ZSTD_LIBRARY)
set (ZSTD_FOUND TRUE)
- get_filename_component (ZSTD_LIBS ${ZSTD_LIBRARIES} PATH)
set (ZSTD_HEADER_NAME zstd.h)
set (ZSTD_HEADER ${ZSTD_INCLUDE_DIR}/${ZSTD_HEADER_NAME})
- set (ZSTD_STATIC_LIB
${ZSTD_LIBS}/${ZSTD_STATIC_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX})
else ()
set (ZSTD_FOUND FALSE)
endif ()
if (ZSTD_FOUND)
message (STATUS "Found the zstd header: ${ZSTD_HEADER}")
- message (STATUS "Found the zstd library: ${ZSTD_STATIC_LIB}")
+ message (STATUS "Found the zstd library: ${ZSTD_LIBRARY}")
+ if (ZSTD_STATIC_LIB)
+ message (STATUS "Found the zstd static library: ${ZSTD_STATIC_LIB}")
+ endif ()
else()
if (_ZSTD_path)
set (ZSTD_ERR_MSG "Could not find zstd. Looked in ${_zstd_path}.")
@@ -66,6 +67,5 @@ endif()
mark_as_advanced (
ZSTD_INCLUDE_DIR
ZSTD_STATIC_LIB
- ZSTD_LIBS
- ZSTD_LIBRARIES
+ ZSTD_LIBRARY
)
diff --git a/cmake_modules/ThirdpartyToolchain.cmake
b/cmake_modules/ThirdpartyToolchain.cmake
index 3a35325..f3e1089 100644
--- a/cmake_modules/ThirdpartyToolchain.cmake
+++ b/cmake_modules/ThirdpartyToolchain.cmake
@@ -17,6 +17,13 @@ set(GTEST_VERSION "1.8.0")
set(PROTOBUF_VERSION "3.5.1")
set(ZSTD_VERSION "1.4.5")
+option(ORC_PREFER_STATIC_PROTOBUF "Prefer static protobuf library, if
available" ON)
+option(ORC_PREFER_STATIC_SNAPPY "Prefer static snappy library, if available"
ON)
+option(ORC_PREFER_STATIC_LZ4 "Prefer static lz4 library, if available"
ON)
+option(ORC_PREFER_STATIC_ZSTD "Prefer static zstd library, if available"
ON)
+option(ORC_PREFER_STATIC_ZLIB "Prefer static zlib library, if available"
ON)
+option(ORC_PREFER_STATIC_GMOCK "Prefer static gmock library, if available"
ON)
+
# zstd requires us to add the threads
FIND_PACKAGE(Threads REQUIRED)
@@ -75,15 +82,21 @@ else ()
${THIRDPARTY_LOG_OPTIONS}
BUILD_BYPRODUCTS "${SNAPPY_STATIC_LIB}")
+ set(SNAPPY_LIBRARY ${SNAPPY_STATIC_LIB})
set(SNAPPY_VENDORED TRUE)
endif ()
-include_directories (SYSTEM ${SNAPPY_INCLUDE_DIR})
-add_library (snappy STATIC IMPORTED)
-set_target_properties (snappy PROPERTIES IMPORTED_LOCATION
${SNAPPY_STATIC_LIB})
+add_library (orc_snappy INTERFACE)
+add_library (orc::snappy ALIAS orc_snappy)
+if (ORC_PREFER_STATIC_SNAPPY AND ${SNAPPY_STATIC_LIB})
+ target_link_libraries(orc_snappy INTERFACE ${SNAPPY_STATIC_LIB})
+else ()
+ target_link_libraries(orc_snappy INTERFACE ${SNAPPY_LIBRARY})
+endif ()
+target_include_directories (orc_snappy SYSTEM INTERFACE ${SNAPPY_INCLUDE_DIR})
if (SNAPPY_VENDORED)
- add_dependencies (snappy snappy_ep)
+ add_dependencies (orc_snappy snappy_ep)
if (INSTALL_VENDORED_LIBS)
install(FILES "${SNAPPY_STATIC_LIB}"
DESTINATION "lib")
@@ -117,15 +130,21 @@ else ()
${THIRDPARTY_LOG_OPTIONS}
BUILD_BYPRODUCTS "${ZLIB_STATIC_LIB}")
+ set(ZLIB_LIBRARY ${ZLIB_STATIC_LIB})
set(ZLIB_VENDORED TRUE)
endif ()
-include_directories (SYSTEM ${ZLIB_INCLUDE_DIR})
-add_library (zlib STATIC IMPORTED)
-set_target_properties (zlib PROPERTIES IMPORTED_LOCATION ${ZLIB_STATIC_LIB})
+add_library (orc_zlib INTERFACE)
+add_library (orc::zlib ALIAS orc_zlib)
+if (ORC_PREFER_STATIC_ZLIB AND ${ZLIB_STATIC_LIB})
+ target_link_libraries (orc_zlib INTERFACE ${ZLIB_LIBRARY})
+else ()
+ target_link_libraries (orc_zlib INTERFACE ${ZLIB_STATIC_LIB})
+endif ()
+target_include_directories (orc_zlib SYSTEM INTERFACE ${ZLIB_INCLUDE_DIR})
if (ZLIB_VENDORED)
- add_dependencies (zlib zlib_ep)
+ add_dependencies (orc_zlib zlib_ep)
if (INSTALL_VENDORED_LIBS)
install(FILES "${ZLIB_STATIC_LIB}"
DESTINATION "lib")
@@ -166,15 +185,21 @@ else ()
${THIRDPARTY_LOG_OPTIONS}
BUILD_BYPRODUCTS ${ZSTD_STATIC_LIB})
+ set(ZSTD_LIBRARY ${ZSTD_STATIC_LIB})
set(ZSTD_VENDORED TRUE)
endif ()
-include_directories (SYSTEM ${ZSTD_INCLUDE_DIR})
-add_library (zstd STATIC IMPORTED)
-set_target_properties (zstd PROPERTIES IMPORTED_LOCATION ${ZSTD_STATIC_LIB})
+add_library (orc_zstd INTERFACE)
+add_library (orc::zstd ALIAS orc_zstd)
+if (ORC_PREFER_STATIC_ZSTD AND ${ZSTD_STATIC_LIB})
+ target_link_libraries (orc_zstd INTERFACE ${ZSTD_STATIC_LIB})
+else ()
+ target_link_libraries (orc_zstd INTERFACE ${ZSTD_LIBRARY})
+endif ()
+target_include_directories (orc_zstd SYSTEM INTERFACE ${ZSTD_INCLUDE_DIR})
if (ZSTD_VENDORED)
- add_dependencies (zstd zstd_ep)
+ add_dependencies (orc_zstd zstd_ep)
if (INSTALL_VENDORED_LIBS)
install(FILES "${ZSTD_STATIC_LIB}"
DESTINATION "lib")
@@ -208,15 +233,21 @@ else ()
${THIRDPARTY_LOG_OPTIONS}
BUILD_BYPRODUCTS ${LZ4_STATIC_LIB})
+ set(LZ4_LIBRARY ${LZ4_STATIC_LIB})
set(LZ4_VENDORED TRUE)
endif ()
-include_directories (SYSTEM ${LZ4_INCLUDE_DIR})
-add_library (lz4 STATIC IMPORTED)
-set_target_properties (lz4 PROPERTIES IMPORTED_LOCATION ${LZ4_STATIC_LIB})
+add_library (orc_lz4 INTERFACE)
+add_library (orc::lz4 ALIAS orc_lz4)
+if (ORC_PREFER_STATIC_LZ4 AND ${LZ4_STATIC_LIB})
+ target_link_libraries (orc_lz4 INTERFACE ${LZ4_STATIC_LIB})
+else ()
+ target_link_libraries (orc_lz4 INTERFACE ${LZ4_LIBRARY})
+endif ()
+target_include_directories (orc_lz4 SYSTEM INTERFACE ${LZ4_INCLUDE_DIR})
if (LZ4_VENDORED)
- add_dependencies (lz4 lz4_ep)
+ add_dependencies (orc_lz4 lz4_ep)
if (INSTALL_VENDORED_LIBS)
install(FILES "${LZ4_STATIC_LIB}"
DESTINATION "lib")
@@ -267,21 +298,33 @@ if (BUILD_CPP_TESTS)
CMAKE_ARGS ${GTEST_CMAKE_ARGS}
BUILD_BYPRODUCTS "${GMOCK_STATIC_LIB}")
+ set(GMOCK_LIBRARY ${GMOCK_STATIC_LIB})
set(GTEST_VENDORED TRUE)
endif ()
- include_directories (SYSTEM ${GTEST_INCLUDE_DIR})
-
- add_library (gmock STATIC IMPORTED)
- set_target_properties (gmock PROPERTIES IMPORTED_LOCATION
${GMOCK_STATIC_LIB})
+ # This is a bit special cased because gmock requires gtest and some
+ # distributions statically link gtest inside the gmock shared lib
+ add_library (orc_gmock INTERFACE)
+ add_library (orc::gmock ALIAS orc_gmock)
+ if (ORC_PREFER_STATIC_GMOCK AND ${GMOCK_STATIC_LIB})
+ target_link_libraries (orc_gmock INTERFACE ${GMOCK_STATIC_LIB})
+ if (NOT "${GTEST_STATIC_LIB}" STREQUAL "")
+ target_link_libraries (orc_gmock INTERFACE ${GTEST_STATIC_LIB})
+ endif ()
+ else ()
+ target_link_libraries (orc_gmock INTERFACE ${GMOCK_LIBRARY})
+ if (NOT "${GTEST_LIBRARY}" STREQUAL "")
+ target_link_libraries (orc_gmock INTERFACE ${GTEST_LIBRARY})
+ endif ()
+ endif ()
+ target_include_directories (orc_gmock SYSTEM INTERFACE ${GTEST_INCLUDE_DIR})
if (GTEST_VENDORED)
- add_dependencies (gmock googletest_ep)
+ add_dependencies (orc_gmock googletest_ep)
endif ()
- set(GTEST_LIBRARIES gmock)
if (NOT APPLE AND NOT MSVC)
- list (APPEND GTEST_LIBRARIES pthread)
+ target_link_libraries (orc_gmock INTERFACE Threads::Threads)
endif ()
endif ()
@@ -322,20 +365,33 @@ else ()
${THIRDPARTY_LOG_OPTIONS}
BUILD_BYPRODUCTS "${PROTOBUF_STATIC_LIB}" "${PROTOC_STATIC_LIB}")
+ set(PROTOBUF_LIBRARY ${PROTOBUF_STATIC_LIB})
+ set(PROTOC_LIBRARY ${PROTOC_STATIC_LIB})
set(PROTOBUF_VENDORED TRUE)
endif ()
-include_directories (SYSTEM ${PROTOBUF_INCLUDE_DIR})
+add_library (orc_protobuf INTERFACE)
+add_library (orc::protobuf ALIAS orc_protobuf)
+add_library (orc_protoc INTERFACE)
+add_library (orc::protoc ALIAS orc_protoc)
-add_library (protobuf STATIC IMPORTED)
-set_target_properties (protobuf PROPERTIES IMPORTED_LOCATION
${PROTOBUF_STATIC_LIB})
+if (ORC_PREFER_STATIC_PROTOBUF AND ${PROTOBUF_STATIC_LIB})
+ target_link_libraries (orc_protobuf INTERFACE ${PROTOBUF_STATIC_LIB})
+else ()
+ target_link_libraries (orc_protobuf INTERFACE ${PROTOBUF_LIBRARY})
+endif()
+target_include_directories (orc_protobuf SYSTEM INTERFACE
${PROTOBUF_INCLUDE_DIR})
-add_library (protoc STATIC IMPORTED)
-set_target_properties (protoc PROPERTIES IMPORTED_LOCATION
${PROTOC_STATIC_LIB})
+if (ORC_PREFER_STATIC_PROTOBUF AND ${PROTOC_STATIC_LIB})
+ target_link_libraries (orc_protoc INTERFACE ${PROTOC_STATIC_LIB})
+else ()
+ target_link_libraries (orc_protoc INTERFACE ${PROTOC_LIBRARY})
+endif()
+target_include_directories (orc_protoc SYSTEM INTERFACE
${PROTOBUF_INCLUDE_DIR})
if (PROTOBUF_VENDORED)
- add_dependencies (protoc protobuf_ep)
- add_dependencies (protobuf protobuf_ep)
+ add_dependencies (orc_protoc protobuf_ep)
+ add_dependencies (orc_protobuf protobuf_ep)
if (INSTALL_VENDORED_LIBS)
install(FILES "${PROTOBUF_STATIC_LIB}" "${PROTOC_STATIC_LIB}"
DESTINATION "lib")
@@ -371,7 +427,7 @@ if(BUILD_LIBHDFSPP)
-DBUILD_SHARED_HDFSPP=FALSE)
ExternalProject_Add (libhdfspp_ep
- DEPENDS protobuf
+ DEPENDS orc::protobuf
URL ${LIBHDFSPP_SRC_URL}
LOG_DOWNLOAD 0
LOG_CONFIGURE 0
diff --git a/tools/src/CMakeLists.txt b/tools/src/CMakeLists.txt
index f5a53ca..4b6768c 100644
--- a/tools/src/CMakeLists.txt
+++ b/tools/src/CMakeLists.txt
@@ -22,7 +22,6 @@ include_directories (
${PROJECT_BINARY_DIR}/c++/include
${PROJECT_SOURCE_DIR}/c++/src
${PROJECT_BINARY_DIR}/c++/src
- ${PROTOBUF_INCLUDE_DIR}
)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g ${CXX11_FLAGS} ${WARN_FLAGS}")
@@ -51,7 +50,7 @@ add_executable (orc-metadata
target_link_libraries (orc-metadata
orc
- protobuf
+ orc::protobuf
${CMAKE_THREAD_LIBS_INIT}
)
diff --git a/tools/test/CMakeLists.txt b/tools/test/CMakeLists.txt
index 505fc8d..29f54cb 100644
--- a/tools/test/CMakeLists.txt
+++ b/tools/test/CMakeLists.txt
@@ -16,9 +16,6 @@ include_directories(
${PROJECT_SOURCE_DIR}/tools-c++/src
${PROJECT_BINARY_DIR}/c++/include
${PROJECT_BINARY_DIR}/c++/src
- ${PROTOBUF_INCLUDE_DIR}
- ${ZLIB_INCLUDE_DIR}
- ${GTEST_INCLUDE_DIR}
)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX11_FLAGS} ${WARN_FLAGS}")
@@ -36,10 +33,10 @@ add_executable (tool-test
target_link_libraries (tool-test
orc
- protobuf
- zlib
- snappy
- ${GTEST_LIBRARIES}
+ orc::protobuf
+ orc::zlib
+ orc::snappy
+ orc::gmock
)
if (TEST_VALGRIND_MEMCHECK)