docker/Dockerfile.sapling-depsblame
View source
2d46ffc1# syntax=docker/dockerfile:1
2d46ffc2# Grove: Shared C++ dependency base image for Mononoke and EdenFS
2d46ffc3#
2d46ffc4# Build: cd /build/sapling && docker build -f /build/grove/docker/Dockerfile.sapling-deps -t grove/sapling-deps .
2d46ffc5#
2d46ffc6# This image contains all the heavy C++ dependencies (folly, fbthrift, etc.)
2d46ffc7# and Rust toolchain shared by both Mononoke and EdenFS. Building it once
2d46ffc8# saves ~200GB of duplicated Docker build cache and halves cold build time.
2d46ffc9#
2d46ffc10# Rebuild only when build/fbcode_builder manifests change.
2d46ffc11
2d46ffc12FROM ubuntu:22.04
2d46ffc13
2d46ffc14ENV DEBIAN_FRONTEND=noninteractive
2d46ffc15
2d46ffc16# Install system dependencies — superset of both Mononoke and EdenFS needs.
2d46ffc17# EdenFS-specific packages: libfuse-dev, libclang-dev, libre2-dev, libgit2-dev,
2d46ffc18# liblmdb-dev, libsqlite3-dev, libcurl4-openssl-dev, libnghttp2-dev, python3-dev
2d46ffc19RUN apt-get update && apt-get install -y \
2d46ffc20 python3 python3-dev python3-pip python-is-python3 \
2d46ffc21 curl wget git \
2d46ffc22 build-essential g++ gcc cmake ninja-build \
2d46ffc23 autoconf automake libtool pkg-config \
2d46ffc24 libssl-dev zlib1g-dev libzstd-dev liblz4-dev libsnappy-dev \
2d46ffc25 libboost-all-dev libdouble-conversion-dev libgflags-dev libgoogle-glog-dev \
2d46ffc26 libevent-dev libsodium-dev libdwarf-dev \
2d46ffc27 libaio-dev libiberty-dev libunwind-dev liblzma-dev \
2d46ffc28 bison flex \
2d46ffc29 libfuse-dev \
2d46ffc30 libclang-dev clang \
2d46ffc31 libre2-dev \
2d46ffc32 libgit2-dev \
2d46ffc33 liblmdb-dev \
2d46ffc34 libsqlite3-dev sqlite3 \
2d46ffc35 libcurl4-openssl-dev \
2d46ffc36 libnghttp2-dev \
2d46ffc37 libffi-dev \
2d46ffc38 && rm -rf /var/lib/apt/lists/*
2d46ffc39
2d46ffc40WORKDIR /build
2d46ffc41
2d46ffc42# Copy ONLY the build system (manifests, patches, scripts).
2d46ffc43# This layer won't change when project source is modified,
2d46ffc44# so all C++ dep layers below stay cached.
2d46ffc45COPY build/fbcode_builder build/fbcode_builder
2d46ffc46COPY CMake CMake
2d46ffc47COPY CMakeLists.txt CMakeLists.txt
2d46ffc48
2d46ffc49# Install system deps via getdeps (eden is the superset)
2d46ffc50RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc51 install-system-deps --recursive eden || true
2d46ffc52
2d46ffc53# ---- Third-party C++ libraries (shared by both projects) ----
2d46ffc54
2d46ffc55RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc56 build --build-type MinSizeRel --free-up-disk --no-tests xxhash || true
2d46ffc57
2d46ffc58RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc59 build --build-type MinSizeRel --free-up-disk --no-tests openssl || true
2d46ffc60
2d46ffc61RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc62 build --build-type MinSizeRel --free-up-disk --no-tests fmt
2d46ffc63
2d46ffc64RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc65 build --build-type MinSizeRel --free-up-disk --no-tests googletest
2d46ffc66
2d46ffc67RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc68 build --build-type MinSizeRel --free-up-disk --no-tests zstd || true
2d46ffc69
2d46ffc70RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc71 build --build-type MinSizeRel --free-up-disk --no-tests boost || true
2d46ffc72
2d46ffc73RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc74 build --build-type MinSizeRel --free-up-disk --no-tests double-conversion || true
2d46ffc75
2d46ffc76RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc77 build --build-type MinSizeRel --free-up-disk --no-tests fast_float
2d46ffc78
2d46ffc79RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc80 build --build-type MinSizeRel --free-up-disk --no-tests gflags || true
2d46ffc81
2d46ffc82RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc83 build --build-type MinSizeRel --free-up-disk --no-tests glog || true
2d46ffc84
2d46ffc85RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc86 build --build-type MinSizeRel --free-up-disk --no-tests libaio || true
2d46ffc87
2d46ffc88RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc89 build --build-type MinSizeRel --free-up-disk --no-tests libdwarf || true
2d46ffc90
2d46ffc91RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc92 build --build-type MinSizeRel --free-up-disk --no-tests libevent || true
2d46ffc93
2d46ffc94RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc95 build --build-type MinSizeRel --free-up-disk --no-tests lz4 || true
2d46ffc96
2d46ffc97RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc98 build --build-type MinSizeRel --free-up-disk --no-tests snappy || true
2d46ffc99
2d46ffc100RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc101 build --build-type MinSizeRel --free-up-disk --no-tests zlib || true
2d46ffc102
2d46ffc103RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc104 build --build-type MinSizeRel --free-up-disk --no-tests liboqs || true
2d46ffc105
2d46ffc106RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc107 build --build-type MinSizeRel --free-up-disk --no-tests autoconf || true
2d46ffc108
2d46ffc109RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc110 build --build-type MinSizeRel --free-up-disk --no-tests automake || true
2d46ffc111
2d46ffc112RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc113 build --build-type MinSizeRel --free-up-disk --no-tests libtool || true
2d46ffc114
2d46ffc115RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc116 build --build-type MinSizeRel --free-up-disk --no-tests libsodium || true
2d46ffc117
2d46ffc118RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc119 build --build-type MinSizeRel --free-up-disk --no-tests libiberty || true
2d46ffc120
2d46ffc121RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc122 build --build-type MinSizeRel --free-up-disk --no-tests libunwind || true
2d46ffc123
2d46ffc124RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc125 build --build-type MinSizeRel --free-up-disk --no-tests xz || true
2d46ffc126
2d46ffc127# ---- Facebook C++ libraries (order matters) ----
2d46ffc128
2d46ffc129RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc130 build --build-type MinSizeRel --free-up-disk --no-tests folly
2d46ffc131
2d46ffc132RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc133 build --build-type MinSizeRel --free-up-disk --no-tests fizz
2d46ffc134
2d46ffc135RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc136 build --build-type MinSizeRel --free-up-disk --no-tests mvfst
2d46ffc137
2d46ffc138RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc139 build --build-type MinSizeRel --free-up-disk --no-tests wangle
2d46ffc140
2d46ffc141RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc142 build --build-type MinSizeRel --free-up-disk --no-tests fbthrift
2d46ffc143
2d46ffc144RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc145 build --build-type MinSizeRel --free-up-disk --no-tests fb303
2d46ffc146
2d46ffc147# ---- Rust toolchain + rust-shed ----
2d46ffc148
2d46ffc149RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.91
2d46ffc150ENV PATH="/root/.cargo/bin:${PATH}"
2d46ffc151
2d46ffc152RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc153 build --build-type MinSizeRel --free-up-disk --no-tests rust-shed
2d46ffc154
2d46ffc155# ---- EdenFS-specific C++ deps (also included so EdenFS doesn't need to rebuild) ----
2d46ffc156
2d46ffc157RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc158 build --build-type MinSizeRel --free-up-disk --no-tests blake3
2d46ffc159
2d46ffc160RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc161 build --build-type MinSizeRel --free-up-disk --no-tests cpptoml
2d46ffc162
2d46ffc163RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc164 build --build-type MinSizeRel --free-up-disk --no-tests rocksdb
2d46ffc165
2d46ffc166RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc167 build --build-type MinSizeRel --free-up-disk --no-tests edencommon
2d46ffc168
2d46ffc169# Python deps required by EdenFS CMake
2d46ffc170RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc171 build --no-tests python-toml
2d46ffc172
2d46ffc173RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc174 build --no-tests python-filelock
2d46ffc175
2d46ffc176RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc177 build --no-tests python-psutil
2d46ffc178
2d46ffc179RUN python3 build/fbcode_builder/getdeps.py --allow-system-packages \
2d46ffc180 build --no-tests pexpect || true