1# Licensed to the Apache Software Foundation (ASF) under one 2# or more contributor license agreements. See the NOTICE file 3# distributed with this work for additional information 4# regarding copyright ownership. The ASF licenses this file 5# to you under the Apache License, Version 2.0 (the 6# "License"); you may not use this file except in compliance 7# with the License. You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, 12# software distributed under the License is distributed on an 13# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14# KIND, either express or implied. See the License for the 15# specific language governing permissions and limitations 16# under the License. 17 18ARG base=amd64/ubuntu:20.04 19FROM ${base} 20ARG arch 21 22SHELL ["/bin/bash", "-o", "pipefail", "-c"] 23 24RUN echo "debconf debconf/frontend select Noninteractive" | \ 25 debconf-set-selections 26 27# Installs LLVM toolchain, for Gandiva and testing other compilers 28# 29# Note that this is installed before the base packages to improve iteration 30# while debugging package list with docker build. 31ARG clang_tools 32ARG llvm 33RUN if [ "${llvm}" -gt "10" ]; then \ 34 apt-get update -y -q && \ 35 apt-get install -y -q --no-install-recommends \ 36 apt-transport-https \ 37 ca-certificates \ 38 gnupg \ 39 wget && \ 40 wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 41 echo "deb https://apt.llvm.org/focal/ llvm-toolchain-focal-${llvm} main" > \ 42 /etc/apt/sources.list.d/llvm.list && \ 43 if [ "${clang_tools}" != "${llvm}" -a "${clang_tools}" -gt 10 ]; then \ 44 echo "deb https://apt.llvm.org/focal/ llvm-toolchain-focal-${clang_tools} main" > \ 45 /etc/apt/sources.list.d/clang-tools.list; \ 46 fi \ 47 fi && \ 48 apt-get update -y -q && \ 49 apt-get install -y -q --no-install-recommends \ 50 clang-${clang_tools} \ 51 clang-${llvm} \ 52 clang-format-${clang_tools} \ 53 clang-tidy-${clang_tools} \ 54 llvm-${llvm}-dev && \ 55 apt-get clean && \ 56 rm -rf /var/lib/apt/lists* 57 58# Installs C++ toolchain and dependencies 59RUN apt-get update -y -q && \ 60 apt-get install -y -q --no-install-recommends \ 61 autoconf \ 62 ca-certificates \ 63 ccache \ 64 cmake \ 65 g++ \ 66 gcc \ 67 gdb \ 68 git \ 69 libbenchmark-dev \ 70 libboost-filesystem-dev \ 71 libboost-system-dev \ 72 libbrotli-dev \ 73 libbz2-dev \ 74 libc-ares-dev \ 75 libcurl4-openssl-dev \ 76 libgflags-dev \ 77 libgoogle-glog-dev \ 78 liblz4-dev \ 79 libprotobuf-dev \ 80 libprotoc-dev \ 81 libre2-dev \ 82 libsnappy-dev \ 83 libssl-dev \ 84 libthrift-dev \ 85 libutf8proc-dev \ 86 libzstd-dev \ 87 make \ 88 ninja-build \ 89 pkg-config \ 90 protobuf-compiler \ 91 python3-pip \ 92 rapidjson-dev \ 93 tzdata \ 94 wget && \ 95 apt-get clean && \ 96 rm -rf /var/lib/apt/lists* 97 98COPY ci/scripts/install_minio.sh /arrow/ci/scripts/ 99RUN /arrow/ci/scripts/install_minio.sh ${arch} linux latest /usr/local 100COPY ci/scripts/install_gcs_testbench.sh /arrow/ci/scripts/ 101RUN /arrow/ci/scripts/install_gcs_testbench.sh ${arch} default 102 103# Prioritize system packages and local installation 104# The following dependencies will be downloaded due to missing/invalid packages 105# provided by the distribution: 106# - libc-ares-dev does not install CMake config files 107# - flatbuffer is not packaged 108# - libgtest-dev only provide sources 109# - libprotobuf-dev only provide sources 110ENV ARROW_BUILD_TESTS=ON \ 111 ARROW_DEPENDENCY_SOURCE=SYSTEM \ 112 ARROW_DATASET=ON \ 113 ARROW_FLIGHT=OFF \ 114 ARROW_GANDIVA=ON \ 115 ARROW_GCS=ON \ 116 ARROW_HDFS=ON \ 117 ARROW_HOME=/usr/local \ 118 ARROW_INSTALL_NAME_RPATH=OFF \ 119 ARROW_NO_DEPRECATED_API=ON \ 120 ARROW_ORC=ON \ 121 ARROW_PARQUET=ON \ 122 ARROW_PLASMA=ON \ 123 ARROW_S3=ON \ 124 ARROW_USE_ASAN=OFF \ 125 ARROW_USE_CCACHE=ON \ 126 ARROW_USE_UBSAN=OFF \ 127 ARROW_WITH_BROTLI=ON \ 128 ARROW_WITH_BZ2=ON \ 129 ARROW_WITH_LZ4=ON \ 130 ARROW_WITH_SNAPPY=ON \ 131 ARROW_WITH_ZLIB=ON \ 132 ARROW_WITH_ZSTD=ON \ 133 ASAN_SYMBOLIZER_PATH=/usr/lib/llvm-${llvm}/bin/llvm-symbolizer \ 134 AWSSDK_SOURCE=BUNDLED \ 135 google_cloud_cpp_storage_SOURCE=BUNDLED \ 136 GTest_SOURCE=BUNDLED \ 137 gRPC_SOURCE=BUNDLED \ 138 ORC_SOURCE=BUNDLED \ 139 PARQUET_BUILD_EXAMPLES=ON \ 140 PARQUET_BUILD_EXECUTABLES=ON \ 141 PATH=/usr/lib/ccache/:$PATH \ 142 Protobuf_SOURCE=BUNDLED \ 143 PYTHON=python3 144