Skip to content

Commit

Permalink
GH-36479: [C++][FlightRPC] Use gRPC version detected by find_package() (
Browse files Browse the repository at this point in the history
#36581)

### Rationale for this change

We don't need to use `try_compile()` by using gRPC version detected by `find_package()`.

### What changes are included in this PR?

Use  gRPC version detected by `find_package()`.

### Are these changes tested?

Yes.

### Are there any user-facing changes?

No.
* Closes: #36479

Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
  • Loading branch information
kou committed Jul 10, 2023
1 parent d9f6e0e commit 2a2c253
Show file tree
Hide file tree
Showing 9 changed files with 22 additions and 267 deletions.
1 change: 0 additions & 1 deletion ci/scripts/cpp_build.sh
Expand Up @@ -109,7 +109,6 @@ cmake \
-DARROW_EXTRA_ERROR_CONTEXT=${ARROW_EXTRA_ERROR_CONTEXT:-OFF} \
-DARROW_FILESYSTEM=${ARROW_FILESYSTEM:-ON} \
-DARROW_FLIGHT=${ARROW_FLIGHT:-OFF} \
-DARROW_FLIGHT_REQUIRE_TLSCREDENTIALSOPTIONS=${ARROW_FLIGHT_REQUIRE_TLSCREDENTIALSOPTIONS:-OFF} \
-DARROW_FLIGHT_SQL=${ARROW_FLIGHT_SQL:-OFF} \
-DARROW_FUZZING=${ARROW_FUZZING:-OFF} \
-DARROW_GANDIVA_PC_CXX_FLAGS=${ARROW_GANDIVA_PC_CXX_FLAGS:-} \
Expand Down
5 changes: 4 additions & 1 deletion cpp/cmake_modules/FindgRPCAlt.cmake
Expand Up @@ -33,8 +33,10 @@ pkg_check_modules(GRPCPP_PC grpc++)
if(GRPCPP_PC_FOUND)
set(gRPCAlt_VERSION "${GRPCPP_PC_VERSION}")
set(GRPCPP_INCLUDE_DIRECTORIES ${GRPCPP_PC_INCLUDEDIR})
# gRPC's pkg-config file neglects to specify pthreads.
find_package(Threads REQUIRED)
if(ARROW_GRPC_USE_SHARED)
set(GRPCPP_LINK_LIBRARIES ${GRPCPP_PC_LINK_LIBRARIES})
set(GRPCPP_LINK_LIBRARIES ${GRPCPP_PC_LINK_LIBRARIES} Threads::Threads)
set(GRPCPP_LINK_OPTIONS ${GRPCPP_PC_LDFLAGS_OTHER})
set(GRPCPP_COMPILE_OPTIONS ${GRPCPP_PC_CFLAGS_OTHER})
else()
Expand All @@ -45,6 +47,7 @@ if(GRPCPP_PC_FOUND)
HINTS ${GRPCPP_PC_STATIC_LIBRARY_DIRS})
list(APPEND GRPCPP_LINK_LIBRARIES "${GRPCPP_LIBRARY_${GRPCPP_LIBRARY_NAME}}")
endforeach()
list(APPEND GRPCPP_LINK_LIBRARIES Threads::Threads)
set(GRPCPP_LINK_OPTIONS ${GRPCPP_PC_STATIC_LDFLAGS_OTHER})
set(GRPCPP_COMPILE_OPTIONS ${GRPCPP_PC_STATIC_CFLAGS_OTHER})
endif()
Expand Down
9 changes: 8 additions & 1 deletion cpp/cmake_modules/ThirdpartyToolchain.cmake
Expand Up @@ -3971,7 +3971,7 @@ macro(build_grpc)
endmacro()

if(ARROW_WITH_GRPC)
set(ARROW_GRPC_REQUIRED_VERSION "1.17.0")
set(ARROW_GRPC_REQUIRED_VERSION "1.30.0")
if(NOT Protobuf_SOURCE STREQUAL gRPC_SOURCE)
# ARROW-15495: Protobuf/gRPC must come from the same source
message(STATUS "Forcing gRPC_SOURCE to Protobuf_SOURCE (${Protobuf_SOURCE})")
Expand All @@ -3986,10 +3986,17 @@ if(ARROW_WITH_GRPC)
grpc++)

if(GRPC_VENDORED)
# Remove "v" from "vX.Y.Z"
string(SUBSTRING ${ARROW_GRPC_BUILD_VERSION} 1 -1 ARROW_GRPC_VERSION)
set(GRPCPP_PP_INCLUDE TRUE)
# Examples need to link to static Arrow if we're using static gRPC
set(ARROW_GRPC_USE_SHARED OFF)
else()
if(gRPCAlt_VERSION)
set(ARROW_GRPC_VERSION ${gRPCAlt_VERSION})
else()
set(ARROW_GRPC_VERSION ${gRPC_VERSION})
endif()
# grpc++ headers may reside in ${GRPC_INCLUDE_DIR}/grpc++ or ${GRPC_INCLUDE_DIR}/grpcpp
# depending on the gRPC version.
get_target_property(GRPC_INCLUDE_DIR gRPC::grpc++ INTERFACE_INCLUDE_DIRECTORIES)
Expand Down
83 changes: 10 additions & 73 deletions cpp/src/arrow/flight/CMakeLists.txt
Expand Up @@ -102,84 +102,21 @@ set(CMAKE_CXX_FLAGS_BACKUP "${CMAKE_CXX_FLAGS}")
string(REPLACE "/WX" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REPLACE "-Werror " " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")

# Probe the version of gRPC being used to see if it supports disabling server
# verification when using TLS.
# gRPC's pkg-config file neglects to specify pthreads.
find_package(Threads REQUIRED)
function(test_grpc_version DST_VAR DETECT_VERSION TEST_FILE)
if(NOT DEFINED ${DST_VAR})
message(STATUS "Checking support for TlsCredentialsOptions (gRPC >= ${DETECT_VERSION})..."
)
get_property(CURRENT_INCLUDE_DIRECTORIES
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
PROPERTY INCLUDE_DIRECTORIES)
# ARROW-13881: when detecting support, avoid mismatch between
# debug flags of gRPC and our probe (which results in LNK2038)
set(CMAKE_TRY_COMPILE_CONFIGURATION ${CMAKE_BUILD_TYPE})
try_compile(HAS_GRPC_VERSION ${CMAKE_CURRENT_BINARY_DIR}/try_compile
SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/try_compile/${TEST_FILE}"
CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${CURRENT_INCLUDE_DIRECTORIES}"
LINK_LIBRARIES gRPC::grpc++ Threads::Threads
OUTPUT_VARIABLE TLS_CREDENTIALS_OPTIONS_CHECK_OUTPUT CXX_STANDARD 11)
if(HAS_GRPC_VERSION)
set(${DST_VAR}
"${DETECT_VERSION}"
CACHE INTERNAL "The detected (approximate) gRPC version.")
else()
message(STATUS "TlsCredentialsOptions (for gRPC ${DETECT_VERSION}) not found in grpc::experimental."
)
if(ARROW_FLIGHT_REQUIRE_TLSCREDENTIALSOPTIONS)
message(WARNING "Build output:")
list(APPEND CMAKE_MESSAGE_INDENT "${TEST_FILE}: ")
message(WARNING ${TLS_CREDENTIALS_OPTIONS_CHECK_OUTPUT})
list(REMOVE_AT CMAKE_MESSAGE_INDENT -1)
else()
message(DEBUG "Build output:")
list(APPEND CMAKE_MESSAGE_INDENT "${TEST_FILE}: ")
message(DEBUG ${TLS_CREDENTIALS_OPTIONS_CHECK_OUTPUT})
list(REMOVE_AT CMAKE_MESSAGE_INDENT -1)
endif()
endif()
endif()
endfunction()

if(GRPC_VENDORED)
# v1.35.0 -> 1.35
string(REGEX MATCH "[0-9]+\\.[0-9]+" GRPC_VERSION "${ARROW_GRPC_BUILD_VERSION}")
else()
test_grpc_version(GRPC_VERSION "1.43" "check_tls_opts_143.cc")
test_grpc_version(GRPC_VERSION "1.36" "check_tls_opts_136.cc")
test_grpc_version(GRPC_VERSION "1.34" "check_tls_opts_134.cc")
test_grpc_version(GRPC_VERSION "1.32" "check_tls_opts_132.cc")
test_grpc_version(GRPC_VERSION "1.27" "check_tls_opts_127.cc")
message(STATUS "Found approximate gRPC version: ${GRPC_VERSION} (ARROW_FLIGHT_REQUIRE_TLSCREDENTIALSOPTIONS=${ARROW_FLIGHT_REQUIRE_TLSCREDENTIALSOPTIONS})"
)
endif()
if(GRPC_VERSION EQUAL "1.27")
add_definitions(-DGRPC_NAMESPACE_FOR_TLS_CREDENTIALS_OPTIONS=grpc_impl::experimental)
elseif(GRPC_VERSION EQUAL "1.32")
add_definitions(-DGRPC_NAMESPACE_FOR_TLS_CREDENTIALS_OPTIONS=grpc::experimental)
elseif(GRPC_VERSION EQUAL "1.34" OR GRPC_VERSION EQUAL "1.35")
if(ARROW_GRPC_VERSION VERSION_GREATER_EQUAL "1.43")
add_definitions(-DGRPC_USE_TLS_CHANNEL_CREDENTIALS_OPTIONS
-DGRPC_USE_TLS_CHANNEL_CREDENTIALS_OPTIONS_ROOT_CERTS
-DGRPC_NAMESPACE_FOR_TLS_CREDENTIALS_OPTIONS=grpc::experimental)
elseif(GRPC_VERSION EQUAL "1.36")
-DGRPC_NAMESPACE_FOR_TLS_CREDENTIALS_OPTIONS=grpc::experimental
-DGRPC_USE_CERTIFICATE_VERIFIER)
elseif(ARROW_GRPC_VERSION VERSION_GREATER_EQUAL "1.36")
add_definitions(-DGRPC_USE_TLS_CHANNEL_CREDENTIALS_OPTIONS
-DGRPC_NAMESPACE_FOR_TLS_CREDENTIALS_OPTIONS=grpc::experimental)
elseif((GRPC_VERSION EQUAL "1.43") OR (GRPC_VERSION EQUAL "1.46"))
# 1.46 is the bundled version
elseif(ARROW_GRPC_VERSION VERSION_GREATER_EQUAL "1.34")
add_definitions(-DGRPC_USE_TLS_CHANNEL_CREDENTIALS_OPTIONS
-DGRPC_NAMESPACE_FOR_TLS_CREDENTIALS_OPTIONS=grpc::experimental
-DGRPC_USE_CERTIFICATE_VERIFIER)
-DGRPC_USE_TLS_CHANNEL_CREDENTIALS_OPTIONS_ROOT_CERTS
-DGRPC_NAMESPACE_FOR_TLS_CREDENTIALS_OPTIONS=grpc::experimental)
elseif(ARROW_GRPC_VERSION VERSION_GREATER_EQUAL "1.32")
add_definitions(-DGRPC_NAMESPACE_FOR_TLS_CREDENTIALS_OPTIONS=grpc::experimental)
else()
message(STATUS "A proper version of gRPC could not be found to support TlsCredentialsOptions in Arrow Flight."
)
message(STATUS "You may need a newer version of gRPC (>= 1.27), or the gRPC API has changed and Flight must be updated to match."
)
if(ARROW_FLIGHT_REQUIRE_TLSCREDENTIALSOPTIONS)
message(FATAL_ERROR "Halting build since ARROW_FLIGHT_REQUIRE_TLSCREDENTIALSOPTIONS is set."
)
endif()
add_definitions(-DGRPC_NAMESPACE_FOR_TLS_CREDENTIALS_OPTIONS=grpc_impl::experimental)
endif()

# </KLUDGE> Restore the CXXFLAGS that were modified above
Expand Down
36 changes: 0 additions & 36 deletions cpp/src/arrow/flight/try_compile/check_tls_opts_127.cc

This file was deleted.

36 changes: 0 additions & 36 deletions cpp/src/arrow/flight/try_compile/check_tls_opts_132.cc

This file was deleted.

44 changes: 0 additions & 44 deletions cpp/src/arrow/flight/try_compile/check_tls_opts_134.cc

This file was deleted.

38 changes: 0 additions & 38 deletions cpp/src/arrow/flight/try_compile/check_tls_opts_136.cc

This file was deleted.

37 changes: 0 additions & 37 deletions cpp/src/arrow/flight/try_compile/check_tls_opts_143.cc

This file was deleted.

0 comments on commit 2a2c253

Please sign in to comment.