From 1d0da6c21b7536d0bff7839bfd2497dedfdfe15e Mon Sep 17 00:00:00 2001 From: River <26424577+wusatosi@users.noreply.github.com> Date: Tue, 30 Sep 2025 20:40:45 +0000 Subject: [PATCH 1/4] add initial Dockerfile for building llvm --- Dockerfile.clang.ubuntu | 52 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Dockerfile.clang.ubuntu diff --git a/Dockerfile.clang.ubuntu b/Dockerfile.clang.ubuntu new file mode 100644 index 0000000..8870c3c --- /dev/null +++ b/Dockerfile.clang.ubuntu @@ -0,0 +1,52 @@ +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +FROM ubuntu:24.04 + +ARG LLVM_VERSION=19.1.7 +ARG NUM_JOBS=4 + +# Install build dependencies +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y \ + build-essential \ + cmake \ + ninja-build \ + git \ + python3 \ + python3-pip \ + wget \ + ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +# Download and extract LLVM source +WORKDIR /tmp +RUN wget https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz && \ + tar -xf llvm-project-${LLVM_VERSION}.src.tar.xz && \ + rm llvm-project-${LLVM_VERSION}.src.tar.xz + +# Build LLVM/Clang (optimized for build speed) +WORKDIR /tmp/llvm-project-${LLVM_VERSION}.src +RUN cmake -S llvm -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DLLVM_ENABLE_PROJECTS="clang" \ + -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \ + -DLLVM_TARGETS_TO_BUILD="X86" \ + -DLLVM_INCLUDE_BENCHMARKS=OFF \ + -DLLVM_INCLUDE_TESTS=OFF \ + -DLLVM_INCLUDE_EXAMPLES=OFF \ + -DLLVM_INCLUDE_DOCS=OFF \ + -DLLVM_ENABLE_ASSERTIONS=OFF \ + -DLLVM_ENABLE_BACKTRACES=OFF \ + -DLLVM_OPTIMIZED_TABLEGEN=ON \ + -DCLANG_ENABLE_ARCMT=OFF \ + -DCLANG_ENABLE_STATIC_ANALYZER=OFF \ + && ninja -C build -j${NUM_JOBS} \ + && ninja -C build install \ + && rm -rf /tmp/llvm-project-${LLVM_VERSION}.src + +# Verify installation +RUN clang --version && clang++ --version + +WORKDIR /workspace +CMD ["/bin/bash"] From b1b5df2499dca5f8786465b86b45e79946611bf7 Mon Sep 17 00:00:00 2001 From: wusatosi <26424577+wusatosi@users.noreply.github.com> Date: Tue, 30 Sep 2025 23:56:48 +0000 Subject: [PATCH 2/4] clang building --- Dockerfile.clang.ubuntu | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Dockerfile.clang.ubuntu b/Dockerfile.clang.ubuntu index 8870c3c..c5cc826 100644 --- a/Dockerfile.clang.ubuntu +++ b/Dockerfile.clang.ubuntu @@ -3,7 +3,6 @@ FROM ubuntu:24.04 ARG LLVM_VERSION=19.1.7 -ARG NUM_JOBS=4 # Install build dependencies RUN apt-get update && \ @@ -25,12 +24,12 @@ RUN wget https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_V rm llvm-project-${LLVM_VERSION}.src.tar.xz # Build LLVM/Clang (optimized for build speed) +ARG NUM_JOBS=4 WORKDIR /tmp/llvm-project-${LLVM_VERSION}.src RUN cmake -S llvm -B build -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DLLVM_ENABLE_PROJECTS="clang" \ - -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \ -DLLVM_TARGETS_TO_BUILD="X86" \ -DLLVM_INCLUDE_BENCHMARKS=OFF \ -DLLVM_INCLUDE_TESTS=OFF \ From 6f6ecc37843d0b569bca6bd84c618d44dc286b97 Mon Sep 17 00:00:00 2001 From: wusatosi <26424577+wusatosi@users.noreply.github.com> Date: Wed, 1 Oct 2025 05:44:08 +0000 Subject: [PATCH 3/4] add docs & separate build steps --- Dockerfile.clang.ubuntu | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/Dockerfile.clang.ubuntu b/Dockerfile.clang.ubuntu index c5cc826..66f0d9d 100644 --- a/Dockerfile.clang.ubuntu +++ b/Dockerfile.clang.ubuntu @@ -1,5 +1,31 @@ # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +# Dockerfile for building LLVM/Clang from source on Ubuntu 24.04 +# +# This Dockerfile builds a custom Clang compiler tagged with a specific release. +# +# The build is setup to minimize build time, thus it disables unnecessary components +# (tests, examples, docs, static analyzer, etc.) and only targets X86 architecture. +# +# Build arguments: +# LLVM_VERSION - LLVM version to build +# NUM_JOBS - Number of parallel build jobs (default: 4) +# +# Usage: +# Build with default settings: +# docker build -f Dockerfile.clang.ubuntu -t clang-ubuntu:19 . +# +# Build with custom parallelism: +# docker build -f Dockerfile.clang.ubuntu -t clang-ubuntu:19 --build-arg NUM_JOBS=6 . +# +# Build different LLVM version: +# docker build -f Dockerfile.clang.ubuntu -t clang-ubuntu:20 --build-arg LLVM_VERSION=20.0.0 . +# +# The built image includes: +# - clang and clang++ compilers at /usr/local +# +# TODO: figure out how to get the tarball from nightly/ specific branch + FROM ubuntu:24.04 ARG LLVM_VERSION=19.1.7 @@ -39,9 +65,11 @@ RUN cmake -S llvm -B build -G Ninja \ -DLLVM_ENABLE_BACKTRACES=OFF \ -DLLVM_OPTIMIZED_TABLEGEN=ON \ -DCLANG_ENABLE_ARCMT=OFF \ - -DCLANG_ENABLE_STATIC_ANALYZER=OFF \ - && ninja -C build -j${NUM_JOBS} \ - && ninja -C build install \ + -DCLANG_ENABLE_STATIC_ANALYZER=OFF + +RUN ninja -C build -j${NUM_JOBS} + +RUN ninja -C build install \ && rm -rf /tmp/llvm-project-${LLVM_VERSION}.src # Verify installation From 295a85c4a3bf8dea868b0dca9b6d4db51df3780e Mon Sep 17 00:00:00 2001 From: wusatosi <26424577+wusatosi@users.noreply.github.com> Date: Mon, 6 Oct 2025 03:23:32 +0000 Subject: [PATCH 4/4] allow build from arbitary link --- Dockerfile.clang.ubuntu | 51 ++++++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/Dockerfile.clang.ubuntu b/Dockerfile.clang.ubuntu index 66f0d9d..4e251e5 100644 --- a/Dockerfile.clang.ubuntu +++ b/Dockerfile.clang.ubuntu @@ -8,28 +8,41 @@ # (tests, examples, docs, static analyzer, etc.) and only targets X86 architecture. # # Build arguments: -# LLVM_VERSION - LLVM version to build +# LLVM_GIT_URL - Git repository URL (default: https://github.com/llvm/llvm-project.git) +# LLVM_GIT_REF - Git branch/tag/commit to build from (default: llvmorg-21.1.2) # NUM_JOBS - Number of parallel build jobs (default: 4) # # Usage: -# Build with default settings: -# docker build -f Dockerfile.clang.ubuntu -t clang-ubuntu:19 . +# Build from default release tag (llvm 21.1.2) +# docker build -f Dockerfile.clang.ubuntu -t clang-ubuntu:21 . # -# Build with custom parallelism: -# docker build -f Dockerfile.clang.ubuntu -t clang-ubuntu:19 --build-arg NUM_JOBS=6 . +# Build from different release tag: +# docker build -f Dockerfile.clang.ubuntu -t clang-ubuntu:19 --build-arg LLVM_GIT_REF=llvmorg-19.1.7 . +# docker build -f Dockerfile.clang.ubuntu -t clang-ubuntu:20 --build-arg LLVM_GIT_REF=llvmorg-20.1.8 . +# +# Build from release branch (tracks latest stable): +# docker build -f Dockerfile.clang.ubuntu -t clang-ubuntu:20 --build-arg LLVM_GIT_REF=release/20.x . +# docker build -f Dockerfile.clang.ubuntu -t clang-ubuntu:21 --build-arg LLVM_GIT_REF=release/21.x . +# +# Build from main branch (nightly): +# docker build -f Dockerfile.clang.ubuntu -t clang-ubuntu:main --build-arg LLVM_GIT_REF=main . # -# Build different LLVM version: -# docker build -f Dockerfile.clang.ubuntu -t clang-ubuntu:20 --build-arg LLVM_VERSION=20.0.0 . +# Build from specific commit: +# docker build -f Dockerfile.clang.ubuntu -t clang-ubuntu:custom --build-arg LLVM_GIT_REF=abc123def . +# +# Build from fork or mirror: +# docker build -f Dockerfile.clang.ubuntu -t clang-ubuntu:custom \ +# --build-arg LLVM_GIT_URL=https://github.com/yourfork/llvm-project.git \ +# --build-arg LLVM_GIT_REF=your-branch . +# +# Build with custom parallelism: +# docker build -f Dockerfile.clang.ubuntu -t clang-ubuntu:21 --build-arg NUM_JOBS=8 . # # The built image includes: # - clang and clang++ compilers at /usr/local -# -# TODO: figure out how to get the tarball from nightly/ specific branch FROM ubuntu:24.04 -ARG LLVM_VERSION=19.1.7 - # Install build dependencies RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -y \ @@ -43,20 +56,22 @@ RUN apt-get update && \ ca-certificates \ && rm -rf /var/lib/apt/lists/* -# Download and extract LLVM source +# Clone LLVM source from git +ARG LLVM_GIT_URL=https://github.com/llvm/llvm-project.git +ARG LLVM_GIT_REF=llvmorg-21.1.2 + WORKDIR /tmp -RUN wget https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz && \ - tar -xf llvm-project-${LLVM_VERSION}.src.tar.xz && \ - rm llvm-project-${LLVM_VERSION}.src.tar.xz +RUN echo "Building from $LLVM_GIT_URL @ $LLVM_GIT_REF" && \ + git clone --depth 1 --branch "$LLVM_GIT_REF" "$LLVM_GIT_URL" llvm-project-src # Build LLVM/Clang (optimized for build speed) ARG NUM_JOBS=4 -WORKDIR /tmp/llvm-project-${LLVM_VERSION}.src +WORKDIR /tmp/llvm-project-src RUN cmake -S llvm -B build -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DLLVM_ENABLE_PROJECTS="clang" \ - -DLLVM_TARGETS_TO_BUILD="X86" \ + -DLLVM_TARGETS_TO_BUILD="X86;AArch64" \ -DLLVM_INCLUDE_BENCHMARKS=OFF \ -DLLVM_INCLUDE_TESTS=OFF \ -DLLVM_INCLUDE_EXAMPLES=OFF \ @@ -70,7 +85,7 @@ RUN cmake -S llvm -B build -G Ninja \ RUN ninja -C build -j${NUM_JOBS} RUN ninja -C build install \ - && rm -rf /tmp/llvm-project-${LLVM_VERSION}.src + && rm -rf /tmp/llvm-project-src # Verify installation RUN clang --version && clang++ --version