Skip to content

Instantly share code, notes, and snippets.

@zanieb
Last active January 16, 2025 04:31
Show Gist options
  • Save zanieb/6f8c5399189b6f66fa16362598c8753d to your computer and use it in GitHub Desktop.
Save zanieb/6f8c5399189b6f66fa16362598c8753d to your computer and use it in GitHub Desktop.
ARG DEBIAN_VERSION=unstable
FROM debian:${DEBIAN_VERSION}
ARG LLVM_VERSION=20
ENV LLVM_VERSION=${LLVM_VERSION}
ARG DEBIAN_VERSION
ENV DEBIAN_VERSION=${DEBIAN_VERSION}
# Add LLVM GPG key
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates wget gnupg \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /etc/apt/keyrings \
&& wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor -o /etc/apt/keyrings/llvm.gpg
# Add LLVM repositories
RUN if [ "${DEBIAN_VERSION}" = "unstable" ]; then \
# When using `unstable`, the suffix is omitted
DIST_SUFFIX=""; \
else \
DIST_SUFFIX="-${DEBIAN_VERSION}"; \
fi && \
if [ "${LLVM_VERSION}" = "20" ]; then \
# When using `20`, the suffix is omitted
LLVM_SUFFIX=""; \
else \
LLVM_SUFFIX="-${LLVM_VERSION}"; \
fi && \
echo "deb [signed-by=/etc/apt/keyrings/llvm.gpg] http://apt.llvm.org/${DEBIAN_VERSION}/ llvm-toolchain${DIST_SUFFIX} main" >> /etc/apt/sources.list.d/llvm.list && \
echo "deb-src [signed-by=/etc/apt/keyrings/llvm.gpg] http://apt.llvm.org/${DEBIAN_VERSION}/ llvm-toolchain${DIST_SUFFIX} main" >> /etc/apt/sources.list.d/llvm.list && \
echo "deb [signed-by=/etc/apt/keyrings/llvm.gpg] http://apt.llvm.org/${DEBIAN_VERSION}/ llvm-toolchain${DIST_SUFFIX}${LLVM_SUFFIX} main" >> /etc/apt/sources.list.d/llvm.list && \
echo "deb-src [signed-by=/etc/apt/keyrings/llvm.gpg] http://apt.llvm.org/${DEBIAN_VERSION}/ llvm-toolchain${DIST_SUFFIX}${LLVM_SUFFIX} main" >> /etc/apt/sources.list.d/llvm.list
# Install LLVM
RUN apt-get update -y && apt-get install -y \
libllvm-${LLVM_VERSION}-ocaml-dev \
libllvm${LLVM_VERSION} \
llvm-${LLVM_VERSION} \
llvm-${LLVM_VERSION}-dev \
llvm-${LLVM_VERSION}-doc \
llvm-${LLVM_VERSION}-examples \
llvm-${LLVM_VERSION}-runtime \
clang-${LLVM_VERSION} \
clang-tools-${LLVM_VERSION} \
clang-${LLVM_VERSION}-doc \
libclang-common-${LLVM_VERSION}-dev \
libclang-${LLVM_VERSION}-dev \
libclang1-${LLVM_VERSION} \
clang-format-${LLVM_VERSION} \
python3-clang-${LLVM_VERSION} \
clangd-${LLVM_VERSION} \
clang-tidy-${LLVM_VERSION} \
lldb-${LLVM_VERSION} \
lld-${LLVM_VERSION} \
libc++-${LLVM_VERSION}-dev \
libc++abi-${LLVM_VERSION}-dev \
libbolt-${LLVM_VERSION}-dev \
bolt-${LLVM_VERSION}
# Install Python build dependencies
RUN apt-get install -y \
make \
libc6 \
build-essential \
pkg-config \
ccache \
gdb \
lcov \
libb2-dev \
libbz2-dev \
libffi-dev \
libgdbm-dev \
libgdbm-compat-dev \
liblzma-dev \
libncurses5-dev \
libreadline6-dev \
libsqlite3-dev \
libssl-dev \
lzma \
strace \
tk-dev \
uuid-dev \
xvfb \
zlib1g-dev
ADD . /cpython
WORKDIR /cpython
ENV CC=clang
ENV CXX=clang++
ENV PATH="/usr/lib/llvm-${LLVM_VERSION}/bin/:$PATH"
# Build CPython
RUN ./configure \
--with-openssl="/usr/include/openssl" \
--enable-bolt \
--enable-optimizations
RUN make clean
RUN make -j8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment