This is an automated email from the ASF dual-hosted git repository.
wesm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/master by this push:
new 5284ad0 ARROW-3331: [Gandiva][C++] Add re2 to toolchain
5284ad0 is described below
commit 5284ad074c774e0bd2eaec7747b6086f428b0490
Author: Pindikura Ravindra <[email protected]>
AuthorDate: Thu Oct 4 06:56:37 2018 -0400
ARROW-3331: [Gandiva][C++] Add re2 to toolchain
Author: Pindikura Ravindra <[email protected]>
Closes #2695 from pravindra/re2 and squashes the following commits:
4408b85e3 <Pindikura Ravindra> ARROW-3331: Add re2 to toolchain
---
cpp/cmake_modules/FindRE2.cmake | 51 +++++++++++++++++------------
cpp/cmake_modules/GandivaBuildUtils.cmake | 10 ++++--
cpp/cmake_modules/ThirdpartyToolchain.cmake | 46 ++++++++++++++++++++++++--
cpp/src/gandiva/CMakeLists.txt | 5 +++
cpp/thirdparty/versions.txt | 1 +
5 files changed, 87 insertions(+), 26 deletions(-)
diff --git a/cpp/cmake_modules/FindRE2.cmake b/cpp/cmake_modules/FindRE2.cmake
index 6450b22..f2a4670 100644
--- a/cpp/cmake_modules/FindRE2.cmake
+++ b/cpp/cmake_modules/FindRE2.cmake
@@ -22,48 +22,57 @@
# This module defines
# RE2_INCLUDE_DIR, directory containing headers
# RE2_STATIC_LIB, path to libre2.a
-# re2 imported static library
# RE2_FOUND, whether re2 has been found
-set(RE2_SEARCH_HEADER_PATHS ${RE2_HOME}/include)
-
-set(RE2_SEARCH_LIB_PATHS ${RE2_HOME}/lib)
+if( NOT "${RE2_HOME}" STREQUAL "")
+ file (TO_CMAKE_PATH "${RE2_HOME}" _re2_path)
+endif()
+message (STATUS "RE2_HOME: ${RE2_HOME}")
find_path(RE2_INCLUDE_DIR re2/re2.h
- PATHS ${RE2_SEARCH_HEADER_PATHS}
- NO_DEFAULT_PATH
+ HINTS ${_re2_path}
+ NO_DEFAULT_PATH
+ PATH_SUFFIXES "include"
DOC "Google's re2 regex header path"
)
-find_library(RE2_LIBS NAMES re2
- PATHS ${RE2_SEARCH_LIB_PATHS}
- NO_DEFAULT_PATH
- DOC "Google's re2 regex library"
-)
+set (lib_dirs "lib")
+if (EXISTS "${_re2_path}/lib64")
+ set (lib_dirs "lib64" ${lib_dirs})
+endif ()
+if (EXISTS "${_re2_path}/lib/${CMAKE_LIBRARY_ARCHITECTURE}")
+ set (lib_dirs "lib/${CMAKE_LIBRARY_ARCHITECTURE}" ${lib_dirs})
+endif ()
find_library(RE2_STATIC_LIB NAMES libre2${CMAKE_STATIC_LIBRARY_SUFFIX}
- PATHS ${RE2_SEARCH_LIB_PATHS}
+ PATHS ${_re2_path}
NO_DEFAULT_PATH
+ PATH_SUFFIXES ${lib_dirs}
DOC "Google's re2 regex static library"
)
message(STATUS ${RE2_INCLUDE_DIR})
-if (NOT RE2_INCLUDE_DIR OR NOT RE2_LIBS OR
- NOT RE2_STATIC_LIB)
+if (NOT RE2_INCLUDE_DIR OR NOT RE2_STATIC_LIB)
set(RE2_FOUND FALSE)
- message(FATAL_ERROR "Re2 includes and libraries NOT found. "
- "Looked for headers in ${RE2_SEARCH_HEADER_PATHS}, "
- "and for libs in ${RE2_SEARCH_LIB_PATHS}")
+ if (_re2_path)
+ set (RE2_ERR_MSG "Could not find re2. Looked in ${_re2_path}.")
+ else ()
+ set (RE2_ERR_MSG "Could not find re2 in system search paths.")
+ endif()
+
+ if (RE2_FIND_REQUIRED)
+ message(FATAL_ERROR "${RE2_ERR_MSG})")
+ else ()
+ message (STATUS "${RE2_ERR_MSG}")
+ endif ()
else()
set(RE2_FOUND TRUE)
- add_library(re2 STATIC IMPORTED)
- set_target_properties(re2 PROPERTIES IMPORTED_LOCATION "${RE2_STATIC_LIB}")
+ message(STATUS "Found the RE2 headers : ${RE2_INCLUDE_DIR}")
+ message(STATUS "Found the RE2 static library : ${RE2_STATIC_LIB}")
endif()
mark_as_advanced(
RE2_INCLUDE_DIR
- RE2_LIBS
RE2_STATIC_LIB
- re2
)
diff --git a/cpp/cmake_modules/GandivaBuildUtils.cmake
b/cpp/cmake_modules/GandivaBuildUtils.cmake
index c247b2b..a1ed48e 100644
--- a/cpp/cmake_modules/GandivaBuildUtils.cmake
+++ b/cpp/cmake_modules/GandivaBuildUtils.cmake
@@ -19,6 +19,7 @@
function(build_gandiva_lib TYPE ARROW)
string(TOUPPER ${TYPE} TYPE_UPPER_CASE)
add_library(gandiva_${TYPE} ${TYPE_UPPER_CASE}
$<TARGET_OBJECTS:gandiva_obj_lib>)
+ add_dependencies(gandiva_${TYPE} arrow_dependencies)
target_include_directories(gandiva_${TYPE}
PUBLIC
@@ -60,9 +61,9 @@ function(build_gandiva_lib TYPE ARROW)
endfunction(build_gandiva_lib TYPE)
set(GANDIVA_TEST_LINK_LIBS
- ${GTEST_STATIC_LIB}
- ${GTEST_MAIN_STATIC_LIB}
- ${RE2_STATIC_LIB})
+ gtest
+ gtest_main
+ re2)
if (PTHREAD_LIBRARY)
set(GANDIVA_TEST_LINK_LIBS
@@ -82,6 +83,9 @@ function(add_gandiva_unit_test REL_TEST_NAME)
target_link_libraries(${TEST_NAME} PRIVATE LLVM::LLVM_INTERFACE)
endif()
+ # Require toolchain to be built
+ add_dependencies(${TEST_NAME} arrow_dependencies)
+
target_include_directories(${TEST_NAME} PRIVATE
${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/src
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake
b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 1c7cd62..2e2f7d1 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake
+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake
@@ -230,6 +230,12 @@ else()
set(PROTOBUF_SOURCE_URL
"https://github.com/protocolbuffers/protobuf/releases/download/${PROTOBUF_VERSION}/protobuf-all-${STRIPPED_PROTOBUF_VERSION}.tar.gz")
endif()
+if (DEFINED ENV{ARROW_RE2_URL})
+ set(RE2_SOURCE_URL "$ENV{ARROW_RE2_URL}")
+else()
+ set(RE2_SOURCE_URL
"https://github.com/google/re2/archive/${RE2_VERSION}.tar.gz")
+endif()
+
set(RAPIDJSON_SOURCE_MD5 "badd12c511e081fec6c89c43a7027bce")
if (DEFINED ENV{ARROW_RAPIDJSON_URL})
set(RAPIDJSON_SOURCE_URL "$ENV{ARROW_RAPIDJSON_URL}")
@@ -1057,11 +1063,47 @@ if (ARROW_WITH_ZSTD)
endif()
endif()
+# ----------------------------------------------------------------------
+# RE2 (required for Gandiva)
+if (ARROW_GANDIVA)
+ # re2
+ if ("${RE2_HOME}" STREQUAL "")
+ set (RE2_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/re2_ep-install")
+ set (RE2_HOME "${RE2_PREFIX}")
+ set (RE2_INCLUDE_DIR "${RE2_PREFIX}/include")
+ set (RE2_STATIC_LIB
"${RE2_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}re2${CMAKE_STATIC_LIBRARY_SUFFIX}")
+
+ set(RE2_CMAKE_ARGS
+ "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
+ "-DCMAKE_CXX_FLAGS=${EP_CXX_FLAGS}"
+ "-DCMAKE_CXX_FLAGS_${UPPERCASE_BUILD_TYPE}=${EP_CXX_FLAGS}"
+ "-DCMAKE_INSTALL_PREFIX=${RE2_PREFIX}")
+ ExternalProject_Add(re2_ep
+ ${EP_LOG_OPTIONS}
+ INSTALL_DIR ${RE2_PREFIX}
+ URL ${RE2_SOURCE_URL}
+ CMAKE_ARGS ${RE2_CMAKE_ARGS}
+ BUILD_BYPRODUCTS "${RE2_STATIC_LIB}")
+ set (RE2_VENDORED 1)
+ else ()
+ find_package (RE2 REQUIRED)
+ set (RE2_VENDORED 0)
+ endif ()
+
+ include_directories (SYSTEM ${RE2_INCLUDE_DIR})
+ ADD_THIRDPARTY_LIB(re2
+ STATIC_LIB ${RE2_STATIC_LIB})
+
+ if (RE2_VENDORED)
+ add_dependencies (arrow_dependencies re2_ep)
+ endif ()
+endif ()
+
# ----------------------------------------------------------------------
-# Protocol Buffers (required for ORC and Flight libraries)
+# Protocol Buffers (required for ORC and Flight and Gandiva libraries)
-if (ARROW_ORC OR ARROW_FLIGHT)
+if (ARROW_ORC OR ARROW_FLIGHT OR ARROW_GANDIVA)
# protobuf
if ("${PROTOBUF_HOME}" STREQUAL "")
set (PROTOBUF_PREFIX "${THIRDPARTY_DIR}/protobuf_ep-install")
diff --git a/cpp/src/gandiva/CMakeLists.txt b/cpp/src/gandiva/CMakeLists.txt
index a22c1cb..91f851f 100644
--- a/cpp/src/gandiva/CMakeLists.txt
+++ b/cpp/src/gandiva/CMakeLists.txt
@@ -71,7 +71,10 @@ set(SRC_FILES annotator.cc
${SHARED_HELPER_FILES}
${BC_FILE_PATH_CC})
+# TODO(wesm): Replace this with ADD_ARROW_LIB which deals with objlib/no-objlib
+# (not supported on Windows), dependencies, etc.
add_library(gandiva_obj_lib OBJECT ${SRC_FILES})
+add_dependencies(gandiva_obj_lib arrow_dependencies)
# set PIC so that object library can be included in shared libs.
set_target_properties(gandiva_obj_lib PROPERTIES POSITION_INDEPENDENT_CODE 1)
@@ -104,6 +107,8 @@ add_library(gandiva_helpers SHARED
${SHARED_HELPER_FILES}
function_holder_stubs.cc)
+add_dependencies(gandiva_helpers arrow_dependencies)
+
target_compile_definitions(gandiva_helpers
PRIVATE -DGDV_HELPERS
)
diff --git a/cpp/thirdparty/versions.txt b/cpp/thirdparty/versions.txt
index 4e96fcc..8fbfb38 100644
--- a/cpp/thirdparty/versions.txt
+++ b/cpp/thirdparty/versions.txt
@@ -35,3 +35,4 @@ SNAPPY_VERSION=1.1.3
THRIFT_VERSION=0.11.0
ZLIB_VERSION=1.2.8
ZSTD_VERSION=v1.2.0
+RE2_VERSION=2018-10-01