Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/deploy_development_cookbooks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ on:
push:
branches:
- main
pull_request:
branches:
- main

name: Deploy development Cookbooks

Expand Down Expand Up @@ -80,6 +83,7 @@ jobs:
name: deploy
runs-on: ubuntu-latest
needs: [make_dev_cookbooks, make_dev_cpp]
if: github.event_name == 'push'
steps:
- name: Checkout repo
uses: actions/checkout@v5
Expand Down
96 changes: 51 additions & 45 deletions cpp/code/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,21 @@ cmake_minimum_required(VERSION 3.19)
project(arrow-cookbook)

set(CMAKE_CXX_STANDARD 20)
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libstdc++")
endif()

# Add Arrow and other required packages
if(DEFINED ENV{ARROW_NIGHTLY})
set(CMAKE_BUILD_TYPE Debug)
set(ARROW_BUILD_SHARED True)
set(ARROW_DEPENDENCY_SOURCE "AUTO")
set(ARROW_ENABLE_THREADING ON)
set(ARROW_SIMD_LEVEL NONE) # macOS-specific workaround

set(ARROW_WITH_SNAPPY ON)
set(ARROW_THRIFT_SOURCE "BUNDLED")
set(ARROW_PROTOBUF_SOURCE "BUNDLED")
set(ARROW_GRPC_SOURCE "BUNDLED")
set(ARROW_BUILD_STATIC ON)

set(ARROW_ACERO ON)
set(ARROW_COMPUTE ON)
Expand All @@ -41,6 +43,13 @@ if(DEFINED ENV{ARROW_NIGHTLY})
set(ARROW_IPC ON)
set(ARROW_PARQUET ON)

find_package(OpenSSL REQUIRED)

# Prevent re2 from registering its test targets with CTest.
# re2 uses its own variable instead of BUILD_TESTING.
# TODO: fix upstream in Arrow's bundled dependency handling.
set(RE2_BUILD_TESTING OFF CACHE BOOL "" FORCE)

include(FetchContent)

FetchContent_Declare(Arrow
Expand All @@ -62,11 +71,8 @@ if(DEFINED ENV{ARROW_NIGHTLY})
arrow_shared
SYSTEM INTERFACE "$<BUILD_INTERFACE:${arrow_SOURCE_DIR}/cpp/src>"
)
# Force FetchContent Arrow headers to the front of every target's include
# list so they take priority over any system Arrow headers added transitively
# (e.g. /opt/homebrew/include from GTest::gtest). Without this the recipe
# executables compile against the older installed Arrow headers but link
# against the FetchContent Arrow runtime, causing ABI mismatches.
# Help make sure the FetchContent build headers go in front if the system has
# stable Arrow DLLs installed too
include_directories(BEFORE SYSTEM "${arrow_SOURCE_DIR}/cpp/src")

else()
Expand All @@ -76,46 +82,53 @@ else()
find_package(Parquet REQUIRED)
endif()

if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(CMAKE_CXX_CLANG_TIDY "clang-tidy")
endif()

# Create test targets
enable_testing()

find_package(GTest REQUIRED)
include(GoogleTest)

# Resolve which Arrow targets to link against and wire up their dependency
# chains once here, before any recipe() calls.
if(TARGET Arrow::arrow_shared AND (NOT DEFINED ARROW_GRPC_USE_SHARED OR ARROW_GRPC_USE_SHARED))
set(ARROW_RECIPE_LIBS
ArrowDataset::arrow_dataset_shared
ArrowFlight::arrow_flight_shared)
elseif(TARGET arrow_flight_static)
# gRPC is statically bundled inside Arrow. Link against the static Arrow libs
# so there is only one copy of gRPC in the binary (avoids duplicate TLS slots).
target_link_libraries(parquet_static INTERFACE arrow_static)
target_link_libraries(arrow_dataset_static INTERFACE parquet_static)
target_link_libraries(arrow_flight_static INTERFACE arrow_static)
set(ARROW_RECIPE_LIBS arrow_dataset_static arrow_flight_static)
else()
target_link_libraries(parquet_shared INTERFACE arrow_shared)
target_link_libraries(arrow_dataset_shared INTERFACE parquet_shared)
target_link_libraries(arrow_flight_shared INTERFACE arrow_shared)
set(ARROW_RECIPE_LIBS arrow_dataset_shared arrow_flight_shared)
endif()

function(RECIPE TARGET)
add_executable(
${TARGET}
${TARGET}.cc
common.cc
main.cc
${TARGET}
${TARGET}.cc
common.cc
main.cc
)
if(TARGET Arrow::arrow_shared)
target_link_libraries(
${TARGET}
ArrowDataset::arrow_dataset_shared
ArrowFlight::arrow_flight_shared GTest::gtest
)
else()
target_link_libraries(parquet_shared INTERFACE arrow_shared)
target_link_libraries(arrow_dataset_shared INTERFACE parquet_shared)
target_link_libraries(arrow_flight_shared INTERFACE arrow_shared)
target_link_libraries(${TARGET} arrow_dataset_shared arrow_flight_shared GTest::gtest)
endif()
if (MSVC)
target_link_libraries(${TARGET} ${ARROW_RECIPE_LIBS} GTest::gtest)
if(MSVC)
target_compile_options(${TARGET} PRIVATE /W4 /WX)
else ()
else()
target_compile_options(${TARGET} PRIVATE -Wall -Wextra -Wpedantic -Werror)
# _Nullable/_Nonnull nullability annotations in absl macros trigger
# -Wnullability-extension under -Wpedantic; this is Clang-only.
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# _Nullable/_Nonnull nullability annotations in absl macros trigger
# -Wnullability-extension under -Wpedantic.
target_compile_options(${TARGET} PRIVATE -Wno-nullability-extension)
endif()
endif ()

endif()
gtest_discover_tests(${TARGET})
endfunction()

Expand All @@ -124,23 +137,16 @@ recipe(creating_arrow_objects)
recipe(datasets)
recipe(flight)

# Add protobuf to flight
find_package(Threads)
find_package(gRPC CONFIG REQUIRED)
if(NOT TARGET gRPC::grpc)
find_package(gRPC CONFIG REQUIRED)
endif()

set(PROTO_FILES
protos/helloworld.proto
)
set(PROTO_FILES protos/helloworld.proto)

target_link_libraries(flight
protobuf::libprotobuf
gRPC::grpc
gRPC::grpc++
)
target_link_libraries(flight protobuf::libprotobuf gRPC::grpc gRPC::grpc++)
target_include_directories(flight PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
get_target_property(grpc_cpp_plugin_location gRPC::grpc_cpp_plugin LOCATION)
protobuf_generate(TARGET flight LANGUAGE cpp PROTOS ${PROTO_FILES})
protobuf_generate(TARGET flight LANGUAGE grpc
GENERATE_EXTENSIONS .grpc.pb.h .grpc.pb.cc
PLUGIN "protoc-gen-grpc=${grpc_cpp_plugin_location}"
PLUGIN "protoc-gen-grpc=$<TARGET_FILE:gRPC::grpc_cpp_plugin>"
PROTOS ${PROTO_FILES})
7 changes: 7 additions & 0 deletions cpp/code/flight.cc
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,13 @@ arrow::Status TestCustomGrpcImpl() {
rout << response.reply();

EndRecipe("CustomGrpcImpl::CreateClient");

StartRecipe("CustomGrpcImpl::StopServer");
ARROW_RETURN_NOT_OK(server->Shutdown());
ARROW_RETURN_NOT_OK(server->Wait());
rout << "Server shut down successfully" << std::endl;
EndRecipe("CustomGrpcImpl::StopServer");

return arrow::Status::OK();
}

Expand Down
11 changes: 5 additions & 6 deletions cpp/dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ channels:
- conda-forge
dependencies:
- python=3.10
- pip
- pip:
- --index-url https://pypi.anaconda.org/scientific-python-nightly-wheels/simple
- pyarrow
- compilers
- cmake
- ninja
Expand All @@ -27,11 +31,6 @@ dependencies:
- gmock
- clang-tools
- zlib
- grpc-cpp
- protobuf
- abseil-cpp
- c-ares
- re2
- thrift-cpp
- openssl
- rapidjson
- snappy
Loading