Skip to content

Commit

Permalink
GH-45137: [CI][C++] Add a GCC 15 job (#45138)
Browse files Browse the repository at this point in the history
### Rationale for this change

GCC 15 isn't released yet but we'll be able to add support for the latest GCC in a timely manner with this.

### What changes are included in this PR?

Add a GCC 15 job based on Debian GNU/Linux experimental.

### Are these changes tested?

Yes.

### Are there any user-facing changes?

No.
* GitHub Issue: #45137

Authored-by: Sutou Kouhei <[email protected]>
Signed-off-by: Jonathan Keane <[email protected]>
  • Loading branch information
kou authored Jan 1, 2025
1 parent 7f3b32e commit 0b6a687
Show file tree
Hide file tree
Showing 7 changed files with 193 additions and 44 deletions.
2 changes: 1 addition & 1 deletion .env
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ CLANG_TOOLS=14
CUDA=11.2.2
DASK=latest
DOTNET=8.0
GCC_VERSION=""
GCC=
HDFS=3.2.1
JDK=11
KARTOTHEK=latest
Expand Down
143 changes: 143 additions & 0 deletions ci/docker/debian-experimental-cpp.dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

ARG arch=amd64
FROM ${arch}/debian:experimental
ARG arch

ENV DEBIAN_FRONTEND noninteractive

ARG gcc
ARG llvm
RUN if [ -n "${gcc}" ]; then \
gcc_package_suffix="-${gcc}"; \
else \
gcc_package_suffix=""; \
fi && \
if [ -n "${llvm}" ]; then \
llvm_package_suffix="-${llvm}"; \
else \
llvm_package_suffix=""; \
fi && \
apt-get update -y -q && \
apt-get install -y -q --no-install-recommends \
autoconf \
ccache \
cmake \
curl \
g++ \
gcc \
gdb \
git \
libbenchmark-dev \
libboost-filesystem-dev \
libboost-system-dev \
libbrotli-dev \
libbz2-dev \
libc-ares-dev \
libcurl4-openssl-dev \
libgflags-dev \
libgmock-dev \
libgoogle-glog-dev \
libgrpc++-dev \
libidn2-dev \
libkrb5-dev \
libldap-dev \
liblz4-dev \
libnghttp2-dev \
libprotobuf-dev \
libprotoc-dev \
libpsl-dev \
libre2-dev \
librtmp-dev \
libsnappy-dev \
libsqlite3-dev \
libssh-dev \
libssh2-1-dev \
libssl-dev \
libthrift-dev \
libutf8proc-dev \
libxml2-dev \
libxsimd-dev \
libzstd-dev \
make \
ninja-build \
nlohmann-json3-dev \
npm \
opentelemetry-cpp-dev \
pkg-config \
protobuf-compiler-grpc \
python3-dev \
python3-pip \
python3-venv \
rapidjson-dev \
rsync \
tzdata \
zlib1g-dev && \
apt-get install -y -q --no-install-recommends -t experimental \
clang${llvm_package_suffix} \
g++${gcc_package_suffix} \
gcc${gcc_package_suffix} \
llvm${llvm_package_suffix}-dev && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*

COPY ci/scripts/install_minio.sh /arrow/ci/scripts/
RUN /arrow/ci/scripts/install_minio.sh latest /usr/local

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

COPY ci/scripts/install_azurite.sh /arrow/ci/scripts/
RUN /arrow/ci/scripts/install_azurite.sh

COPY ci/scripts/install_sccache.sh /arrow/ci/scripts/
RUN /arrow/ci/scripts/install_sccache.sh unknown-linux-musl /usr/local/bin

# Prioritize system packages and local installation.
ENV ARROW_ACERO=ON \
ARROW_AZURE=ON \
ARROW_BUILD_TESTS=ON \
ARROW_DATASET=ON \
ARROW_DEPENDENCY_SOURCE=SYSTEM \
ARROW_DATASET=ON \
ARROW_FLIGHT=ON \
ARROW_FLIGHT_SQL=ON \
ARROW_GANDIVA=ON \
ARROW_GCS=ON \
ARROW_HOME=/usr/local \
ARROW_JEMALLOC=ON \
ARROW_ORC=ON \
ARROW_PARQUET=ON \
ARROW_S3=ON \
ARROW_SUBSTRAIT=ON \
ARROW_USE_CCACHE=ON \
ARROW_WITH_BROTLI=ON \
ARROW_WITH_BZ2=ON \
ARROW_WITH_LZ4=ON \
ARROW_WITH_OPENTELEMETRY=ON \
ARROW_WITH_SNAPPY=ON \
ARROW_WITH_ZLIB=ON \
ARROW_WITH_ZSTD=ON \
AWSSDK_SOURCE=BUNDLED \
Azure_SOURCE=BUNDLED \
CC=gcc${gcc:+-${gcc}} \
CXX=g++${gcc:+-${gcc}} \
google_cloud_cpp_storage_SOURCE=BUNDLED \
ORC_SOURCE=BUNDLED \
PATH=/usr/lib/ccache/:$PATH \
PYTHON=python3
8 changes: 4 additions & 4 deletions ci/docker/linux-apt-r.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,10 @@ RUN apt-get update -y && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*

ARG gcc_version=""
RUN if [ "${gcc_version}" != "" ]; then \
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${gcc_version} 100 && \
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${gcc_version} 100 && \
ARG gcc=""
RUN if [ "${gcc}" != "" ]; then \
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${gcc} 100 && \
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${gcc} 100 && \
update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30 && \
update-alternatives --set cc /usr/bin/gcc && \
update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30 && \
Expand Down
21 changes: 8 additions & 13 deletions ci/docker/ubuntu-22.04-cpp.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -137,32 +137,27 @@ RUN cd ~ && git clone https://github.com/emscripten-core/emsdk.git && \
echo "Installed emsdk to:" ~/emsdk


ARG gcc_version=""
RUN if [ "${gcc_version}" = "" ]; then \
ARG gcc=""
RUN if [ "${gcc}" = "" ]; then \
apt-get update -y -q && \
apt-get install -y -q --no-install-recommends \
g++ \
gcc; \
else \
if [ "${gcc_version}" -gt "12" ]; then \
apt-get update -y -q && \
apt-get install -y -q --no-install-recommends software-properties-common && \
add-apt-repository ppa:ubuntu-toolchain-r/volatile; \
fi; \
apt-get update -y -q && \
apt-get install -y -q --no-install-recommends \
g++-${gcc_version} \
gcc-${gcc_version} && \
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${gcc_version} 100 && \
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${gcc_version} 100 && \
g++-${gcc} \
gcc-${gcc} && \
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${gcc} 100 && \
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${gcc} 100 && \
update-alternatives --install \
/usr/bin/$(uname --machine)-linux-gnu-gcc \
$(uname --machine)-linux-gnu-gcc \
/usr/bin/$(uname --machine)-linux-gnu-gcc-${gcc_version} 100 && \
/usr/bin/$(uname --machine)-linux-gnu-gcc-${gcc} 100 && \
update-alternatives --install \
/usr/bin/$(uname --machine)-linux-gnu-g++ \
$(uname --machine)-linux-gnu-g++ \
/usr/bin/$(uname --machine)-linux-gnu-g++-${gcc_version} 100 && \
/usr/bin/$(uname --machine)-linux-gnu-g++-${gcc} 100 && \
update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 100 && \
update-alternatives --set cc /usr/bin/gcc && \
update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 100 && \
Expand Down
21 changes: 8 additions & 13 deletions ci/docker/ubuntu-24.04-cpp.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -128,32 +128,27 @@ RUN apt-get update -y -q && \
apt-get clean && \
rm -rf /var/lib/apt/lists*

ARG gcc_version=""
RUN if [ "${gcc_version}" = "" ]; then \
ARG gcc=""
RUN if [ "${gcc}" = "" ]; then \
apt-get update -y -q && \
apt-get install -y -q --no-install-recommends \
g++ \
gcc; \
else \
if [ "${gcc_version}" -gt "14" ]; then \
apt-get update -y -q && \
apt-get install -y -q --no-install-recommends software-properties-common && \
add-apt-repository ppa:ubuntu-toolchain-r/volatile; \
fi; \
apt-get update -y -q && \
apt-get install -y -q --no-install-recommends \
g++-${gcc_version} \
gcc-${gcc_version} && \
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${gcc_version} 100 && \
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${gcc_version} 100 && \
g++-${gcc} \
gcc-${gcc} && \
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${gcc} 100 && \
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${gcc} 100 && \
update-alternatives --install \
/usr/bin/$(uname --machine)-linux-gnu-gcc \
$(uname --machine)-linux-gnu-gcc \
/usr/bin/$(uname --machine)-linux-gnu-gcc-${gcc_version} 100 && \
/usr/bin/$(uname --machine)-linux-gnu-gcc-${gcc} 100 && \
update-alternatives --install \
/usr/bin/$(uname --machine)-linux-gnu-g++ \
$(uname --machine)-linux-gnu-g++ \
/usr/bin/$(uname --machine)-linux-gnu-g++-${gcc_version} 100 && \
/usr/bin/$(uname --machine)-linux-gnu-g++-${gcc} 100 && \
update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 100 && \
update-alternatives --set cc /usr/bin/gcc && \
update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 100 && \
Expand Down
25 changes: 21 additions & 4 deletions dev/tasks/tasks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,13 @@ groups:

test:
- test-*
# Can be removed after we improved C++20 support
- ~test-debian-experimental-cpp-gcc-15

cpp:
- test-*cpp*
# Can be removed after we improved C++20 support
- ~test-debian-experimental-cpp-gcc-15
- example-*cpp*

c-glib:
Expand Down Expand Up @@ -157,6 +161,8 @@ groups:

nightly-tests:
- test-*
# Can be removed after we improved C++20 support
- ~test-debian-experimental-cpp-gcc-15
- example-*

nightly-packaging:
Expand Down Expand Up @@ -935,7 +941,7 @@ tasks:
params:
env:
UBUNTU: 24.04
GCC_VERSION: 13
GCC: 13
image: ubuntu-cpp-bundled

test-ubuntu-24.04-cpp:
Expand All @@ -954,7 +960,7 @@ tasks:
params:
env:
CLANG_TOOLS: 15
GCC_VERSION: 14
GCC: 14
LLVM: 15
UBUNTU: 24.04
# rapidjson 1.1.0 has an error caught by gcc 14.
Expand Down Expand Up @@ -997,6 +1003,17 @@ tasks:
image: debian-cpp
{% endfor %}

test-debian-experimental-cpp-gcc-15:
ci: github
template: docker-tests/github.linux.yml
params:
env:
ARCH: "amd64"
DEBIAN: "experimental"
GCC: "15"
flags: "-e CMAKE_CXX_STANDARD=20"
image: debian-cpp

test-fedora-39-cpp:
ci: github
template: docker-tests/github.linux.yml
Expand Down Expand Up @@ -1301,7 +1318,7 @@ tasks:
params:
env:
UBUNTU: 22.04
GCC_VERSION: 11
GCC: 11
image: ubuntu-r-only-r

# This also has -flto=auto
Expand All @@ -1311,7 +1328,7 @@ tasks:
params:
env:
UBUNTU: 22.04
GCC_VERSION: 12
GCC: 12
image: ubuntu-r-only-r

test-r-minimal-build:
Expand Down
17 changes: 8 additions & 9 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -188,8 +188,6 @@ volumes:
name: ${ARCH}-conda-ccache
debian-ccache:
name: ${ARCH}-debian-${DEBIAN}-ccache
debian-rust:
name: ${ARCH}-debian-${DEBIAN}-rust
fedora-ccache:
name: ${ARCH}-fedora-${FEDORA}-ccache
maven-cache:
Expand Down Expand Up @@ -346,7 +344,7 @@ services:
# docker compose run --rm debian-cpp
# Parameters:
# ARCH: amd64, arm64v8, ...
# DEBIAN: 12
# DEBIAN: 12, experimental
image: ${REPO}:${ARCH}-debian-${DEBIAN}-cpp
build:
context: .
Expand All @@ -355,6 +353,7 @@ services:
- ${REPO}:${ARCH}-debian-${DEBIAN}-cpp
args:
arch: ${ARCH}
gcc: ${GCC}
llvm: ${LLVM}
shm_size: *shm-size
ulimits: *ulimits
Expand Down Expand Up @@ -389,8 +388,8 @@ services:
arch: ${ARCH}
base: "${ARCH}/ubuntu:${UBUNTU}"
clang_tools: ${CLANG_TOOLS}
gcc: ${GCC}
llvm: ${LLVM}
gcc_version: ${GCC_VERSION}
shm_size: *shm-size
cap_add:
- SYS_ADMIN
Expand Down Expand Up @@ -425,8 +424,8 @@ services:
arch: ${ARCH}
base: "${ARCH}/ubuntu:${UBUNTU}"
clang_tools: ${CLANG_TOOLS}
gcc: ${GCC}
llvm: ${LLVM}
gcc_version: ${GCC_VERSION}
shm_size: *shm-size
cap_add:
- SYS_ADMIN
Expand Down Expand Up @@ -1517,12 +1516,12 @@ services:
- ${REPO}:${ARCH}-ubuntu-${UBUNTU}-r-${R}
args:
arch: ${ARCH}
r: ${R}
base: ${REPO}:${ARCH}-ubuntu-${UBUNTU}-cpp
gcc_version: ${GCC_VERSION}
tz: ${TZ}
r_prune_deps: ${R_PRUNE_DEPS}
gcc: ${GCC}
r: ${R}
r_duckdb_dev: ${R_DUCKDB_DEV:-}
r_prune_deps: ${R_PRUNE_DEPS}
tz: ${TZ}
shm_size: *shm-size
environment:
<<: [*common, *ccache, *sccache]
Expand Down

0 comments on commit 0b6a687

Please sign in to comment.