You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by we...@apache.org on 2016/12/28 15:54:42 UTC
arrow git commit: ARROW-330: CMake functions to simplify shared /
static library configuration
Repository: arrow
Updated Branches:
refs/heads/master cfbdb6800 -> 8aab00ee1
ARROW-330: CMake functions to simplify shared / static library configuration
This also fixes ARROW-303
Author: Uwe L. Korn <uw...@xhochy.com>
Closes #255 from xhochy/ARROW-330 and squashes the following commits:
a495d16 [Uwe L. Korn] Fix linking order
17131c9 [Uwe L. Korn] ARROW-330: CMake functions to simplify shared / static library configuration
Project: http://git-wip-us.apache.org/repos/asf/arrow/repo
Commit: http://git-wip-us.apache.org/repos/asf/arrow/commit/8aab00ee
Tree: http://git-wip-us.apache.org/repos/asf/arrow/tree/8aab00ee
Diff: http://git-wip-us.apache.org/repos/asf/arrow/diff/8aab00ee
Branch: refs/heads/master
Commit: 8aab00ee16d9dfe7ed578c8dbe59761eaa68670f
Parents: cfbdb68
Author: Uwe L. Korn <uw...@xhochy.com>
Authored: Wed Dec 28 10:54:27 2016 -0500
Committer: Wes McKinney <we...@twosigma.com>
Committed: Wed Dec 28 10:54:27 2016 -0500
----------------------------------------------------------------------
cpp/CMakeLists.txt | 54 ++----------------
cpp/cmake_modules/BuildUtils.cmake | 77 ++++++++++++++++++++++++++
cpp/src/arrow/io/CMakeLists.txt | 97 +++++++++++++++++----------------
cpp/src/arrow/io/memory.h | 2 +-
cpp/src/arrow/ipc/CMakeLists.txt | 67 ++++++++++-------------
5 files changed, 164 insertions(+), 133 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/arrow/blob/8aab00ee/cpp/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt
index 47b7671..bf30543 100644
--- a/cpp/CMakeLists.txt
+++ b/cpp/CMakeLists.txt
@@ -717,61 +717,19 @@ set(ARROW_SRCS
src/arrow/util/bit-util.cc
)
-add_library(arrow_objlib OBJECT
- ${ARROW_SRCS}
-)
-
-# Necessary to make static linking into other shared libraries work properly
-set_property(TARGET arrow_objlib PROPERTY POSITION_INDEPENDENT_CODE 1)
-
if(NOT APPLE)
# Localize thirdparty symbols using a linker version script. This hides them
# from the client application. The OS X linker does not support the
# version-script option.
- set(SHARED_LINK_FLAGS "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/src/arrow/symbols.map")
-endif()
-
-if (ARROW_BUILD_SHARED)
- add_library(arrow_shared SHARED $<TARGET_OBJECTS:arrow_objlib>)
- if(APPLE)
- set_target_properties(arrow_shared PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
- endif()
- set_target_properties(arrow_shared
- PROPERTIES
- LIBRARY_OUTPUT_DIRECTORY "${BUILD_OUTPUT_ROOT_DIRECTORY}"
- LINK_FLAGS "${SHARED_LINK_FLAGS}"
- OUTPUT_NAME "arrow")
- target_link_libraries(arrow_shared
- LINK_PUBLIC ${ARROW_LINK_LIBS}
- LINK_PRIVATE ${ARROW_PRIVATE_LINK_LIBS})
-
- install(TARGETS arrow_shared
- LIBRARY DESTINATION lib
- ARCHIVE DESTINATION lib)
+ set(ARROW_SHARED_LINK_FLAGS "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/src/arrow/symbols.map")
endif()
-if (ARROW_BUILD_STATIC)
- add_library(arrow_static STATIC $<TARGET_OBJECTS:arrow_objlib>)
- set_target_properties(arrow_static
- PROPERTIES
- LIBRARY_OUTPUT_DIRECTORY "${BUILD_OUTPUT_ROOT_DIRECTORY}"
- OUTPUT_NAME "arrow")
+include(BuildUtils)
- target_link_libraries(arrow_static
- LINK_PUBLIC ${ARROW_LINK_LIBS}
- LINK_PRIVATE ${ARROW_PRIVATE_LINK_LIBS})
-
- install(TARGETS arrow_static
- LIBRARY DESTINATION lib
- ARCHIVE DESTINATION lib)
-endif()
-
-if (APPLE)
- set_target_properties(arrow_shared
- PROPERTIES
- BUILD_WITH_INSTALL_RPATH ON
- INSTALL_NAME_DIR "@rpath")
-endif()
+ADD_ARROW_LIB(arrow
+ SOURCES ${ARROW_SRCS}
+ SHARED_LINK_FLAGS ${ARROW_SHARED_LINK_FLAGS}
+)
add_subdirectory(src/arrow)
add_subdirectory(src/arrow/io)
http://git-wip-us.apache.org/repos/asf/arrow/blob/8aab00ee/cpp/cmake_modules/BuildUtils.cmake
----------------------------------------------------------------------
diff --git a/cpp/cmake_modules/BuildUtils.cmake b/cpp/cmake_modules/BuildUtils.cmake
new file mode 100644
index 0000000..b620de5
--- /dev/null
+++ b/cpp/cmake_modules/BuildUtils.cmake
@@ -0,0 +1,77 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+function(ADD_ARROW_LIB LIB_NAME)
+ set(options)
+ set(one_value_args SHARED_LINK_FLAGS)
+ set(multi_value_args SOURCES STATIC_LINK_LIBS STATIC_PRIVATE_LINK_LIBS SHARED_LINK_LIBS SHARED_PRIVATE_LINK_LIBS)
+ cmake_parse_arguments(ARG "${options}" "${one_value_args}" "${multi_value_args}" ${ARGN})
+ if(ARG_UNPARSED_ARGUMENTS)
+ message(SEND_ERROR "Error: unrecognized arguments: ${ARG_UNPARSED_ARGUMENTS}")
+ endif()
+
+ add_library(${LIB_NAME}_objlib OBJECT
+ ${ARG_SOURCES}
+ )
+
+ # Necessary to make static linking into other shared libraries work properly
+ set_property(TARGET ${LIB_NAME}_objlib PROPERTY POSITION_INDEPENDENT_CODE 1)
+
+ if (ARROW_BUILD_SHARED)
+ add_library(${LIB_NAME}_shared SHARED $<TARGET_OBJECTS:${LIB_NAME}_objlib>)
+ if(APPLE)
+ set_target_properties(${LIB_NAME}_shared PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
+ endif()
+ set_target_properties(${LIB_NAME}_shared
+ PROPERTIES
+ LIBRARY_OUTPUT_DIRECTORY "${BUILD_OUTPUT_ROOT_DIRECTORY}"
+ LINK_FLAGS "${ARG_SHARED_LINK_FLAGS}"
+ OUTPUT_NAME ${LIB_NAME})
+ target_link_libraries(${LIB_NAME}_shared
+ LINK_PUBLIC ${ARG_SHARED_LINK_LIBS}
+ LINK_PRIVATE ${ARG_SHARED_PRIVATE_LINK_LIBS})
+
+ install(TARGETS ${LIB_NAME}_shared
+ LIBRARY DESTINATION lib
+ ARCHIVE DESTINATION lib)
+ endif()
+
+ if (ARROW_BUILD_STATIC)
+ add_library(${LIB_NAME}_static STATIC $<TARGET_OBJECTS:${LIB_NAME}_objlib>)
+ set_target_properties(${LIB_NAME}_static
+ PROPERTIES
+ LIBRARY_OUTPUT_DIRECTORY "${BUILD_OUTPUT_ROOT_DIRECTORY}"
+ OUTPUT_NAME ${LIB_NAME})
+
+ target_link_libraries(${LIB_NAME}_static
+ LINK_PUBLIC ${ARG_STATIC_LINK_LIBS}
+ LINK_PRIVATE ${ARG_STATIC_PRIVATE_LINK_LIBS})
+
+ install(TARGETS ${LIB_NAME}_static
+ LIBRARY DESTINATION lib
+ ARCHIVE DESTINATION lib)
+ endif()
+
+ if (APPLE)
+ set_target_properties(${LIB_NAME}_shared
+ PROPERTIES
+ BUILD_WITH_INSTALL_RPATH ON
+ INSTALL_NAME_DIR "@rpath")
+ endif()
+
+endfunction()
+
http://git-wip-us.apache.org/repos/asf/arrow/blob/8aab00ee/cpp/src/arrow/io/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/io/CMakeLists.txt b/cpp/src/arrow/io/CMakeLists.txt
index 1e65a1a..b8882e4 100644
--- a/cpp/src/arrow/io/CMakeLists.txt
+++ b/cpp/src/arrow/io/CMakeLists.txt
@@ -18,30 +18,65 @@
# ----------------------------------------------------------------------
# arrow_io : Arrow IO interfaces
+# HDFS thirdparty setup
+if (DEFINED ENV{HADOOP_HOME})
+ set(HADOOP_HOME $ENV{HADOOP_HOME})
+ if (NOT EXISTS "${HADOOP_HOME}/include/hdfs.h")
+ message(STATUS "Did not find hdfs.h in expected location, using vendored one")
+ set(HADOOP_HOME "${THIRDPARTY_DIR}/hadoop")
+ endif()
+else()
+ set(HADOOP_HOME "${THIRDPARTY_DIR}/hadoop")
+endif()
+
+set(HDFS_H_PATH "${HADOOP_HOME}/include/hdfs.h")
+if (NOT EXISTS ${HDFS_H_PATH})
+ message(FATAL_ERROR "Did not find hdfs.h at ${HDFS_H_PATH}")
+endif()
+message(STATUS "Found hdfs.h at: " ${HDFS_H_PATH})
+
+include_directories(SYSTEM "${HADOOP_HOME}/include")
+
+# arrow_io library
if (MSVC)
- set(ARROW_IO_LINK_LIBS
+ set(ARROW_IO_STATIC_LINK_LIBS
+ arrow_static
+ )
+ set(ARROW_IO_SHARED_LINK_LIBS
arrow_shared
)
else()
- set(ARROW_IO_LINK_LIBS
+ set(ARROW_IO_STATIC_LINK_LIBS
+ arrow_static
+ dl
+ )
+ set(ARROW_IO_SHARED_LINK_LIBS
arrow_shared
dl
)
endif()
if (ARROW_BOOST_USE_SHARED)
- set(ARROW_IO_PRIVATE_LINK_LIBS
+ set(ARROW_IO_SHARED_PRIVATE_LINK_LIBS
boost_system_shared
boost_filesystem_shared)
else()
- set(ARROW_IO_PRIVATE_LINK_LIBS
+ set(ARROW_IO_SHARED_PRIVATE_LINK_LIBS
boost_system_static
boost_filesystem_static)
endif()
-set(ARROW_IO_TEST_LINK_LIBS
- arrow_io
- ${ARROW_IO_PRIVATE_LINK_LIBS})
+set(ARROW_IO_STATIC_PRIVATE_LINK_LIBS
+ boost_system_static
+ boost_filesystem_static)
+
+if (ARROW_BUILD_STATIC)
+ set(ARROW_IO_TEST_LINK_LIBS
+ arrow_io_static)
+else()
+ set(ARROW_IO_TEST_LINK_LIBS
+ arrow_io_shared)
+endif()
set(ARROW_IO_SRCS
file.cc
@@ -51,32 +86,6 @@ set(ARROW_IO_SRCS
memory.cc
)
-# HDFS thirdparty setup
-if (DEFINED ENV{HADOOP_HOME})
- set(HADOOP_HOME $ENV{HADOOP_HOME})
- if (NOT EXISTS "${HADOOP_HOME}/include/hdfs.h")
- message(STATUS "Did not find hdfs.h in expected location, using vendored one")
- set(HADOOP_HOME "${THIRDPARTY_DIR}/hadoop")
- endif()
-else()
- set(HADOOP_HOME "${THIRDPARTY_DIR}/hadoop")
-endif()
-
-set(HDFS_H_PATH "${HADOOP_HOME}/include/hdfs.h")
-if (NOT EXISTS ${HDFS_H_PATH})
- message(FATAL_ERROR "Did not find hdfs.h at ${HDFS_H_PATH}")
-endif()
-message(STATUS "Found hdfs.h at: " ${HDFS_H_PATH})
-
-include_directories(SYSTEM "${HADOOP_HOME}/include")
-
-add_library(arrow_io SHARED
- ${ARROW_IO_SRCS}
-)
-target_link_libraries(arrow_io
- LINK_PUBLIC ${ARROW_IO_LINK_LIBS}
- LINK_PRIVATE ${ARROW_IO_PRIVATE_LINK_LIBS})
-
if(NOT APPLE)
# Localize thirdparty symbols using a linker version script. This hides them
# from the client application. The OS X linker does not support the
@@ -84,16 +93,14 @@ if(NOT APPLE)
set(ARROW_IO_LINK_FLAGS "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/symbols.map")
endif()
-SET_TARGET_PROPERTIES(arrow_io PROPERTIES
- LINKER_LANGUAGE CXX
- LINK_FLAGS "${ARROW_IO_LINK_FLAGS}")
-
-if (APPLE)
- set_target_properties(arrow_io
- PROPERTIES
- BUILD_WITH_INSTALL_RPATH ON
- INSTALL_NAME_DIR "@rpath")
-endif()
+ADD_ARROW_LIB(arrow_io
+ SOURCES ${ARROW_IO_SRCS}
+ SHARED_LINK_FLAGS ${ARROW_IO_LINK_FLAGS}
+ SHARED_LINK_LIBS ${ARROW_IO_SHARED_LINK_LIBS}
+ SHARED_PRIVATE_LINK_LIBS ${ARROW_IO_SHARED_PRIVATE_LINK_LIBS}
+ STATIC_LINK_LIBS ${ARROW_IO_STATIC_LINK_LIBS}
+ STATIC_PRIVATE_LINK_LIBS ${ARROW_IO_STATIC_PRIVATE_LINK_LIBS}
+)
ADD_ARROW_TEST(io-file-test)
ARROW_TEST_LINK_LIBRARIES(io-file-test
@@ -115,10 +122,6 @@ install(FILES
memory.h
DESTINATION include/arrow/io)
-install(TARGETS arrow_io
- LIBRARY DESTINATION lib
- ARCHIVE DESTINATION lib)
-
# pkg-config support
configure_file(arrow-io.pc.in
"${CMAKE_CURRENT_BINARY_DIR}/arrow-io.pc"
http://git-wip-us.apache.org/repos/asf/arrow/blob/8aab00ee/cpp/src/arrow/io/memory.h
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/io/memory.h b/cpp/src/arrow/io/memory.h
index b72f93b..2faf280 100644
--- a/cpp/src/arrow/io/memory.h
+++ b/cpp/src/arrow/io/memory.h
@@ -101,7 +101,7 @@ class ARROW_EXPORT BufferReader : public ReadableFileInterface {
public:
explicit BufferReader(const std::shared_ptr<Buffer>& buffer);
BufferReader(const uint8_t* data, int64_t size);
- ~BufferReader();
+ virtual ~BufferReader();
Status Close() override;
Status Tell(int64_t* position) override;
http://git-wip-us.apache.org/repos/asf/arrow/blob/8aab00ee/cpp/src/arrow/ipc/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/ipc/CMakeLists.txt b/cpp/src/arrow/ipc/CMakeLists.txt
index d3e625a..11ca191 100644
--- a/cpp/src/arrow/ipc/CMakeLists.txt
+++ b/cpp/src/arrow/ipc/CMakeLists.txt
@@ -19,17 +19,25 @@
# arrow_ipc
#######################################
-set(ARROW_IPC_LINK_LIBS
- arrow_io
+set(ARROW_IPC_SHARED_LINK_LIBS
+ arrow_io_shared
arrow_shared
)
-set(ARROW_IPC_PRIVATE_LINK_LIBS
- )
+set(ARROW_IPC_STATIC_LINK_LIBS
+ arrow_static
+ arrow_io_static
+)
-set(ARROW_IPC_TEST_LINK_LIBS
- arrow_ipc
- ${ARROW_IPC_PRIVATE_LINK_LIBS})
+if (ARROW_BUILD_STATIC)
+ set(ARROW_IPC_TEST_LINK_LIBS
+ arrow_io_static
+ arrow_ipc_static)
+else()
+ set(ARROW_IPC_TEST_LINK_LIBS
+ arrow_io_shared
+ arrow_ipc_shared)
+endif()
set(ARROW_IPC_SRCS
adapter.cc
@@ -40,20 +48,6 @@ set(ARROW_IPC_SRCS
metadata-internal.cc
)
-# TODO(wesm): SHARED and STATIC targets
-add_library(arrow_ipc SHARED
- ${ARROW_IPC_SRCS}
-)
-if(RAPIDJSON_VENDORED)
- add_dependencies(arrow_ipc rapidjson_ep)
-endif()
-if(FLATBUFFERS_VENDORED)
- add_dependencies(arrow_ipc flatbuffers_ep)
-endif()
-target_link_libraries(arrow_ipc
- LINK_PUBLIC ${ARROW_IPC_LINK_LIBS}
- LINK_PRIVATE ${ARROW_IPC_PRIVATE_LINK_LIBS})
-
if(NOT APPLE)
# Localize thirdparty symbols using a linker version script. This hides them
# from the client application. The OS X linker does not support the
@@ -61,15 +55,18 @@ if(NOT APPLE)
set(ARROW_IPC_LINK_FLAGS "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/symbols.map")
endif()
-SET_TARGET_PROPERTIES(arrow_ipc PROPERTIES
- LINKER_LANGUAGE CXX
- LINK_FLAGS "${ARROW_IPC_LINK_FLAGS}")
+ADD_ARROW_LIB(arrow_ipc
+ SOURCES ${ARROW_IPC_SRCS}
+ SHARED_LINK_FLAGS ${ARROW_IPC_LINK_FLAGS}
+ SHARED_LINK_LIBS ${ARROW_IPC_SHARED_LINK_LIBS}
+ STATIC_LINK_LIBS ${ARROW_IO_SHARED_PRIVATE_LINK_LIBS}
+)
-if (APPLE)
- set_target_properties(arrow_ipc
- PROPERTIES
- BUILD_WITH_INSTALL_RPATH ON
- INSTALL_NAME_DIR "@rpath")
+if(RAPIDJSON_VENDORED)
+ add_dependencies(arrow_ipc_objlib rapidjson_ep)
+endif()
+if(FLATBUFFERS_VENDORED)
+ add_dependencies(arrow_ipc_objlib flatbuffers_ep)
endif()
ADD_ARROW_TEST(ipc-adapter-test)
@@ -93,9 +90,9 @@ ADD_ARROW_TEST(json-integration-test)
if (ARROW_BUILD_TESTS)
if (APPLE)
target_link_libraries(json-integration-test
+ arrow_ipc_static
+ arrow_io_static
arrow_static
- arrow_io
- arrow_ipc
gflags
gtest
boost_filesystem_static
@@ -105,9 +102,9 @@ if (ARROW_BUILD_TESTS)
PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
else()
target_link_libraries(json-integration-test
+ arrow_ipc_static
+ arrow_io_static
arrow_static
- arrow_io
- arrow_ipc
gflags
gtest
pthread
@@ -156,10 +153,6 @@ install(FILES
metadata.h
DESTINATION include/arrow/ipc)
-install(TARGETS arrow_ipc
- LIBRARY DESTINATION lib
- ARCHIVE DESTINATION lib)
-
# pkg-config support
configure_file(arrow-ipc.pc.in
"${CMAKE_CURRENT_BINARY_DIR}/arrow-ipc.pc"