FROM docker.io/library/debian:13 ENV DEBIAN_FRONTEND=noninteractive RUN sed -i 's|deb.debian.org|mirrors.ustc.edu.cn|g' /etc/apt/sources.list.d/debian.sources \ && apt-get update \ && apt-get install --yes --no-install-recommends \ autoconf \ automake \ build-essential \ bzip2 \ ca-certificates \ cmake \ curl \ git \ libtool \ ninja-build \ pkg-config \ which \ makeself \ aria2 \ && rm -rf /var/lib/apt/lists/* # Install prefix of every dependency, and the Debian multiarch directory name (`gcc -dumpmachine`) # its libraries are installed under; build.sh derives the latter from `uname -m`. ARG PREFIX=/opt/local ARG MULTIARCH=x86_64-linux-gnu # Make the compiler, CMake, pkg-config and the shell find earlier dependencies under a prefix other # than the default /opt/local. CMake (>= 3.29) takes its default install prefix from the environment. ENV PATH=${PREFIX}/bin:${PATH} \ C_INCLUDE_PATH=${PREFIX}/include \ CPLUS_INCLUDE_PATH=${PREFIX}/include \ LIBRARY_PATH=${PREFIX}/lib/${MULTIARCH}:${PREFIX}/lib \ PKG_CONFIG_PATH=${PREFIX}/lib/${MULTIARCH}/pkgconfig:${PREFIX}/lib/pkgconfig:${PREFIX}/share/pkgconfig \ CMAKE_PREFIX_PATH=${PREFIX} \ CMAKE_INSTALL_PREFIX=${PREFIX} RUN test "$(cmake --version | sed -n '1s/[^0-9]*//p' | cut -d. -f2)" -ge 29 # Rust is a build tool, not a library, so it is installed under /usr/local regardless of ${PREFIX}. RUN --mount=type=bind,from=sources,source=rust,target=/tmp/rust \ mkdir rust-src \ && tar -xJf "/tmp/rust/rust-1.99.1-$(uname -m)-unknown-linux-gnu.tar.xz" -C rust-src --strip-components=1 \ && rust-src/install.sh --prefix=/usr/local --without=rust-docs \ && rm -rf rust-src RUN --mount=type=bind,from=sources,source=boost_1_83_0.tar.bz2,target=/tmp/boost.tar.bz2 \ mkdir src \ && tar --extract --bzip2 --file=/tmp/boost.tar.bz2 --directory=src --strip-components=1 \ && cd src \ && ./bootstrap.sh --prefix=${PREFIX} --libdir=${PREFIX}/lib/$(gcc -dumpmachine) \ && ./b2 --jobs="$(nproc)" \ --with-atomic \ --with-chrono \ --with-context \ --with-date_time \ --with-filesystem \ --with-program_options \ --with-regex \ --with-system \ --with-thread \ cflags=-fPIC \ cxxflags=-fPIC \ link=static \ pch=off \ runtime-link=shared \ threading=multi \ variant=release \ install \ && cd .. \ && rm -rf src RUN --mount=type=bind,from=sources,source=openssl-openssl-3.0.15.tar.gz,target=/tmp/openssl.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/openssl.tar.gz --directory=src --strip-components=1 \ && cd src \ && ./Configure --prefix=${PREFIX} --libdir=lib/$(gcc -dumpmachine) no-shared no-tests -fPIC \ && make --jobs="$(nproc)" \ && make install_sw \ && cd .. \ && rm -rf src COPY libevent-libdir-install.patch /tmp/ RUN --mount=type=bind,from=sources,source=libevent-release-2.1.12-stable.tar.gz,target=/tmp/libevent.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/libevent.tar.gz --directory=src --strip-components=1 \ && git -C src apply /tmp/libevent-libdir-install.patch \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DEVENT__DISABLE_BENCHMARK=ON \ -DEVENT__DISABLE_REGRESS=ON \ -DEVENT__DISABLE_SAMPLES=ON \ -DEVENT__DISABLE_TESTS=ON \ -DEVENT__LIBRARY_TYPE=STATIC \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src /tmp/libevent-libdir-install.patch RUN --mount=type=bind,from=sources,source=zstd-v1.5.7.tar.gz,target=/tmp/zstd.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/zstd.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src/build/cmake -B build -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DZSTD_BUILD_CONTRIB=OFF \ -DZSTD_BUILD_PROGRAMS=OFF \ -DZSTD_BUILD_SHARED=OFF \ -DZSTD_BUILD_STATIC=ON \ -DZSTD_BUILD_TESTS=OFF \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=zlib-v1.3.1.tar.gz,target=/tmp/zlib.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/zlib.tar.gz --directory=src --strip-components=1 \ && cd src \ && CFLAGS=-fPIC ./configure --prefix=${PREFIX} --libdir=${PREFIX}/lib/$(gcc -dumpmachine) --static \ && make --jobs="$(nproc)" \ && make install \ && cd .. \ && rm -rf src RUN --mount=type=bind,from=sources,source=protobuf-v3.21.12.tar.gz,target=/tmp/protobuf.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/protobuf.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -Dprotobuf_BUILD_TESTS=OFF \ -Dprotobuf_BUILD_SHARED_LIBS=OFF \ -Dprotobuf_WITH_ZLIB=ON \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=log4cplus-REL_2_0_5.tar.gz,target=/tmp/log4cplus.tar.gz \ --mount=type=bind,from=sources,source=ThreadPool-cc0b6371d3963f7028c2da5fc007733f9f3bf205.tar.gz,target=/tmp/threadpool.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/log4cplus.tar.gz --directory=src --strip-components=1 \ && tar --extract --gzip --file=/tmp/threadpool.tar.gz --directory=src/threadpool --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DLOG4CPLUS_BUILD_TESTING=OFF \ -DWITH_UNIT_TESTS=OFF \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=fmt-12.2.0.tar.gz,target=/tmp/fmt.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/fmt.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DFMT_DOC=OFF \ -DFMT_TEST=OFF \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=spdlog-v1.17.0.tar.gz,target=/tmp/spdlog.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/spdlog.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DSPDLOG_BUILD_BENCH=OFF \ -DSPDLOG_BUILD_EXAMPLE=OFF \ -DSPDLOG_BUILD_TESTS=OFF \ -DSPDLOG_FMT_EXTERNAL=ON \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=magic_enum-v0.9.8.tar.gz,target=/tmp/magic_enum.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/magic_enum.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DMAGIC_ENUM_OPT_BUILD_EXAMPLES=OFF \ -DMAGIC_ENUM_OPT_BUILD_TESTS=OFF \ -DMAGIC_ENUM_OPT_INSTALL=ON \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=fast_float-v8.2.10.tar.gz,target=/tmp/fast_float.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/fast_float.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DFASTFLOAT_BENCHMARKS=OFF \ -DFASTFLOAT_INSTALL=ON \ -DFASTFLOAT_TEST=OFF \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=sparse-map-v0.7.0.tar.gz,target=/tmp/sparse-map.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/sparse-map.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=gflags-v2.3.1.tar.gz,target=/tmp/gflags.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/gflags.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ -DBUILD_STATIC_LIBS=ON \ -DBUILD_TESTING=OFF \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DINSTALL_HEADERS=ON \ -DINSTALL_SHARED_LIBS=OFF \ -DINSTALL_STATIC_LIBS=ON \ -DLIBRARY_INSTALL_DIR=${PREFIX}/lib/$(gcc -dumpmachine) \ -DREGISTER_INSTALL_PREFIX=OFF \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=glog-v0.7.1.tar.gz,target=/tmp/glog.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/glog.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ -DBUILD_TESTING=OFF \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DWITH_GFLAGS=ON \ -DWITH_GTEST=OFF \ -DWITH_PKGCONFIG=ON \ -DWITH_UNWIND=none \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=liburing-liburing-2.15.tar.gz,target=/tmp/liburing.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/liburing.tar.gz --directory=src --strip-components=1 \ && cd src \ && CFLAGS=-fPIC ./configure --prefix=${PREFIX} --libdir=${PREFIX}/lib/$(gcc -dumpmachine) --libdevdir=${PREFIX}/lib/$(gcc -dumpmachine) \ && make --jobs="$(nproc)" ENABLE_SHARED=0 library \ && make ENABLE_SHARED=0 install \ && cd .. \ && rm -rf src RUN --mount=type=bind,from=sources,source=libaio_0.3.113.orig.tar.gz,target=/tmp/libaio.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/libaio.tar.gz --directory=src --strip-components=1 \ && make --directory=src --jobs="$(nproc)" ENABLE_SHARED=0 \ && make --directory=src ENABLE_SHARED=0 prefix=${PREFIX} libdir=${PREFIX}/lib/$(gcc -dumpmachine) install \ && rm -rf src RUN --mount=type=bind,from=sources,source=libdwarf-code-v2.3.2.tar.gz,target=/tmp/libdwarf-code.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/libdwarf-code.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_DWARFDUMP=OFF \ -DBUILD_DWARFEXAMPLE=OFF \ -DBUILD_DWARFGEN=OFF \ -DBUILD_NON_SHARED=ON \ -DBUILD_SHARED=OFF \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DDO_TESTING=OFF \ -DENABLE_DECOMPRESSION=ON \ -DPIC_ALWAYS=ON \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=libsodium-1.0.20-RELEASE.tar.gz,target=/tmp/libsodium.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/libsodium.tar.gz --directory=src --strip-components=1 \ && cd src \ && ./autogen.sh \ && ./configure --prefix=${PREFIX} --libdir=${PREFIX}/lib/$(gcc -dumpmachine) --disable-shared --enable-static --with-pic \ && make --jobs="$(nproc)" \ && make install \ && cd .. \ && rm -rf src RUN --mount=type=bind,from=sources,source=xxHash-v0.8.3.tar.gz,target=/tmp/xxHash.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/xxHash.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src/cmake_unofficial -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DXXHASH_BUILD_XXHSUM=OFF \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=googletest-v1.17.0.tar.gz,target=/tmp/googletest.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/googletest.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_GMOCK=ON \ -DBUILD_SHARED_LIBS=OFF \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DINSTALL_GTEST=ON \ -Dgtest_build_samples=OFF \ -Dgtest_build_tests=OFF \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=numactl-v2.0.19.tar.gz,target=/tmp/numactl.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/numactl.tar.gz --directory=src --strip-components=1 \ && cd src \ && ./autogen.sh \ && CFLAGS=-fPIC ./configure --prefix=${PREFIX} --libdir=${PREFIX}/lib/$(gcc -dumpmachine) --disable-shared --enable-static \ && make --jobs="$(nproc)" \ && make install \ && cd .. \ && rm -rf src RUN --mount=type=bind,from=sources,source=folly-v2026.08.03.00.tar.gz,target=/tmp/folly.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/folly.tar.gz --directory=src --strip-components=1 \ && CXXFLAGS="-DGLOG_USE_GLOG_EXPORT" \ cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DBOOST_LINK_STATIC=ON \ -DBUILD_BENCHMARKS=OFF \ -DBUILD_SHARED_LIBS=OFF \ -DBUILD_TESTS=OFF \ -DCMAKE_INSTALL_DIR=lib/$(gcc -dumpmachine)/cmake/folly \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DLIB_INSTALL_DIR=lib/$(gcc -dumpmachine) \ -DPYTHON_EXTENSIONS=OFF \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=fizz-v2026.08.03.00.tar.gz,target=/tmp/fizz.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/fizz.tar.gz --directory=src --strip-components=1 \ && CXXFLAGS="-DGLOG_USE_GLOG_EXPORT" \ cmake -G Ninja -S src/fizz -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_EXAMPLES=OFF \ -DBUILD_SHARED_LIBS=OFF \ -DBUILD_TESTS=OFF \ -DCMAKE_INSTALL_DIR=lib/$(gcc -dumpmachine)/cmake/fizz \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DLIB_INSTALL_DIR=lib/$(gcc -dumpmachine) \ -Dsodium_USE_STATIC_LIBS=ON \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=wangle-v2026.08.03.00.tar.gz,target=/tmp/wangle.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/wangle.tar.gz --directory=src --strip-components=1 \ && CXXFLAGS="-DGLOG_USE_GLOG_EXPORT" \ cmake -G Ninja -S src/wangle -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_EXAMPLES=OFF \ -DBUILD_SHARED_LIBS=OFF \ -DBUILD_TESTS=OFF \ -DCMAKE_INSTALL_DIR=lib/$(gcc -dumpmachine)/cmake/wangle \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DLIB_INSTALL_DIR=lib/$(gcc -dumpmachine) \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=mvfst-v2026.08.03.00.tar.gz,target=/tmp/mvfst.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/mvfst.tar.gz --directory=src --strip-components=1 \ && CXXFLAGS="-DGLOG_USE_GLOG_EXPORT" \ cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SAMPLES=OFF \ -DBUILD_SHARED_LIBS=OFF \ -DBUILD_TESTS=OFF \ -DBUILD_TOOLS=OFF \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=fbthrift-v2026.08.03.00.tar.gz,target=/tmp/fbthrift.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/fbthrift.tar.gz --directory=src --strip-components=1 \ && CXXFLAGS="-DGLOG_USE_GLOG_EXPORT" \ cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ -DCMAKE_INSTALL_DIR=lib/$(gcc -dumpmachine)/cmake/fbthrift \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DLIB_INSTALL_DIR=lib/$(gcc -dumpmachine) \ -DTHRIFT_BENCHMARKS=OFF \ -Denable_tests=OFF \ -Dthrift_python=OFF \ -Dthriftpy=OFF \ -Dthriftpy3=OFF \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=CacheLib-v2026.08.03.00.tar.gz,target=/tmp/CacheLib.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/CacheLib.tar.gz --directory=src --strip-components=1 \ && CXXFLAGS="-DGLOG_USE_GLOG_EXPORT" \ cmake -G Ninja -S src/cachelib -B build -DCMAKE_BUILD_TYPE=Release \ -DBOOST_LINK_STATIC=ON \ -DBUILD_SHARED_LIBS=OFF \ -DBUILD_TESTS=OFF \ -DCMAKE_INSTALL_DIR=lib/$(gcc -dumpmachine)/cmake/cachelib \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DLIB_INSTALL_DIR=lib/$(gcc -dumpmachine) \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=util-linux-2.42.2.tar.xz,target=/tmp/util-linux.tar.xz \ mkdir src \ && tar --extract --xz --file=/tmp/util-linux.tar.xz --directory=src --strip-components=1 \ && cd src \ && CFLAGS=-fPIC ./configure --prefix=${PREFIX} --libdir=${PREFIX}/lib/$(gcc -dumpmachine) \ --disable-all-programs \ --disable-bash-completion \ --disable-makeinstall-chown \ --disable-nls \ --disable-shared \ --enable-libuuid \ --enable-static \ && make --jobs="$(nproc)" \ && make install \ && cd .. \ && rm -rf src RUN --mount=type=bind,from=sources,source=libzmq-v4.3.5.tar.gz,target=/tmp/libzmq.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/libzmq.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED=OFF \ -DBUILD_STATIC=ON \ -DBUILD_TESTS=OFF \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DENABLE_CPACK=OFF \ -DENABLE_CURVE=ON \ -DENABLE_DRAFTS=OFF \ -DWITH_DOC=OFF \ -DWITH_DOCS=OFF \ -DWITH_LIBSODIUM=ON \ -DWITH_LIBSODIUM_STATIC=ON \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=czmq-v4.2.1.tar.gz,target=/tmp/czmq.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/czmq.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DCZMQ_BUILD_SHARED=OFF \ -DCZMQ_BUILD_STATIC=ON \ -DCZMQ_WITH_LZ4=OFF \ -DCZMQ_WITH_LIBCURL=OFF \ -DCZMQ_WITH_LIBMICROHTTPD=OFF \ -DCZMQ_WITH_NSS=OFF \ -DCZMQ_WITH_SYSTEMD=OFF \ -DCZMQ_WITH_UUID=ON \ -DENABLE_DRAFTS=OFF \ -DLIB_SUFFIX=/$(gcc -dumpmachine) \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=jsoncpp-1.9.8.tar.gz,target=/tmp/jsoncpp.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/jsoncpp.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_OBJECT_LIBS=OFF \ -DBUILD_SHARED_LIBS=OFF \ -DBUILD_STATIC_LIBS=ON \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DJSONCPP_WITH_EXAMPLE=OFF \ -DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF \ -DJSONCPP_WITH_TESTS=OFF \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=librdkafka-v2.15.0.tar.gz,target=/tmp/librdkafka.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/librdkafka.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DENABLE_LZ4_EXT=OFF \ -DRDKAFKA_BUILD_EXAMPLES=OFF \ -DRDKAFKA_BUILD_STATIC=ON \ -DRDKAFKA_BUILD_TESTS=OFF \ -DWITH_CURL=OFF \ -DWITH_PLUGINS=OFF \ -DWITH_SASL=OFF \ -DWITH_SSL=ON \ -DWITH_ZLIB=ON \ -DWITH_ZSTD=ON \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=json-c-json-c-0.19-20260627.tar.gz,target=/tmp/json-c.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/json-c.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_APPS=OFF \ -DBUILD_SHARED_LIBS=OFF \ -DBUILD_STATIC_LIBS=ON \ -DBUILD_TESTING=OFF \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DDISABLE_EXTRA_LIBS=ON \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src COPY rapidjson-generic-string-ref-assignment.patch /tmp/ RUN --mount=type=bind,from=sources,source=rapidjson-v1.1.0.tar.gz,target=/tmp/rapidjson.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/rapidjson.tar.gz --directory=src --strip-components=1 \ && git -C src apply /tmp/rapidjson-generic-string-ref-assignment.patch \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DLIB_INSTALL_DIR=${PREFIX}/lib/$(gcc -dumpmachine) \ -DRAPIDJSON_BUILD_DOC=OFF \ -DRAPIDJSON_BUILD_EXAMPLES=OFF \ -DRAPIDJSON_BUILD_TESTS=OFF \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src /tmp/rapidjson-generic-string-ref-assignment.patch RUN --mount=type=bind,from=sources,source=curl-curl-8_21_0.tar.gz,target=/tmp/curl.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/curl.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_CURL_EXE=OFF \ -DBUILD_EXAMPLES=OFF \ -DBUILD_LIBCURL_DOCS=OFF \ -DBUILD_MISC_DOCS=OFF \ -DBUILD_SHARED_LIBS=OFF \ -DBUILD_STATIC_LIBS=ON \ -DBUILD_TESTING=OFF \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DCURL_BROTLI=OFF \ -DCURL_USE_LIBPSL=OFF \ -DCURL_USE_LIBSSH=OFF \ -DCURL_USE_LIBSSH2=OFF \ -DCURL_USE_OPENSSL=ON \ -DENABLE_CURL_MANUAL=OFF \ -DHTTP_ONLY=ON \ -DUSE_LIBIDN2=OFF \ -DUSE_NGHTTP2=OFF \ -DUSE_NGTCP2=OFF \ -DUSE_QUICHE=OFF \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=hiredis-v1.4.1.tar.gz,target=/tmp/hiredis.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/hiredis.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DENABLE_ASYNC_TESTS=OFF \ -DENABLE_EXAMPLES=OFF \ -DENABLE_NUGET=OFF \ -DENABLE_SSL=OFF \ -DENABLE_SSL_TESTS=OFF \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=gmp-6.3.0.tar.xz,target=/tmp/gmp.tar.xz \ mkdir src \ && tar --extract --xz --file=/tmp/gmp.tar.xz --directory=src --strip-components=1 \ && cd src \ && CFLAGS=-fPIC ./configure --prefix=${PREFIX} --libdir=${PREFIX}/lib/$(gcc -dumpmachine) --disable-shared --enable-static --enable-fat \ && make --jobs="$(nproc)" \ && make install \ && cd .. \ && rm -rf src RUN --mount=type=bind,from=sources,source=nettle-3.10.2.tar.gz,target=/tmp/nettle.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/nettle.tar.gz --directory=src --strip-components=1 \ && cd src \ && CFLAGS=-fPIC ./configure --prefix=${PREFIX} --libdir=${PREFIX}/lib/$(gcc -dumpmachine) \ --disable-documentation \ --disable-shared \ --enable-static \ && make --jobs="$(nproc)" \ && make install \ && cd .. \ && rm -rf src RUN --mount=type=bind,from=sources,source=gnutls-3.8.13.tar.xz,target=/tmp/gnutls.tar.xz \ mkdir src \ && tar --extract --xz --file=/tmp/gnutls.tar.xz --directory=src --strip-components=1 \ && cd src \ && CFLAGS=-fPIC ./configure --prefix=${PREFIX} --libdir=${PREFIX}/lib/$(gcc -dumpmachine) \ --with-included-libtasn1 \ --with-included-unistring \ --disable-cxx \ --disable-doc \ --disable-manpages \ --disable-nls \ --disable-shared \ --disable-tests \ --disable-tools \ --enable-static \ --without-brotli \ --without-idn \ --without-p11-kit \ --without-tpm \ --without-tpm2 \ --without-zlib \ --without-zstd \ && make --jobs="$(nproc)" \ && make install \ && cd .. \ && rm -rf src RUN --mount=type=bind,from=sources,source=libmaxminddb-1.13.3.tar.gz,target=/tmp/libmaxminddb.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/libmaxminddb.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ -DBUILD_TESTING=OFF \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DMAXMINDDB_BUILD_BINARIES=OFF \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=libyaml-0.2.5.tar.gz,target=/tmp/libyaml.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/libyaml.tar.gz --directory=src --strip-components=1 \ && cd src \ && ./bootstrap \ && CFLAGS=-fPIC ./configure --prefix=${PREFIX} --libdir=${PREFIX}/lib/$(gcc -dumpmachine) --disable-shared --enable-static \ && make --jobs="$(nproc)" \ && make install \ && cd .. \ && rm -rf src RUN --mount=type=bind,from=sources,source=libxml2-v2.15.3.tar.gz,target=/tmp/libxml2.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/libxml2.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DLIBXML2_WITH_DOCS=OFF \ -DLIBXML2_WITH_ICU=OFF \ -DLIBXML2_WITH_MODULES=OFF \ -DLIBXML2_WITH_PROGRAMS=OFF \ -DLIBXML2_WITH_PYTHON=OFF \ -DLIBXML2_WITH_TESTS=OFF \ -DLIBXML2_WITH_ZLIB=ON \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=redis-plus-plus-1.3.15.tar.gz,target=/tmp/redis-plus-plus.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/redis-plus-plus.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DREDIS_PLUS_PLUS_BUILD_SHARED=OFF \ -DREDIS_PLUS_PLUS_BUILD_STATIC=ON \ -DREDIS_PLUS_PLUS_BUILD_STATIC_WITH_PIC=ON \ -DREDIS_PLUS_PLUS_BUILD_TEST=OFF \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=libunwind-v1.8.3.tar.gz,target=/tmp/libunwind.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/libunwind.tar.gz --directory=src --strip-components=1 \ && cd src \ && autoreconf --install \ && CFLAGS=-fPIC ./configure --prefix=${PREFIX} --libdir=${PREFIX}/lib/$(gcc -dumpmachine) \ --disable-shared \ --enable-static \ --disable-tests \ --disable-documentation \ --disable-minidebuginfo \ --disable-zlibdebuginfo \ && make --jobs="$(nproc)" \ && make install \ && cd .. \ && rm -rf src RUN --mount=type=bind,from=sources,source=jemalloc-5.3.1.tar.gz,target=/tmp/jemalloc.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/jemalloc.tar.gz --directory=src --strip-components=1 \ && cd src \ && ./autogen.sh \ && CFLAGS=-fPIC CXXFLAGS=-fPIC ./configure --prefix=${PREFIX} --libdir=${PREFIX}/lib/$(gcc -dumpmachine) \ --disable-doc \ --disable-shared \ --enable-static \ --enable-prof \ --enable-prof-libunwind \ && make --jobs="$(nproc)" \ && make install \ && cd .. \ && rm -rf src RUN --mount=type=bind,from=sources,source=libproxyprotocol-v1.3.3.tar.gz,target=/tmp/libproxyprotocol.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/libproxyprotocol.tar.gz --directory=src --strip-components=1 \ && gcc -fPIC -c -o src/src/proxy_protocol.o src/src/proxy_protocol.c \ && ar rcs ${PREFIX}/lib/$(gcc -dumpmachine)/libproxyprotocol.a src/src/proxy_protocol.o \ && cp src/src/proxy_protocol.h ${PREFIX}/include/ \ && rm -rf src RUN --mount=type=bind,from=sources,source=xsimd-14.2.0.tar.gz,target=/tmp/xsimd.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/xsimd.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_TESTS=OFF \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=thrift-v0.22.0.tar.gz,target=/tmp/thrift.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/thrift.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_COMPILER=OFF \ -DBUILD_SHARED_LIBS=OFF \ -DBUILD_TESTING=OFF \ -DBUILD_TUTORIALS=OFF \ -DCMAKE_INSTALL_DIR=${PREFIX}/lib/$(gcc -dumpmachine)/cmake \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DLIB_INSTALL_DIR=${PREFIX}/lib/$(gcc -dumpmachine) \ -DPKGCONFIG_INSTALL_DIR=${PREFIX}/lib/$(gcc -dumpmachine)/pkgconfig \ -DWITH_AS3=OFF \ -DWITH_C_GLIB=OFF \ -DWITH_CPP=ON \ -DWITH_JAVA=OFF \ -DWITH_JAVASCRIPT=OFF \ -DWITH_LIBEVENT=OFF \ -DWITH_NODEJS=OFF \ -DWITH_OPENSSL=OFF \ -DWITH_PYTHON=OFF \ -DWITH_QT5=OFF \ -DWITH_ZLIB=OFF \ && cmake --build build --parallel "$(nproc)" --target install \ && sed -i 's|^libdir=.*|libdir=${prefix}/lib/'"$(gcc -dumpmachine)"'|' \ ${PREFIX}/lib/$(gcc -dumpmachine)/pkgconfig/thrift.pc \ && rm -rf build src RUN --mount=type=bind,from=sources,source=snappy-1.2.2.tar.gz,target=/tmp/snappy.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/snappy.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DSNAPPY_BUILD_BENCHMARKS=OFF \ -DSNAPPY_BUILD_TESTS=OFF \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=lz4-v1.10.0.tar.gz,target=/tmp/lz4.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/lz4.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src/build/cmake -B build -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ -DBUILD_STATIC_LIBS=ON \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DLZ4_BUILD_CLI=OFF \ -DLZ4_POSITION_INDEPENDENT_LIB=ON \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=arrow-apache-arrow-25.0.1.tar.gz,target=/tmp/arrow.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/arrow.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src/cpp -B build -DCMAKE_BUILD_TYPE=Release \ -DARROW_BUILD_BENCHMARKS=OFF \ -DARROW_BUILD_EXAMPLES=OFF \ -DARROW_BUILD_SHARED=OFF \ -DARROW_BUILD_STATIC=ON \ -DARROW_BUILD_TESTS=OFF \ -DARROW_BUILD_UTILITIES=OFF \ -DARROW_DEPENDENCY_SOURCE=SYSTEM \ -DARROW_DEPENDENCY_USE_SHARED=OFF \ -DARROW_IPC=ON \ -DARROW_JEMALLOC=OFF \ -DARROW_MIMALLOC=OFF \ -DARROW_PARQUET=ON \ -DARROW_POSITION_INDEPENDENT_CODE=ON \ -DARROW_WITH_BROTLI=OFF \ -DARROW_WITH_BZ2=OFF \ -DARROW_WITH_LZ4=ON \ -DARROW_WITH_SNAPPY=ON \ -DARROW_WITH_ZLIB=ON \ -DARROW_WITH_ZSTD=ON \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DPARQUET_BUILD_EXAMPLES=OFF \ -DPARQUET_BUILD_EXECUTABLES=OFF \ -DPARQUET_REQUIRE_ENCRYPTION=ON \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src RUN --mount=type=bind,from=sources,source=duckdb-v1.5.6.tar.gz,target=/tmp/duckdb.tar.gz \ --mount=type=bind,from=sources,source=duckdb-ui-0628932f74b1e2e9eaf68a05b22d737455541dca.tar.gz,target=/tmp/duckdb-ui.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/duckdb.tar.gz --directory=src --strip-components=1 \ && mkdir ui-src \ && tar --extract --gzip --file=/tmp/duckdb-ui.tar.gz --directory=ui-src --strip-components=1 \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ -DOVERRIDE_GIT_DESCRIBE=v1.5.6-0-g069cc9f9b5 \ -DDUCKDB_EXTENSION_CONFIGS="$PWD/ui-src/extension_config.cmake" \ -DBUILD_SHARED_LIBS=OFF \ -DBUILD_EXTENSIONS="core_functions;parquet;json" \ -DBUILD_SHELL=ON \ -DBUILD_UNITTESTS=OFF \ -DBUILD_BENCHMARKS=OFF \ -DENABLE_EXTENSION_AUTOLOADING=OFF \ -DENABLE_EXTENSION_AUTOINSTALL=OFF \ -DCMAKE_INSTALL_LIBDIR=lib/$(gcc -dumpmachine) \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src ui-src COPY source-stack.cmake.in /tmp/ RUN mkdir -p ${PREFIX}/share/source-stack \ && sed "s|@MULTIARCH@|$(gcc -dumpmachine)|" /tmp/source-stack.cmake.in \ > ${PREFIX}/share/source-stack/source-stack.cmake \ && rm /tmp/source-stack.cmake.in RUN useradd --create-home develop USER develop ENV CLAUDE_CONFIG_DIR="$HOME/my-claude" ENV DISABLE_AUTOUPDATER="1" RUN bash -c 'curl -fsSL https://claude.ai/install.sh | bash' ARG CLAUDE_CODE_OAUTH_TOKEN ENV CLAUDE_CODE_OAUTH_TOKEN=${CLAUDE_CODE_OAUTH_TOKEN}