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 2019/01/31 17:04:44 UTC

[arrow] branch master updated: ARROW-4431: [C++] Fixes for gRPC vendored builds

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 36e26fe  ARROW-4431: [C++] Fixes for gRPC vendored builds
36e26fe is described below

commit 36e26fe473ab776982a52861bbc6875431abae7c
Author: Wes McKinney <we...@apache.org>
AuthorDate: Thu Jan 31 11:04:36 2019 -0600

    ARROW-4431: [C++] Fixes for gRPC vendored builds
    
    This enables Arrow Flight to build gRPC successfully from ExternalProject both with all dependencies being built from EP or from provided packages via _HOME variables.
    
    Author: Wes McKinney <we...@apache.org>
    
    Closes #3527 from pitrou/grpc-vendored-fixes and squashes the following commits:
    
    fb8fdf33c <Wes McKinney> No more verbose build in CI
    d84b9190e <Wes McKinney> Restore all builds
    c778bece6 <Wes McKinney> Revert vendored Boost changes
    65ac53d63 <Wes McKinney> Revert Boost link order
    d5b8f547d <Wes McKinney> Try removing SYSTEM
    7563955c1 <Wes McKinney> Verbose build again
    1880bfa59 <Wes McKinney> Fix Boost include dir
    dd4f1eb5e <Wes McKinney> debugging
    369f0e520 <Wes McKinney> Use verbose makefile for debugging
    accaeb036 <Wes McKinney> verbose windows build for debugging
    318181333 <Wes McKinney> Use BEFORE SYSTEM with vendored Boost headers
    0a2f9673b <Wes McKinney> More tweaks / fixed
    f2db99a74 <Wes McKinney> Change Boost library include order
    ad994b16d <Wes McKinney> Fix brotli library locations after refactor
    73405450e <Wes McKinney> Fix Brotli headers copy step
    3140b3c6d <Wes McKinney> Quote thirdparty install prefixes, verbose thirdparty build in MSVC
    024a2dca6 <Wes McKinney> Fixes for gRPC vendored builds
---
 .travis.yml                                 |   1 +
 ci/cpp-msvc-build-main.bat                  |   2 +
 cpp/cmake_modules/ThirdpartyToolchain.cmake | 369 ++++++++++++++++++----------
 cpp/src/arrow/flight/CMakeLists.txt         |   4 +-
 cpp/src/arrow/flight/perf-server.cc         |   2 +
 cpp/src/arrow/memory_pool.cc                |   2 +-
 cpp/thirdparty/versions.txt                 |   4 +-
 7 files changed, 254 insertions(+), 130 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 26d3892..c037cd5 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -188,6 +188,7 @@ matrix:
     - ARROW_TRAVIS_GANDIVA=1
     - ARROW_TRAVIS_GANDIVA_JAVA=1
     - ARROW_TRAVIS_OPTIONAL_INSTALL=1
+    - ARROW_TRAVIS_VERBOSE=0
     - ARROW_BUILD_WARNING_LEVEL=CHECKIN
     # ARROW-3803: The Xcode 8.3 image has Boost libraries in /usr/local/lib
     # which can get loaded before the toolchain Boost libraries. These seem to
diff --git a/ci/cpp-msvc-build-main.bat b/ci/cpp-msvc-build-main.bat
index c36c6bd..ccd64e3 100644
--- a/ci/cpp-msvc-build-main.bat
+++ b/ci/cpp-msvc-build-main.bat
@@ -51,6 +51,8 @@ cmake -G "%GENERATOR%" %CMAKE_ARGS% ^
       -DARROW_BUILD_STATIC=OFF ^
       -DARROW_BUILD_TESTS=ON ^
       -DARROW_BUILD_EXAMPLES=ON ^
+      -DARROW_BUILD_EXAMPLES=ON ^
+      -DARROW_VERBOSE_THIRDPARTY_BUILD=ON ^
       -DARROW_CXXFLAGS="%ARROW_CXXFLAGS%" ^
       -DCMAKE_CXX_FLAGS_RELEASE="/MD %CMAKE_CXX_FLAGS_RELEASE%" ^
       -DARROW_PARQUET=ON ^
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 606b476..ce5073f 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake
+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake
@@ -17,6 +17,8 @@
 
 add_custom_target(toolchain)
 
+set(THIRDPARTY_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/arrow_thirdparty")
+
 # ----------------------------------------------------------------------
 # Toolchain linkage options
 
@@ -151,6 +153,18 @@ else()
   set(ARROW_WITH_THRIFT OFF)
 endif()
 
+if (ARROW_FLIGHT)
+  set(ARROW_WITH_GRPC ON)
+endif()
+
+if (ARROW_FLIGHT OR ARROW_IPC)
+  set(ARROW_WITH_RAPIDJSON ON)
+endif()
+
+if (ARROW_ORC OR ARROW_FLIGHT OR ARROW_GANDIVA)
+  set(ARROW_WITH_PROTOBUF ON)
+endif()
+
 # ----------------------------------------------------------------------
 # Versions and URLs for toolchain builds, which also can be used to configure
 # offline builds
@@ -191,6 +205,12 @@ else()
   set(BROTLI_SOURCE_URL "https://github.com/google/brotli/archive/${BROTLI_VERSION}.tar.gz")
 endif()
 
+if (DEFINED ENV{ARROW_CARES_URL})
+  set(CARES_SOURCE_URL "$ENV{ARROW_CARES_URL}")
+else()
+  set(CARES_SOURCE_URL "https://c-ares.haxx.se/download/c-ares-${CARES_VERSION}.tar.gz")
+endif()
+
 if (DEFINED ENV{ARROW_DOUBLE_CONVERSION_URL})
   set(DOUBLE_CONVERSION_SOURCE_URL "$ENV{ARROW_DOUBLE_CONVERSION_URL}")
 else()
@@ -487,7 +507,7 @@ else()
   endif()
 endif()
 
-message(STATUS "Boost include dir: " ${Boost_INCLUDE_DIRS})
+message(STATUS "Boost include dir: " ${Boost_INCLUDE_DIR})
 message(STATUS "Boost libraries: " ${Boost_LIBRARIES})
 
 if (NOT ARROW_BOOST_HEADER_ONLY)
@@ -512,17 +532,17 @@ include_directories(SYSTEM ${Boost_INCLUDE_DIR})
 # Google double-conversion
 
 if("${DOUBLE_CONVERSION_HOME}" STREQUAL "")
-  set(DOUBLE_CONVERSION_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/double-conversion_ep/src/double-conversion_ep")
-  set(DOUBLE_CONVERSION_HOME "${DOUBLE_CONVERSION_PREFIX}")
-  set(DOUBLE_CONVERSION_INCLUDE_DIR "${DOUBLE_CONVERSION_PREFIX}/include")
-  set(DOUBLE_CONVERSION_STATIC_LIB "${DOUBLE_CONVERSION_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}double-conversion${CMAKE_STATIC_LIBRARY_SUFFIX}")
+  set(DOUBLE_CONVERSION_HOME "${THIRDPARTY_PREFIX}")
+  set(DOUBLE_CONVERSION_INCLUDE_DIR "${THIRDPARTY_PREFIX}/include")
+  set(DOUBLE_CONVERSION_STATIC_LIB "${THIRDPARTY_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}double-conversion${CMAKE_STATIC_LIBRARY_SUFFIX}")
 
-  set(DOUBLE_CONVERSION_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS}
-                                   -DCMAKE_INSTALL_PREFIX=${DOUBLE_CONVERSION_PREFIX})
+  set(DOUBLE_CONVERSION_CMAKE_ARGS
+    ${EP_COMMON_CMAKE_ARGS}
+    "-DCMAKE_INSTALL_PREFIX=${THIRDPARTY_PREFIX}")
 
   ExternalProject_Add(double-conversion_ep
     ${EP_LOG_OPTIONS}
-    INSTALL_DIR ${DOUBLE_CONVERSION_PREFIX}
+    INSTALL_DIR ${THIRDPARTY_PREFIX}
     URL ${DOUBLE_CONVERSION_SOURCE_URL}
     CMAKE_ARGS ${DOUBLE_CONVERSION_CMAKE_ARGS}
     BUILD_BYPRODUCTS "${DOUBLE_CONVERSION_STATIC_LIB}")
@@ -552,12 +572,20 @@ message(STATUS "double-conversion static library: ${DOUBLE_CONVERSION_STATIC_LIB
 # ----------------------------------------------------------------------
 # gflags
 
-if(ARROW_BUILD_TESTS OR
-   ARROW_BUILD_BENCHMARKS OR
-   (ARROW_USE_GLOG AND GLOG_HOME))
+if (ARROW_BUILD_TESTS OR
+    ARROW_BUILD_BENCHMARKS OR
+    (ARROW_USE_GLOG AND GLOG_HOME) OR
+    (ARROW_WITH_GRPC AND NOT GRPC_HOME))
+  set(ARROW_NEED_GFLAGS 1)
+else()
+  set(ARROW_NEED_GFLAGS 0)
+endif()
+
+if(ARROW_NEED_GFLAGS)
   # gflags (formerly Googleflags) command line parsing
   if("${GFLAGS_HOME}" STREQUAL "")
-    set(GFLAGS_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/gflags_ep-prefix/src/gflags_ep")
+    set(GFLAGS_CMAKE_CXX_FLAGS ${EP_CXX_FLAGS})
+    set(GFLAGS_PREFIX "${THIRDPARTY_PREFIX}")
     set(GFLAGS_HOME "${GFLAGS_PREFIX}")
     set(GFLAGS_INCLUDE_DIR "${GFLAGS_PREFIX}/include")
     if(MSVC)
@@ -567,7 +595,7 @@ if(ARROW_BUILD_TESTS OR
     endif()
     set(GFLAGS_VENDORED 1)
     set(GFLAGS_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS}
-                          -DCMAKE_INSTALL_PREFIX=${GFLAGS_PREFIX}
+      "-DCMAKE_INSTALL_PREFIX=${GFLAGS_PREFIX}"
                           -DBUILD_SHARED_LIBS=OFF
                           -DBUILD_STATIC_LIBS=ON
                           -DBUILD_PACKAGING=OFF
@@ -615,7 +643,7 @@ if(ARROW_BUILD_TESTS OR ARROW_BUILD_BENCHMARKS)
                                 -Wno-ignored-attributes)
     endif()
 
-    set(GTEST_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/googletest_ep-prefix/src/googletest_ep")
+    set(GTEST_PREFIX "${THIRDPARTY_PREFIX}")
     set(GTEST_INCLUDE_DIR "${GTEST_PREFIX}/include")
     set(GTEST_STATIC_LIB
       "${GTEST_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX}")
@@ -623,8 +651,8 @@ if(ARROW_BUILD_TESTS OR ARROW_BUILD_BENCHMARKS)
       "${GTEST_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX}")
     set(GTEST_VENDORED 1)
     set(GTEST_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS}
-                         -DCMAKE_INSTALL_PREFIX=${GTEST_PREFIX}
-                         -DCMAKE_CXX_FLAGS=${GTEST_CMAKE_CXX_FLAGS})
+      "-DCMAKE_INSTALL_PREFIX=${GTEST_PREFIX}"
+      -DCMAKE_CXX_FLAGS=${GTEST_CMAKE_CXX_FLAGS})
     if (MSVC AND NOT ARROW_USE_STATIC_CRT)
       set(GTEST_CMAKE_ARGS ${GTEST_CMAKE_ARGS} -Dgtest_force_shared_crt=ON)
     endif()
@@ -679,14 +707,14 @@ if(ARROW_BUILD_BENCHMARKS)
       set(GBENCHMARK_CMAKE_CXX_FLAGS "${GBENCHMARK_CMAKE_CXX_FLAGS} -stdlib=libc++")
     endif()
 
-    set(GBENCHMARK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/gbenchmark_ep/src/gbenchmark_ep-install")
+    set(GBENCHMARK_PREFIX "${THIRDPARTY_PREFIX}")
     set(GBENCHMARK_INCLUDE_DIR "${GBENCHMARK_PREFIX}/include")
     set(GBENCHMARK_STATIC_LIB "${GBENCHMARK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}benchmark${CMAKE_STATIC_LIBRARY_SUFFIX}")
     set(GBENCHMARK_VENDORED 1)
     set(GBENCHMARK_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS}
-                              -DCMAKE_INSTALL_PREFIX=${GBENCHMARK_PREFIX}
-                              -DBENCHMARK_ENABLE_TESTING=OFF
-                              -DCMAKE_CXX_FLAGS=${GBENCHMARK_CMAKE_CXX_FLAGS})
+      "-DCMAKE_INSTALL_PREFIX=${GBENCHMARK_PREFIX}"
+      -DBENCHMARK_ENABLE_TESTING=OFF
+      -DCMAKE_CXX_FLAGS=${GBENCHMARK_CMAKE_CXX_FLAGS})
     if (APPLE)
       set(GBENCHMARK_CMAKE_ARGS ${GBENCHMARK_CMAKE_ARGS} "-DBENCHMARK_USE_LIBCXX=ON")
     endif()
@@ -712,21 +740,24 @@ if(ARROW_BUILD_BENCHMARKS)
   endif()
 endif()
 
-if (ARROW_IPC)
+if (ARROW_WITH_RAPIDJSON)
   # RapidJSON, header only dependency
   if("${RAPIDJSON_HOME}" STREQUAL "")
+    set(RAPIDJSON_HOME "${THIRDPARTY_PREFIX}")
+    set(RAPIDJSON_CMAKE_ARGS
+      -DRAPIDJSON_BUILD_DOC=OFF
+      -DRAPIDJSON_BUILD_EXAMPLES=OFF
+      -DRAPIDJSON_BUILD_TESTS=OFF
+      "-DCMAKE_INSTALL_PREFIX=${THIRDPARTY_PREFIX}")
+
     ExternalProject_Add(rapidjson_ep
+      ${EP_LOG_OPTIONS}
       PREFIX "${CMAKE_BINARY_DIR}"
       URL ${RAPIDJSON_SOURCE_URL}
       URL_MD5 ${RAPIDJSON_SOURCE_MD5}
-      CONFIGURE_COMMAND ""
-      BUILD_COMMAND ""
-      BUILD_IN_SOURCE 1
-      ${EP_LOG_OPTIONS}
-      INSTALL_COMMAND "")
+      CMAKE_ARGS ${RAPIDJSON_CMAKE_ARGS})
 
-    ExternalProject_Get_Property(rapidjson_ep SOURCE_DIR)
-    set(RAPIDJSON_INCLUDE_DIR "${SOURCE_DIR}/include")
+    set(RAPIDJSON_INCLUDE_DIR "${RAPIDJSON_HOME}/include")
     set(RAPIDJSON_VENDORED 1)
     add_dependencies(toolchain rapidjson_ep)
   else()
@@ -738,8 +769,9 @@ if (ARROW_IPC)
 
   ## Flatbuffers
   if("${FLATBUFFERS_HOME}" STREQUAL "")
-    set(FLATBUFFERS_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/flatbuffers_ep-prefix/src/flatbuffers_ep-install")
     set(FLATBUFFERS_CMAKE_CXX_FLAGS ${EP_CXX_FLAGS})
+    set(FLATBUFFERS_PREFIX "${THIRDPARTY_PREFIX}")
+
     if (MSVC)
       set(FLATBUFFERS_CMAKE_CXX_FLAGS "/EHsc")
     endif()
@@ -747,10 +779,10 @@ if (ARROW_IPC)
     # RELEASE build is required for `flatc` to be installed.
     set(FLATBUFFERS_BUILD_TYPE RELEASE)
     set(FLATBUFFERS_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS}
-                               -DCMAKE_BUILD_TYPE=${FLATBUFFERS_BUILD_TYPE}
-                               -DCMAKE_INSTALL_PREFIX=${FLATBUFFERS_PREFIX}
-                               -DCMAKE_CXX_FLAGS=${FLATBUFFERS_CMAKE_CXX_FLAGS}
-                               -DFLATBUFFERS_BUILD_TESTS=OFF)
+      -DCMAKE_BUILD_TYPE=${FLATBUFFERS_BUILD_TYPE}
+      -DCMAKE_INSTALL_PREFIX=${FLATBUFFERS_PREFIX}
+      -DCMAKE_CXX_FLAGS=${FLATBUFFERS_CMAKE_CXX_FLAGS}
+      -DFLATBUFFERS_BUILD_TESTS=OFF)
 
     ExternalProject_Add(flatbuffers_ep
       URL ${FLATBUFFERS_SOURCE_URL}
@@ -785,7 +817,7 @@ if (ARROW_JEMALLOC)
   # find_package(jemalloc)
 
   set(ARROW_JEMALLOC_USE_SHARED OFF)
-  set(JEMALLOC_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/jemalloc_ep-prefix/src/jemalloc_ep/dist/")
+  set(JEMALLOC_PREFIX "${THIRDPARTY_PREFIX}")
   set(JEMALLOC_HOME "${JEMALLOC_PREFIX}")
   set(JEMALLOC_INCLUDE_DIR "${JEMALLOC_PREFIX}/include")
   set(JEMALLOC_SHARED_LIB "${JEMALLOC_PREFIX}/lib/libjemalloc${CMAKE_SHARED_LIBRARY_SUFFIX}")
@@ -804,7 +836,8 @@ if (ARROW_JEMALLOC)
 
   # Don't use the include directory directly so that we can point to a path
   # that is unique to our codebase.
-  include_directories(SYSTEM "${CMAKE_CURRENT_BINARY_DIR}/jemalloc_ep-prefix/src/")
+  include_directories(SYSTEM "${CMAKE_CURRENT_BINARY_DIR}")
+
   ADD_THIRDPARTY_LIB(jemalloc
     STATIC_LIB ${JEMALLOC_STATIC_LIB}
     SHARED_LIB ${JEMALLOC_SHARED_LIB}
@@ -865,7 +898,7 @@ if (ARROW_WITH_ZLIB)
     ADD_THIRDPARTY_LIB(zlib SHARED_LIB ${ZLIB_SHARED_LIB})
     set(ZLIB_LIBRARY zlib_shared)
   else()
-    set(ZLIB_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/zlib_ep/src/zlib_ep-install")
+    set(ZLIB_PREFIX "${THIRDPARTY_PREFIX}")
     set(ZLIB_HOME "${ZLIB_PREFIX}")
     set(ZLIB_INCLUDE_DIR "${ZLIB_PREFIX}/include")
     if (MSVC)
@@ -879,8 +912,8 @@ if (ARROW_WITH_ZLIB)
     endif()
     set(ZLIB_STATIC_LIB "${ZLIB_PREFIX}/lib/${ZLIB_STATIC_LIB_NAME}")
     set(ZLIB_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS}
-                        -DCMAKE_INSTALL_PREFIX=${ZLIB_PREFIX}
-                        -DBUILD_SHARED_LIBS=OFF)
+      "-DCMAKE_INSTALL_PREFIX=${ZLIB_PREFIX}"
+      -DBUILD_SHARED_LIBS=OFF)
     ADD_THIRDPARTY_LIB(zlib
       STATIC_LIB ${ZLIB_STATIC_LIB})
     set(ZLIB_LIBRARY zlib_static)
@@ -901,7 +934,7 @@ if (ARROW_WITH_SNAPPY)
 # Snappy
 
   if("${SNAPPY_HOME}" STREQUAL "")
-    set(SNAPPY_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/snappy_ep/src/snappy_ep-install")
+    set(SNAPPY_PREFIX "${THIRDPARTY_PREFIX}")
     set(SNAPPY_HOME "${SNAPPY_PREFIX}")
     set(SNAPPY_INCLUDE_DIR "${SNAPPY_PREFIX}/include")
     if (MSVC)
@@ -921,9 +954,9 @@ if (ARROW_WITH_SNAPPY)
 
     if (WIN32)
       set(SNAPPY_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS}
-                            -DCMAKE_AR=${CMAKE_AR}
-                            -DCMAKE_RANLIB=${CMAKE_RANLIB}
-                            -DCMAKE_INSTALL_PREFIX=${SNAPPY_PREFIX})
+        -DCMAKE_AR=${CMAKE_AR}
+        -DCMAKE_RANLIB=${CMAKE_RANLIB}
+        "-DCMAKE_INSTALL_PREFIX=${SNAPPY_PREFIX}")
       set(SNAPPY_UPDATE_COMMAND ${CMAKE_COMMAND} -E copy
                         ${CMAKE_SOURCE_DIR}/cmake_modules/SnappyCMakeLists.txt
                         ./CMakeLists.txt &&
@@ -969,7 +1002,7 @@ if (ARROW_WITH_BROTLI)
 # Brotli
 
   if("${BROTLI_HOME}" STREQUAL "")
-    set(BROTLI_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/brotli_ep/src/brotli_ep-install")
+    set(BROTLI_PREFIX "${THIRDPARTY_PREFIX}")
     set(BROTLI_HOME "${BROTLI_PREFIX}")
     set(BROTLI_INCLUDE_DIR "${BROTLI_PREFIX}/include")
     if (MSVC)
@@ -977,13 +1010,13 @@ if (ARROW_WITH_BROTLI)
     else()
       set(BROTLI_LIB_DIR lib)
     endif()
-    set(BROTLI_STATIC_LIBRARY_ENC "${BROTLI_PREFIX}/${BROTLI_LIB_DIR}/${CMAKE_LIBRARY_ARCHITECTURE}/${CMAKE_STATIC_LIBRARY_PREFIX}brotlienc${CMAKE_STATIC_LIBRARY_SUFFIX}")
-    set(BROTLI_STATIC_LIBRARY_DEC "${BROTLI_PREFIX}/${BROTLI_LIB_DIR}/${CMAKE_LIBRARY_ARCHITECTURE}/${CMAKE_STATIC_LIBRARY_PREFIX}brotlidec${CMAKE_STATIC_LIBRARY_SUFFIX}")
-    set(BROTLI_STATIC_LIBRARY_COMMON "${BROTLI_PREFIX}/${BROTLI_LIB_DIR}/${CMAKE_LIBRARY_ARCHITECTURE}/${CMAKE_STATIC_LIBRARY_PREFIX}brotlicommon${CMAKE_STATIC_LIBRARY_SUFFIX}")
+    set(BROTLI_STATIC_LIBRARY_ENC "${BROTLI_PREFIX}/${BROTLI_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}brotlienc${CMAKE_STATIC_LIBRARY_SUFFIX}")
+    set(BROTLI_STATIC_LIBRARY_DEC "${BROTLI_PREFIX}/${BROTLI_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}brotlidec${CMAKE_STATIC_LIBRARY_SUFFIX}")
+    set(BROTLI_STATIC_LIBRARY_COMMON "${BROTLI_PREFIX}/${BROTLI_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}brotlicommon${CMAKE_STATIC_LIBRARY_SUFFIX}")
     set(BROTLI_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS}
-                          -DCMAKE_INSTALL_PREFIX=${BROTLI_PREFIX}
-                          -DCMAKE_INSTALL_LIBDIR=lib/${CMAKE_LIBRARY_ARCHITECTURE}
-                          -DBUILD_SHARED_LIBS=OFF)
+      "-DCMAKE_INSTALL_PREFIX=${BROTLI_PREFIX}"
+      -DCMAKE_INSTALL_LIBDIR=lib
+      -DBUILD_SHARED_LIBS=OFF)
 
     ExternalProject_Add(brotli_ep
       URL ${BROTLI_SOURCE_URL}
@@ -996,7 +1029,7 @@ if (ARROW_WITH_BROTLI)
       ExternalProject_Get_Property(brotli_ep SOURCE_DIR)
 
       ExternalProject_Add_Step(brotli_ep headers_copy
-        COMMAND xcopy /E /I include ..\\..\\..\\brotli_ep\\src\\brotli_ep-install\\include /Y
+        COMMAND xcopy /E /I include ..\\..\\..\\arrow_thirdparty\\include /Y
         DEPENDEES build
         WORKING_DIRECTORY ${SOURCE_DIR})
     endif()
@@ -1094,16 +1127,16 @@ if (ARROW_WITH_ZSTD)
 # ZSTD
 
   if("${ZSTD_HOME}" STREQUAL "")
-    set(ZSTD_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/zstd_ep-install")
+    set(ZSTD_PREFIX "${THIRDPARTY_PREFIX}")
     set(ZSTD_INCLUDE_DIR "${ZSTD_PREFIX}/include")
 
     set(ZSTD_CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-                        -DCMAKE_INSTALL_PREFIX=${ZSTD_PREFIX}
-                        -DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}
-                        -DZSTD_BUILD_PROGRAMS=off
-                        -DZSTD_BUILD_SHARED=off
-                        -DZSTD_BUILD_STATIC=on
-                        -DZSTD_MULTITHREAD_SUPPORT=off)
+      "-DCMAKE_INSTALL_PREFIX=${ZSTD_PREFIX}"
+      -DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}
+      -DZSTD_BUILD_PROGRAMS=off
+      -DZSTD_BUILD_SHARED=off
+      -DZSTD_BUILD_STATIC=on
+      -DZSTD_MULTITHREAD_SUPPORT=off)
 
     if (MSVC)
       set(ZSTD_STATIC_LIB "${ZSTD_PREFIX}/${CMAKE_INSTALL_LIBDIR}/zstd_static.lib")
@@ -1154,13 +1187,13 @@ endif()
 if (ARROW_GANDIVA)
   # re2
   if ("${RE2_HOME}" STREQUAL "")
-    set (RE2_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/re2_ep-install")
+    set (RE2_PREFIX "${THIRDPARTY_PREFIX}")
     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 ${EP_COMMON_CMAKE_ARGS}
-                       -DCMAKE_INSTALL_PREFIX=${RE2_PREFIX})
+      "-DCMAKE_INSTALL_PREFIX=${RE2_PREFIX}")
 
     ExternalProject_Add(re2_ep
       ${EP_LOG_OPTIONS}
@@ -1192,10 +1225,10 @@ endif ()
 # ----------------------------------------------------------------------
 # Protocol Buffers (required for ORC and Flight and Gandiva libraries)
 
-if (ARROW_ORC OR ARROW_FLIGHT OR ARROW_GANDIVA)
+if (ARROW_WITH_PROTOBUF)
   # protobuf
   if ("${PROTOBUF_HOME}" STREQUAL "")
-    set (PROTOBUF_PREFIX "${THIRDPARTY_DIR}/protobuf_ep-install")
+    set (PROTOBUF_PREFIX "${THIRDPARTY_PREFIX}")
     set (PROTOBUF_HOME "${PROTOBUF_PREFIX}")
     set (PROTOBUF_INCLUDE_DIR "${PROTOBUF_PREFIX}/include")
     set (PROTOBUF_STATIC_LIB "${PROTOBUF_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}protobuf${CMAKE_STATIC_LIBRARY_SUFFIX}")
@@ -1240,53 +1273,135 @@ endif()
 # ----------------------------------------------------------------------
 # Dependencies for Arrow Flight RPC
 
-if (ARROW_FLIGHT)
+if (ARROW_WITH_GRPC)
+  if ("${CARES_HOME}" STREQUAL "")
+    set(CARES_VENDORED 1)
+    set(CARES_PREFIX "${THIRDPARTY_PREFIX}")
+    set(CARES_HOME "${CARES_PREFIX}")
+    set(CARES_INCLUDE_DIR "${CARES_PREFIX}/include")
+
+    # If you set -DCARES_SHARED=ON then the build system names the library
+    # libcares_static.a
+    set(CARES_STATIC_LIB "${CARES_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}cares${CMAKE_STATIC_LIBRARY_SUFFIX}")
+
+    set(CARES_CMAKE_ARGS
+      -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
+      -DCARES_STATIC=ON
+      -DCARES_SHARED=OFF
+      "-DCMAKE_C_FLAGS=${EP_C_FLAGS}"
+      "-DCMAKE_INSTALL_PREFIX=${CARES_PREFIX}")
+
+    ExternalProject_Add(cares_ep
+      ${EP_LOG_OPTIONS}
+      URL ${CARES_SOURCE_URL}
+      CMAKE_ARGS ${CARES_CMAKE_ARGS}
+      BUILD_BYPRODUCTS "${CARES_STATIC_LIB}")
+  else()
+    set(CARES_VENDORED 0)
+    find_package(c-ares REQUIRED
+      PATHS ${CARES_HOME}
+      NO_DEFAULT_PATH)
+    if(TARGET c-ares::cares)
+      get_property(CARES_STATIC_LIB TARGET c-ares::cares_static PROPERTY LOCATION)
+    endif()
+  endif()
+  message(STATUS "c-ares library: ${CARES_STATIC_LIB}")
+
+  add_custom_target(grpc)
+
   if ("${GRPC_HOME}" STREQUAL "")
     set(GRPC_VENDORED 1)
     set(GRPC_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/grpc_ep-prefix/src/grpc_ep-build")
-    set(GRPC_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/grpc_ep/src/grpc_ep-install")
+    set(GRPC_PREFIX "${THIRDPARTY_PREFIX}")
     set(GRPC_HOME "${GRPC_PREFIX}")
     set(GRPC_INCLUDE_DIR "${GRPC_PREFIX}/include")
-    set(GRPC_STATIC_LIBRARY_GPR "${GRPC_BUILD_DIR}/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gpr${CMAKE_STATIC_LIBRARY_SUFFIX}")
-    set(GRPC_STATIC_LIBRARY_GRPC "${GRPC_BUILD_DIR}/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}grpc${CMAKE_STATIC_LIBRARY_SUFFIX}")
-    set(GRPC_STATIC_LIBRARY_GRPCPP "${GRPC_BUILD_DIR}/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}grpc++${CMAKE_STATIC_LIBRARY_SUFFIX}")
-    set(GRPC_STATIC_LIBRARY_ADDRESS_SORTING "${GRPC_BUILD_DIR}/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}address_sorting${CMAKE_STATIC_LIBRARY_SUFFIX}")
-    set(GRPC_STATIC_LIBRARY_CARES "${GRPC_BUILD_DIR}/${CMAKE_CFG_INTDIR}/third_party/cares/cares/lib/${CMAKE_STATIC_LIBRARY_PREFIX}cares${CMAKE_STATIC_LIBRARY_SUFFIX}")
     set(GRPC_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS}
-                        -DCMAKE_INSTALL_PREFIX=${GRPC_PREFIX}
-                        -DBUILD_SHARED_LIBS=OFF)
+      "-DCMAKE_INSTALL_PREFIX=${GRPC_PREFIX}"
+      -DBUILD_SHARED_LIBS=OFF)
+
+    set(GRPC_STATIC_LIBRARY_GPR "${GRPC_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gpr${CMAKE_STATIC_LIBRARY_SUFFIX}")
+    set(GRPC_STATIC_LIBRARY_GRPC "${GRPC_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}grpc${CMAKE_STATIC_LIBRARY_SUFFIX}")
+    set(GRPC_STATIC_LIBRARY_GRPCPP "${GRPC_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}grpc++${CMAKE_STATIC_LIBRARY_SUFFIX}")
+    set(GRPC_STATIC_LIBRARY_ADDRESS_SORTING "${GRPC_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}address_sorting${CMAKE_STATIC_LIBRARY_SUFFIX}")
+    set(GRPC_CPP_PLUGIN "${GRPC_PREFIX}/bin/grpc_cpp_plugin")
+
+    set(GRPC_CMAKE_PREFIX "${THIRDPARTY_PREFIX}")
+
+    add_custom_target(grpc_dependencies)
+
+    if (CARES_VENDORED)
+      add_dependencies(grpc_dependencies cares_ep)
+    else()
+      set(GRPC_CMAKE_PREFIX "${GRPC_CMAKE_PREFIX};${CARES_HOME}")
+    endif()
+
+    if (GFLAGS_VENDORED)
+      add_dependencies(grpc_dependencies gflags_ep)
+    else()
+      set(GRPC_CMAKE_PREFIX "${GRPC_CMAKE_PREFIX};${GFLAGS_HOME}")
+    endif()
+
+    if (PROTOBUF_VENDORED)
+      add_dependencies(grpc_dependencies protobuf_ep)
+    else()
+      set(GRPC_CMAKE_PREFIX "${GRPC_CMAKE_PREFIX};${PROTOBUF_HOME}")
+    endif()
+
+    # ZLIB is never vendored
+    if(NOT "${ZLIB_HOME}" STREQUAL "")
+      set(GRPC_CMAKE_PREFIX "${GRPC_CMAKE_PREFIX};${ZLIB_HOME}")
+    endif()
+
+    if (RAPIDJSON_VENDORED)
+      add_dependencies(grpc_dependencies rapidjson_ep)
+    endif()
 
+    # Yuck, see https://stackoverflow.com/a/45433229/776560
+    string(REPLACE ";" "|" GRPC_PREFIX_PATH_ALT_SEP "${GRPC_CMAKE_PREFIX}")
+
+    set(GRPC_CMAKE_ARGS
+      -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
+      -DCMAKE_PREFIX_PATH="${GRPC_PREFIX_PATH_ALT_SEP}"
+      "-DgRPC_CARES_PROVIDER=package"
+      "-DgRPC_GFLAGS_PROVIDER=package"
+      "-DgRPC_PROTOBUF_PROVIDER=package"
+      "-DgRPC_SSL_PROVIDER=package"
+      "-DgRPC_ZLIB_PROVIDER=package"
+      "-DCMAKE_CXX_FLAGS=${EP_CXX_FLAGS}"
+      "-DCMAKE_C_FLAGS=${EP_C_FLAGS}"
+      "-DCMAKE_INSTALL_PREFIX=${GRPC_PREFIX}"
+      -DCMAKE_INSTALL_LIBDIR=lib
+      -DBUILD_SHARED_LIBS=OFF)
+
+    # XXX the gRPC git checkout is huge and takes a long time
+    # Ideally, we should be able to use the tarballs, but they don't contain
+    # vendored dependencies such as c-ares...
     ExternalProject_Add(grpc_ep
-      GIT_REPOSITORY "https://github.com/grpc/grpc"
-      GIT_TAG ${GRPC_VERSION}
-      BUILD_BYPRODUCTS "${GRPC_STATIC_LIBRARY_GPR}" "${GRPC_STATIC_LIBRARY_GRPC}" "${GRPC_STATIC_LIBRARY_GRPCPP}"
-      ${GRPC_BUILD_BYPRODUCTS}
-      ${EP_LOG_OPTIONS}
+      URL ${GRPC_SOURCE_URL}
+      LIST_SEPARATOR |
+      BUILD_BYPRODUCTS
+        ${GRPC_STATIC_LIBRARY_GPR}
+        ${GRPC_STATIC_LIBRARY_GRPC}
+        ${GRPC_STATIC_LIBRARY_GRPCPP}
+        ${GRPC_STATIC_LIBRARY_ADDRESS_SORTING}
+        ${GRPC_CPP_PLUGIN}
       CMAKE_ARGS ${GRPC_CMAKE_ARGS}
       ${EP_LOG_OPTIONS})
 
+    add_dependencies(grpc_ep grpc_dependencies)
+
     set(GPR_STATIC_LIB "${GRPC_STATIC_LIBRARY_GPR}")
     set(GRPC_STATIC_LIB "${GRPC_STATIC_LIBRARY_GRPC}")
     set(GRPCPP_STATIC_LIB "${GRPC_STATIC_LIBRARY_GRPCPP}")
     set(GRPC_ADDRESS_SORTING_STATIC_LIB "${GRPC_STATIC_LIBRARY_ADDRESS_SORTING}")
-    # XXX(wesm): relying on vendored c-ares provided by gRPC for the time being
-    set(CARES_STATIC_LIB "${GRPC_STATIC_LIBRARY_CARES}")
-    set(GRPC_CPP_PLUGIN "${GRPC_BUILD_DIR}/${CMAKE_CFG_INTDIR}/grpc_cpp_plugin")
+
+    add_dependencies(grpc grpc_ep)
+    add_dependencies(toolchain grpc)
   else()
     find_package(gRPC REQUIRED)
     set(GRPC_VENDORED 0)
   endif()
 
-  # If we built gRPC ourselves, we should use its c-ares.
-  if ("${CARES_STATIC_LIB}" STREQUAL "")
-    if (NOT "${CARES_HOME}" STREQUAL "")
-      set(CARES_STATIC_LIB "${CARES_HOME}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}cares_static${CMAKE_STATIC_LIBRARY_SUFFIX}")
-    elseif (c-ares_FOUND)
-      get_property(CARES_STATIC_LIB TARGET c-ares::cares_static PROPERTY LOCATION)
-    endif()
-  endif()
-  message(STATUS "Found the c-ares library: ${CARES_STATIC_LIB}")
-
   if ("${GRPC_CPP_PLUGIN}" STREQUAL "")
     message(SEND_ERROR "Please set GRPC_CPP_PLUGIN.")
   endif()
@@ -1315,7 +1430,7 @@ endif()
 if (ARROW_ORC)
   # orc
   if ("${ORC_HOME}" STREQUAL "")
-    set(ORC_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/orc_ep-install")
+    set(ORC_PREFIX "${THIRDPARTY_PREFIX}")
     set(ORC_HOME "${ORC_PREFIX}")
     set(ORC_INCLUDE_DIR "${ORC_PREFIX}/include")
     set(ORC_STATIC_LIB "${ORC_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}orc${CMAKE_STATIC_LIBRARY_SUFFIX}")
@@ -1333,18 +1448,18 @@ if (ARROW_ORC)
     # ${LZ4_HOME}/include, which forces us to specify the include directory
     # manually as well.
     set (ORC_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS}
-                        -DCMAKE_INSTALL_PREFIX=${ORC_PREFIX}
-                        -DCMAKE_CXX_FLAGS=${ORC_CMAKE_CXX_FLAGS}
-                        -DBUILD_LIBHDFSPP=OFF
-                        -DBUILD_JAVA=OFF
-                        -DBUILD_TOOLS=OFF
-                        -DBUILD_CPP_TESTS=OFF
-                        -DINSTALL_VENDORED_LIBS=OFF
-                        -DPROTOBUF_HOME=${PROTOBUF_HOME}
-                        -DLZ4_HOME=${LZ4_HOME}
-                        -DLZ4_INCLUDE_DIR=${LZ4_INCLUDE_DIR}
-                        -DSNAPPY_HOME=${SNAPPY_HOME}
-                        -DZLIB_HOME=${ZLIB_HOME})
+      "-DCMAKE_INSTALL_PREFIX=${ORC_PREFIX}"
+      -DCMAKE_CXX_FLAGS=${ORC_CMAKE_CXX_FLAGS}
+      -DBUILD_LIBHDFSPP=OFF
+      -DBUILD_JAVA=OFF
+      -DBUILD_TOOLS=OFF
+      -DBUILD_CPP_TESTS=OFF
+      -DINSTALL_VENDORED_LIBS=OFF
+      -DPROTOBUF_HOME=${PROTOBUF_HOME}
+      -DLZ4_HOME=${LZ4_HOME}
+      -DLZ4_INCLUDE_DIR=${LZ4_INCLUDE_DIR}
+      -DSNAPPY_HOME=${SNAPPY_HOME}
+      -DZLIB_HOME=${ZLIB_HOME})
 
     ExternalProject_Add(orc_ep
       URL ${ORC_SOURCE_URL}
@@ -1390,25 +1505,25 @@ if (ARROW_WITH_THRIFT)
 find_package(Thrift)
 
 if (NOT THRIFT_FOUND)
-  set(THRIFT_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/thrift_ep/src/thrift_ep-install")
+  set(THRIFT_PREFIX "${THIRDPARTY_PREFIX}")
   set(THRIFT_HOME "${THRIFT_PREFIX}")
   set(THRIFT_INCLUDE_DIR "${THRIFT_PREFIX}/include")
   set(THRIFT_COMPILER "${THRIFT_PREFIX}/bin/thrift")
   set(THRIFT_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS}
-                        -DCMAKE_INSTALL_PREFIX=${THRIFT_PREFIX}
-                        -DCMAKE_INSTALL_RPATH=${THRIFT_PREFIX}/lib
-                        -DBUILD_SHARED_LIBS=OFF
-                        -DBUILD_TESTING=OFF
-                        -DBUILD_EXAMPLES=OFF
-                        -DBUILD_TUTORIALS=OFF
-                        -DWITH_QT4=OFF
-                        -DWITH_C_GLIB=OFF
-                        -DWITH_JAVA=OFF
-                        -DWITH_PYTHON=OFF
-                        -DWITH_HASKELL=OFF
-                        -DWITH_CPP=ON
-                        -DWITH_STATIC_LIB=ON
-                        -DWITH_LIBEVENT=OFF)
+    "-DCMAKE_INSTALL_PREFIX=${THRIFT_PREFIX}"
+    -DCMAKE_INSTALL_RPATH=${THRIFT_PREFIX}/lib
+    -DBUILD_SHARED_LIBS=OFF
+    -DBUILD_TESTING=OFF
+    -DBUILD_EXAMPLES=OFF
+    -DBUILD_TUTORIALS=OFF
+    -DWITH_QT4=OFF
+    -DWITH_C_GLIB=OFF
+    -DWITH_JAVA=OFF
+    -DWITH_PYTHON=OFF
+    -DWITH_HASKELL=OFF
+    -DWITH_CPP=ON
+    -DWITH_STATIC_LIB=ON
+    -DWITH_LIBEVENT=OFF)
 
   # Thrift also uses boost. Forward important boost settings if there were ones passed.
   if (DEFINED BOOST_ROOT)
@@ -1444,7 +1559,7 @@ if (NOT THRIFT_FOUND)
 
   if (MSVC)
     set(WINFLEXBISON_VERSION 2.4.9)
-    set(WINFLEXBISON_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/winflexbison_ep/src/winflexbison_ep-install")
+    set(WINFLEXBISON_PREFIX "${THIRDPARTY_PREFIX}")
     ExternalProject_Add(winflexbison_ep
       URL https://github.com/lexxmark/winflexbison/releases/download/v.${WINFLEXBISON_VERSION}/win_flex_bison-${WINFLEXBISON_VERSION}.zip
       URL_HASH MD5=a2e979ea9928fbf8567e995e9c0df765
@@ -1524,9 +1639,9 @@ endif()  # ARROW_HIVESERVER2
 
 if (ARROW_USE_GLOG)
   if("${GLOG_HOME}" STREQUAL "")
-    set(GLOG_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/glog_ep-prefix/src/glog_ep")
-    set(GLOG_INCLUDE_DIR "${GLOG_BUILD_DIR}/include")
-    set(GLOG_STATIC_LIB "${GLOG_BUILD_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}glog${CMAKE_STATIC_LIBRARY_SUFFIX}")
+    set(GLOG_PREFIX "${THIRDPARTY_PREFIX}")
+    set(GLOG_INCLUDE_DIR "${GLOG_PREFIX}/include")
+    set(GLOG_STATIC_LIB "${GLOG_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}glog${CMAKE_STATIC_LIBRARY_SUFFIX}")
     set(GLOG_CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
     set(GLOG_CMAKE_C_FLAGS "${EP_C_FLAGS} -fPIC")
     if (Threads::Threads)
@@ -1542,13 +1657,13 @@ if (ARROW_USE_GLOG)
     endif()
 
     set(GLOG_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS}
-                        -DCMAKE_INSTALL_PREFIX=${GLOG_BUILD_DIR}
-                        -DBUILD_SHARED_LIBS=OFF
-                        -DBUILD_TESTING=OFF
-                        -DWITH_GFLAGS=OFF
-                        -DCMAKE_CXX_FLAGS_${UPPERCASE_BUILD_TYPE}=${GLOG_CMAKE_CXX_FLAGS}
-                        -DCMAKE_C_FLAGS_${UPPERCASE_BUILD_TYPE}=${GLOG_CMAKE_C_FLAGS}
-                        -DCMAKE_CXX_FLAGS=${GLOG_CMAKE_CXX_FLAGS})
+      "-DCMAKE_INSTALL_PREFIX=${GLOG_PREFIX}"
+      -DBUILD_SHARED_LIBS=OFF
+      -DBUILD_TESTING=OFF
+      -DWITH_GFLAGS=OFF
+      -DCMAKE_CXX_FLAGS_${UPPERCASE_BUILD_TYPE}=${GLOG_CMAKE_CXX_FLAGS}
+      -DCMAKE_C_FLAGS_${UPPERCASE_BUILD_TYPE}=${GLOG_CMAKE_C_FLAGS}
+      -DCMAKE_CXX_FLAGS=${GLOG_CMAKE_CXX_FLAGS})
     message(STATUS "Glog version: ${GLOG_VERSION}")
     ExternalProject_Add(glog_ep
       URL ${GLOG_SOURCE_URL}
diff --git a/cpp/src/arrow/flight/CMakeLists.txt b/cpp/src/arrow/flight/CMakeLists.txt
index f59ea3c5..b8b4d8d 100644
--- a/cpp/src/arrow/flight/CMakeLists.txt
+++ b/cpp/src/arrow/flight/CMakeLists.txt
@@ -45,7 +45,7 @@ set(FLIGHT_GENERATED_PROTO_FILES
   "${CMAKE_CURRENT_BINARY_DIR}/Flight.grpc.pb.cc"
   "${CMAKE_CURRENT_BINARY_DIR}/Flight.grpc.pb.h")
 
-set(PROTO_DEPENDS ${FLIGHT_PROTO} ${PROTOBUF_LIBRARY})
+set(PROTO_DEPENDS ${FLIGHT_PROTO} ${PROTOBUF_LIBRARY} grpc)
 
 add_custom_command(
   OUTPUT ${FLIGHT_GENERATED_PROTO_FILES}
@@ -127,6 +127,7 @@ if (ARROW_BUILD_BENCHMARKS)
     perf.pb.cc)
   target_link_libraries(flight-perf-server
     arrow_flight_static
+    arrow_testing_static
     ${ARROW_FLIGHT_STATIC_LINK_LIBS}
     gflags_static
     ${GTEST_LIBRARY})
@@ -136,6 +137,7 @@ if (ARROW_BUILD_BENCHMARKS)
     perf.pb.cc)
   target_link_libraries(flight-benchmark
     arrow_flight_static
+    arrow_testing_static
     ${ARROW_FLIGHT_STATIC_LINK_LIBS}
     gflags_static
     ${GTEST_LIBRARY})
diff --git a/cpp/src/arrow/flight/perf-server.cc b/cpp/src/arrow/flight/perf-server.cc
index ce2ec7b..add5442 100644
--- a/cpp/src/arrow/flight/perf-server.cc
+++ b/cpp/src/arrow/flight/perf-server.cc
@@ -69,6 +69,8 @@ class PerfDataStream : public FlightDataStream {
     batch_ = RecordBatch::Make(schema, batch_length_, arrays_);
   }
 
+  std::shared_ptr<Schema> schema() override { return schema_; }
+
   Status Next(IpcPayload* payload) override {
     if (records_sent_ >= total_records_) {
       // Signal that iteration is over
diff --git a/cpp/src/arrow/memory_pool.cc b/cpp/src/arrow/memory_pool.cc
index 3e0366a..103771b 100644
--- a/cpp/src/arrow/memory_pool.cc
+++ b/cpp/src/arrow/memory_pool.cc
@@ -32,7 +32,7 @@
 // Needed to support jemalloc 3 and 4
 #define JEMALLOC_MANGLE
 // Explicitly link to our version of jemalloc
-#include "jemalloc_ep/dist/include/jemalloc/jemalloc.h"
+#include "arrow_thirdparty/include/jemalloc/jemalloc.h"
 #endif
 
 namespace arrow {
diff --git a/cpp/thirdparty/versions.txt b/cpp/thirdparty/versions.txt
index a2393b6..00cd31e 100644
--- a/cpp/thirdparty/versions.txt
+++ b/cpp/thirdparty/versions.txt
@@ -25,12 +25,13 @@
 
 BOOST_VERSION=1.67.0
 BROTLI_VERSION=v0.6.0
+CARES_VERSION=1.15.0
 DOUBLE_CONVERSION_VERSION=v3.1.1
 FLATBUFFERS_VERSION=02a7807dd8d26f5668ffbbec0360dc107bbfabd5
 GBENCHMARK_VERSION=v1.4.1
 GFLAGS_VERSION=v2.2.0
 GLOG_VERSION=v0.3.5
-GRPC_VERSION=v1.14.1
+GRPC_VERSION=v1.18.0
 GTEST_VERSION=1.8.0
 JEMALLOC_VERSION=17c897976c60b0e6e4f4a365c751027244dada7a
 LZ4_VERSION=v1.7.5
@@ -50,6 +51,7 @@ ZSTD_VERSION=v1.3.7
 DEPENDENCIES=(
   "ARROW_BOOST_URL boost-${BOOST_VERSION}.tar.gz https://dl.bintray.com/boostorg/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION//./_}.tar.gz"
   "ARROW_BROTLI_URL brotli-${BROTLI_VERSION}.tar.gz https://github.com/google/brotli/archive/${BROTLI_VERSION}.tar.gz"
+  "ARROW_CARES_URL cares-${CARES_VERSION}.tar.gz https://c-ares.haxx.se/download/c-ares-$CARES_VERSION.tar.gz"
   "ARROW_DOUBLE_CONVERSION_URL double-conversion-${DOUBLE_CONVERSION_VERSION}.tar.gz https://github.com/google/double-conversion/archive/${DOUBLE_CONVERSION_VERSION}.tar.gz"
   "ARROW_FLATBUFFERS_URL flatbuffers-${FLATBUFFERS_VERSION}.tar.gz https://github.com/google/flatbuffers/archive/${FLATBUFFERS_VERSION}.tar.gz"
   "ARROW_GBENCHMARK_URL gbenchmark-${GBENCHMARK_VERSION}.tar.gz https://github.com/google/benchmark/archive/${GBENCHMARK_VERSION}.tar.gz"