diff --git a/.env b/.env index 0b1a988875f79..859672e7330cf 100644 --- a/.env +++ b/.env @@ -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 diff --git a/ci/docker/debian-experimental-cpp.dockerfile b/ci/docker/debian-experimental-cpp.dockerfile new file mode 100644 index 0000000000000..2721b1d5f2058 --- /dev/null +++ b/ci/docker/debian-experimental-cpp.dockerfile @@ -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 diff --git a/ci/docker/linux-apt-r.dockerfile b/ci/docker/linux-apt-r.dockerfile index 4be5adf246b88..48c7154ef0eb0 100644 --- a/ci/docker/linux-apt-r.dockerfile +++ b/ci/docker/linux-apt-r.dockerfile @@ -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 && \ diff --git a/ci/docker/ubuntu-22.04-cpp.dockerfile b/ci/docker/ubuntu-22.04-cpp.dockerfile index 2e4d658bf9549..28cef2946385c 100644 --- a/ci/docker/ubuntu-22.04-cpp.dockerfile +++ b/ci/docker/ubuntu-22.04-cpp.dockerfile @@ -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 && \ diff --git a/ci/docker/ubuntu-24.04-cpp.dockerfile b/ci/docker/ubuntu-24.04-cpp.dockerfile index 53113bccfe4fa..3f486b09f95ff 100644 --- a/ci/docker/ubuntu-24.04-cpp.dockerfile +++ b/ci/docker/ubuntu-24.04-cpp.dockerfile @@ -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 && \ diff --git a/dev/tasks/tasks.yml b/dev/tasks/tasks.yml index c8c311f5137df..9f04d33f83ca0 100644 --- a/dev/tasks/tasks.yml +++ b/dev/tasks/tasks.yml @@ -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: @@ -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: @@ -935,7 +941,7 @@ tasks: params: env: UBUNTU: 24.04 - GCC_VERSION: 13 + GCC: 13 image: ubuntu-cpp-bundled test-ubuntu-24.04-cpp: @@ -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. @@ -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 @@ -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 @@ -1311,7 +1328,7 @@ tasks: params: env: UBUNTU: 22.04 - GCC_VERSION: 12 + GCC: 12 image: ubuntu-r-only-r test-r-minimal-build: diff --git a/docker-compose.yml b/docker-compose.yml index 7aabbb43b491a..51d5951ad61f4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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: @@ -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: . @@ -355,6 +353,7 @@ services: - ${REPO}:${ARCH}-debian-${DEBIAN}-cpp args: arch: ${ARCH} + gcc: ${GCC} llvm: ${LLVM} shm_size: *shm-size ulimits: *ulimits @@ -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 @@ -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 @@ -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]