Files
MINGW-packages/mingw-w64-arrow/0001-detect-version-script-flag.patch
2021-08-01 11:44:23 +05:30

126 lines
4.9 KiB
Diff

From 1a1758beac0272c49bcfe8c7f404f3c945e6dd2a Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sun, 1 Aug 2021 11:05:28 +0900
Subject: [PATCH] ARROW-13516: [C++] Detect --version-script flag availability
Mingw-w64 + Clang (lld) doesn't support it.
See also: https://github.com/msys2/MINGW-packages/pull/9255
---
cpp/CMakeLists.txt | 20 ++++++++++++++++++++
cpp/src/arrow/CMakeLists.txt | 5 +----
cpp/src/gandiva/CMakeLists.txt | 5 +----
cpp/src/gandiva/jni/CMakeLists.txt | 2 +-
cpp/src/parquet/CMakeLists.txt | 5 +----
cpp/src/plasma/CMakeLists.txt | 5 +----
6 files changed, 25 insertions(+), 17 deletions(-)
diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt
index 78b19ba59308..2bcdc0de1794 100644
--- a/cpp/CMakeLists.txt
+++ b/cpp/CMakeLists.txt
@@ -453,6 +453,26 @@ endif()
include(SetupCxxFlags)
+#
+# Linker flags
+#
+
+# 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.
+if(CMAKE_VERSION VERSION_LESS 3.18)
+ if(APPLE OR WIN32)
+ set(CXX_LINKER_SUPPORTS_VERSION_SCRIPT FALSE)
+ else()
+ set(CXX_LINKER_SUPPORTS_VERSION_SCRIPT TRUE)
+ endif()
+else()
+ include(CheckLinkerFlag)
+ check_linker_flag(CXX
+ "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/src/arrow/symbols.map"
+ CXX_LINKER_SUPPORTS_VERSION_SCRIPT)
+endif()
+
#
# Build output directory
#
diff --git a/cpp/src/arrow/CMakeLists.txt b/cpp/src/arrow/CMakeLists.txt
index cb6e91bd40e1..f13e5b1ef754 100644
--- a/cpp/src/arrow/CMakeLists.txt
+++ b/cpp/src/arrow/CMakeLists.txt
@@ -483,10 +483,7 @@ if(ARROW_ORC)
list(APPEND ARROW_SRCS adapters/orc/adapter.cc adapters/orc/adapter_util.cc)
endif()
-if(NOT APPLE AND NOT MSVC_TOOLCHAIN)
- # 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.
+if(CXX_LINKER_SUPPORTS_VERSION_SCRIPT)
set(ARROW_VERSION_SCRIPT_FLAGS
"-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/symbols.map")
set(ARROW_SHARED_LINK_FLAGS ${ARROW_VERSION_SCRIPT_FLAGS})
diff --git a/cpp/src/gandiva/CMakeLists.txt b/cpp/src/gandiva/CMakeLists.txt
index 08f31ad95546..2da8bb680921 100644
--- a/cpp/src/gandiva/CMakeLists.txt
+++ b/cpp/src/gandiva/CMakeLists.txt
@@ -111,10 +111,7 @@ endif()
# set(GANDIVA_SHARED_LINK_FLAGS "${GANDIVA_SHARED_LINK_FLAGS} /EXPORT:${SYMBOL}")
# endforeach()
# endif()
-if(NOT APPLE AND NOT MSVC_TOOLCHAIN)
- # 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.
+if(CXX_LINKER_SUPPORTS_VERSION_SCRIPT)
set(GANDIVA_VERSION_SCRIPT_FLAGS
"-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/symbols.map")
set(GANDIVA_SHARED_LINK_FLAGS
diff --git a/cpp/src/gandiva/jni/CMakeLists.txt b/cpp/src/gandiva/jni/CMakeLists.txt
index 04fd22eec9ab..046934141f6d 100644
--- a/cpp/src/gandiva/jni/CMakeLists.txt
+++ b/cpp/src/gandiva/jni/CMakeLists.txt
@@ -98,7 +98,7 @@ add_dependencies(gandiva ${GANDIVA_JNI_LIBRARIES})
if(ARROW_BUILD_SHARED)
# filter out everything that is not needed for the jni bridge
# statically linked stdc++ has conflicts with stdc++ loaded by other libraries.
- if(NOT APPLE)
+ if(CXX_LINKER_SUPPORTS_VERSION_SCRIPT)
set_target_properties(gandiva_jni_shared
PROPERTIES LINK_FLAGS
"-Wl,--version-script=${CMAKE_SOURCE_DIR}/src/gandiva/jni/symbols.map"
diff --git a/cpp/src/parquet/CMakeLists.txt b/cpp/src/parquet/CMakeLists.txt
index a487760a03ea..ce4591325473 100644
--- a/cpp/src/parquet/CMakeLists.txt
+++ b/cpp/src/parquet/CMakeLists.txt
@@ -232,10 +232,7 @@ if(NOT PARQUET_MINIMAL_DEPENDENCY)
endif(NOT PARQUET_MINIMAL_DEPENDENCY)
-if(NOT APPLE AND NOT MSVC_TOOLCHAIN)
- # 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.
+if(CXX_LINKER_SUPPORTS_VERSION_SCRIPT)
set(PARQUET_SHARED_LINK_FLAGS
"-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/symbols.map")
endif()
diff --git a/cpp/src/plasma/CMakeLists.txt b/cpp/src/plasma/CMakeLists.txt
index a4e6e72b41b0..46603d6f85cc 100644
--- a/cpp/src/plasma/CMakeLists.txt
+++ b/cpp/src/plasma/CMakeLists.txt
@@ -61,10 +61,7 @@ if(ARROW_CUDA)
add_definitions(-DPLASMA_CUDA)
endif()
-if(NOT APPLE AND NOT MSVC_TOOLCHAIN)
- # 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.
+if(CXX_LINKER_SUPPORTS_VERSION_SCRIPT)
set(PLASMA_SHARED_LINK_FLAGS
"-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/symbols.map")
endif()