Skip to content

Commit 9107904

Browse files
[Github] Build PGO optimized toolchain in container (#80096)
This patch adjusts the Docker container intended for CI use to contain a PGO+ThinLTO+BOLT optimized clang. The toolchain is built within a Github action and takes ~3.5 hours. No caching is utilized. The current PGO optimization is fairly minimal, only running clang over hello world. This can be adjusted as needed.
1 parent 5282202 commit 9107904

File tree

1 file changed

+22
-16
lines changed
  • .github/workflows/containers/github-action-ci

1 file changed

+22
-16
lines changed

.github/workflows/containers/github-action-ci/Dockerfile

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,35 @@ FROM docker.io/library/ubuntu:22.04 as base
22
ENV LLVM_SYSROOT=/opt/llvm/
33

44
FROM base as toolchain
5-
ENV LLVM_MAJOR=17
6-
ENV LLVM_VERSION=${LLVM_MAJOR}.0.6
7-
ENV LLVM_DIRNAME=clang+llvm-${LLVM_VERSION}-x86_64-linux-gnu-ubuntu-22.04
8-
ENV LLVM_FILENAME=${LLVM_DIRNAME}.tar.xz
5+
ENV LLVM_VERSION=17.0.6
96

107
RUN apt-get update && \
118
apt-get install -y \
12-
curl \
13-
xz-utils
9+
wget \
10+
gcc \
11+
g++ \
12+
cmake \
13+
ninja-build \
14+
python3
15+
16+
RUN wget https://github.com/llvm/llvm-project/archive/refs/tags/llvmorg-$LLVM_VERSION.tar.gz && tar -xf llvmorg-$LLVM_VERSION.tar.gz
1417

15-
RUN mkdir -p $LLVM_SYSROOT/bin/ $LLVM_SYSROOT/lib/
18+
WORKDIR /llvm-project-llvmorg-$LLVM_VERSION
1619

17-
RUN curl -O -L https://github.com/llvm/llvm-project/releases/download/llvmorg-$LLVM_VERSION/$LLVM_FILENAME
20+
RUN mkdir build
1821

19-
RUN tar -C $LLVM_SYSROOT --strip-components=1 -xJf $LLVM_FILENAME \
20-
$LLVM_DIRNAME/bin/clang \
21-
$LLVM_DIRNAME/bin/clang++ \
22-
$LLVM_DIRNAME/bin/clang-cl \
23-
$LLVM_DIRNAME/bin/clang-$LLVM_MAJOR \
24-
$LLVM_DIRNAME/bin/lld \
25-
$LLVM_DIRNAME/bin/ld.lld \
26-
$LLVM_DIRNAME/lib/clang/
22+
RUN cmake -B ./build -G Ninja ./llvm \
23+
-C ./clang/cmake/caches/BOLT-PGO.cmake \
24+
-DBOOTSTRAP_LLVM_ENABLE_LLD=ON \
25+
-DBOOTSTRAP_BOOTSTRAP_LLVM_ENABLE_LLD=ON \
26+
-DPGO_INSTRUMENT_LTO=Thin \
27+
-DLLVM_ENABLE_RUNTIMES="compiler-rt" \
28+
-DCMAKE_INSTALL_PREFIX="$LLVM_SYSROOT" \
29+
-DLLVM_ENABLE_PROJECTS="bolt;clang;lld;clang-tools-extra" \
30+
-DLLVM_DISTRIBUTION_COMPONENTS="lld;compiler-rt;clang-format" \
31+
-DCLANG_DEFAULT_LINKER="lld"
2732

33+
RUN ninja -C ./build stage2-install-distribution && ninja -C ./build install-distribution && rm -rf ./build
2834

2935
FROM base
3036

0 commit comments

Comments
 (0)