Skip to content

Commit

Permalink
ARROW-14506: [C++] Conda support for google-cloud-cpp
Browse files Browse the repository at this point in the history
This PR adds support for `google-cloud-cpp` to the Conda files.
Probably the most difficult change to grok is the change to compile with
C++17 when using Conda:

- Conda defaults all its builds to C++17,
  [this bug](conda/conda-build#3375) goes into
  some detail as to why.
- Arrow defaults to C++11 if no `CMAKE_CXX_STANDARD` argument is
  provided.
- Abseil's ABI changes when used from C++11 vs. C++17, see
  abseil/abseil-cpp#696
- Therefore, one must compile with C++17 to use Abseil in Conda.
- And because `google-cloud-cpp` has a direct dependency on Abseil,
  exposed through the headers, one must use C++17 to use
  `google-cloud-cpp` too.
  • Loading branch information
coryan committed Jan 19, 2022
1 parent 9938f70 commit 584f3f4
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 3 deletions.
4 changes: 4 additions & 0 deletions ci/conda_env_cpp.txt
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,17 @@ cmake
gflags
glog
gmock>=1.10.0
google-cloud-cpp>=1.34.0
grpc-cpp>=1.27.3
gtest>=1.10.0
libprotobuf
libutf8proc
lz4-c
make
ninja
# Required by google-cloud-cpp, the Conda package is missing the dependency:
# https://github.com/conda-forge/google-cloud-cpp-feedstock/issues/28
nlohmann_json
pkg-config
python
rapidjson
Expand Down
9 changes: 6 additions & 3 deletions ci/docker/conda-cpp.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,6 @@ FROM ${repo}:${arch}-conda
COPY ci/scripts/install_minio.sh /arrow/ci/scripts
RUN /arrow/ci/scripts/install_minio.sh latest /opt/conda

COPY ci/scripts/install_gcs_testbench.sh /arrow/ci/scripts
RUN /arrow/ci/scripts/install_gcs_testbench.sh default

# install the required conda packages into the test environment
COPY ci/conda_env_cpp.txt \
ci/conda_env_gandiva.txt \
Expand All @@ -37,12 +34,17 @@ RUN mamba install \
valgrind && \
mamba clean --all

# We want to install the GCS testbench using the same Python binary that the Conda code will use.
COPY ci/scripts/install_gcs_testbench.sh /arrow/ci/scripts
RUN /arrow/ci/scripts/install_gcs_testbench.sh default

ENV ARROW_BUILD_TESTS=ON \
ARROW_DATASET=ON \
ARROW_DEPENDENCY_SOURCE=CONDA \
ARROW_FLIGHT=ON \
ARROW_FLIGHT_SQL=ON \
ARROW_GANDIVA=ON \
ARROW_GCS=ON \
ARROW_HOME=$CONDA_PREFIX \
ARROW_ORC=ON \
ARROW_PARQUET=ON \
Expand All @@ -55,6 +57,7 @@ ENV ARROW_BUILD_TESTS=ON \
ARROW_WITH_SNAPPY=ON \
ARROW_WITH_ZLIB=ON \
ARROW_WITH_ZSTD=ON \
CMAKE_CXX_STANDARD=17 \
GTest_SOURCE=BUNDLED \
PARQUET_BUILD_EXAMPLES=ON \
PARQUET_BUILD_EXECUTABLES=ON \
Expand Down
1 change: 1 addition & 0 deletions ci/scripts/cpp_build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ cmake \
-DCMAKE_BUILD_TYPE=${ARROW_BUILD_TYPE:-debug} \
-DCMAKE_C_FLAGS="${CFLAGS:-}" \
-DCMAKE_CXX_FLAGS="${CXXFLAGS:-}" \
-DCMAKE_CXX_STANDARD="${CMAKE_CXX_STANDARD:-11}" \
-DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR:-lib} \
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX:-${ARROW_HOME}} \
-DCMAKE_UNITY_BUILD=${CMAKE_UNITY_BUILD:-OFF} \
Expand Down
1 change: 1 addition & 0 deletions dev/tasks/conda-recipes/arrow-cpp/build-arrow.sh
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ cmake \
-DARROW_DEPENDENCY_SOURCE=SYSTEM \
-DARROW_FLIGHT=ON \
-DARROW_FLIGHT_REQUIRE_TLSCREDENTIALSOPTIONS=ON \
-DARROW_GCS=ON \
-DARROW_HDFS=ON \
-DARROW_JEMALLOC=ON \
-DARROW_MIMALLOC=ON \
Expand Down
1 change: 1 addition & 0 deletions dev/tasks/conda-recipes/arrow-cpp/meta.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ outputs:
- c-ares
- gflags
- glog
- google-cloud-cpp >=1.34.0
- grpc-cpp
- libprotobuf
- clangdev 10 # [not (osx and arm64)]
Expand Down

0 comments on commit 584f3f4

Please sign in to comment.