Last active
January 16, 2025 04:31
-
-
Save zanieb/6f8c5399189b6f66fa16362598c8753d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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