Skip to content

Commit 6dbf7ba

Browse files
authored
feat: build cross-toolchain for LLVM on Linux (#5)
Add runtimes for AArch64 and RISC-V architectures as well.
1 parent cb0b66a commit 6dbf7ba

File tree

1 file changed

+43
-28
lines changed

1 file changed

+43
-28
lines changed

.github/workflows/llvm.yaml

Lines changed: 43 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,15 @@ on:
99
jobs:
1010
build_linux_x64:
1111
runs-on: ubuntu-latest
12-
container:
13-
image: nvidia/cuda:12.3.0-devel-ubuntu22.04
1412
steps:
1513
- name: Install dependencies
16-
run: apt update && apt install -yqq python3 git ninja-build cmake zstd
14+
run: sudo apt update && sudo apt install -yqq python3 git ninja-build cmake zstd
15+
- name: Install ARM toolchain
16+
run: sudo apt install -yqq gcc-arm-linux-gnueabi g++-arm-linux-gnueabi binutils-arm-linux-gnueabi
17+
- name: Install AArch64 toolchain
18+
run: sudo apt install -yqq gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu
19+
- name: Install RISC-V toolchain
20+
run: sudo apt install -yqq gcc-riscv64-linux-gnu g++-riscv64-linux-gnu binutils-riscv64-linux-gnu
1721
- name: Checkout code
1822
uses: actions/checkout@v4
1923
with:
@@ -24,44 +28,55 @@ jobs:
2428
CXXFLAGS: -w
2529
CFLAGS: -w
2630
run: |
31+
export RT_TARGETS="x86_64-unknown-linux-gnu;aarch64-unknown-linux-gnu;riscv64-unknown-linux-gnu"
32+
export TOOLS="dsymutil;llvm-ar;llvm-cxxfilt;llvm-cov;llvm-dwarfdump;llvm-nm;llvm-objdump;llvm-objcopy;llvm-profdata;llvm-ranlib;llvm-readobj;llvm-strip;llvm-size;llvm-symbolizer"
33+
export COMPONENTS="clang;clang-format;clang-tidy;clang-resource-headers;bolt;runtimes;lld"
34+
35+
# FIXME: enable bolt once more powerful runners are available
36+
# -DCLANG_BOLT_INSTRUMENT=ON -DCMAKE_EXE_LINKER_FLAGS="-Wl,--emit-relocs,-znow"
37+
2738
mkdir build && cd build
2839
cmake -GNinja -DCMAKE_BUILD_TYPE=Release \
29-
-DLLVM_LINK_LLVM_DYLIB=OFF -DLLVM_ENABLE_LTO=OFF -DLLVM_ENABLE_RUNTIMES=all \
30-
-DLLVM_ENABLE_PROJECTS="bolt;clang;clang-tools-extra;lld;openmp;pstl" \
40+
-DLLVM_ENABLE_LLD=OFF \
41+
-DLLVM_TARGETS_TO_BUILD="X86;AArch64;NVPTX;AMDGPU;RISCV" \
42+
-DLLVM_RUNTIME_TARGETS="$RT_TARGETS" \
43+
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON \
44+
-DLLVM_ENABLE_TERMINFO=OFF -DLLVM_ENABLE_ZLIB=OFF -DLLVM_ENABLE_ZSTD=OFF \
45+
-DLLVM_LINK_LLVM_DYLIB=OFF -DLLVM_ENABLE_LTO=OFF \
46+
-DLLVM_ENABLE_RUNTIMES="libunwind;compiler-rt;libcxx;libcxxabi;openmp" \
47+
-DLLVM_ENABLE_PROJECTS="bolt;clang;clang-tools-extra;lld;pstl" \
3148
-DLLVM_STATIC_LINK_CXX_STDLIB=ON -DLLVM_INSTALL_TOOLCHAIN_ONLY=ON \
3249
-DCMAKE_INSTALL_PREFIX=$PWD/install/${{ inputs.llvm_tag }}-linux-x86_64 \
50+
-DLIBCXX_HERMETIC_STATIC_LIBRARY=ON \
51+
-DLIBCXXABI_USE_LLVM_UNWINDER=ON \
52+
-DRUNTIMES_x86_64-unknown-linux-gnu_OPENMP_LIBDIR_SUFFIX="/x86_64-unknown-linux-gnu" -DRUNTIMES_x86_64-unknown-linux-gnu_OPENMP_STANDALONE_BUILD=ON \
53+
-DRUNTIMES_aarch64-unknown-linux-gnu_OPENMP_LIBDIR_SUFFIX="/aarch64-unknown-linux-gnu" -DRUNTIMES_aarch64-unknown-linux-gnu_OPENMP_STANDALONE_BUILD=ON \
54+
-DRUNTIMES_riscv64-unknown-linux-gnu_OPENMP_LIBDIR_SUFFIX="/riscv64-unknown-linux-gnu" -DRUNTIMES_riscv64-unknown-linux-gnu_OPENMP_STANDALONE_BUILD=ON \
55+
-DRUNTIMES_x86_64-unknown-linux-gnu_OPENMP_LLVM_TOOLS_DIR="$PWD/bin" \
56+
-DRUNTIMES_aarch64-unknown-linux-gnu_OPENMP_LLVM_TOOLS_DIR="$PWD/bin" \
57+
-DRUNTIMES_aarch64-unknown-linux-gnu_OPENMP_ENABLE_LIBOMPTARGET=OFF \
58+
-DRUNTIMES_aarch64-unknown-linux-gnu_LIBOMP_OMPD_GDB_SUPPORT=OFF \
59+
-DRUNTIMES_riscv64-unknown-linux-gnu_OPENMP_LLVM_TOOLS_DIR="$PWD/bin" \
60+
-DRUNTIMES_riscv64-unknown-linux-gnu_LIBOMP_OMPD_GDB_SUPPORT=OFF \
61+
-DRUNTIMES_riscv64-unknown-linux-gnu_OPENMP_ENABLE_LIBOMPTARGET=OFF \
62+
-DLLVM_TOOLCHAIN_TOOLS="$TOOLS" -DLLVM_DISTRIBUTION_COMPONENTS="$COMPONENTS;$TOOLS" \
3363
../llvm
3464
35-
ninja install
65+
# FIXME: this requires too much RAM
66+
# ninja clang-bolt
67+
ninja install-distribution-stripped
68+
ninja llvm-dwp
69+
ninja install-pstl
70+
cp ./bin/llvm-dwp ./install/${{inputs.llvm_tag}}-linux-x86_64/bin
3671
3772
cd install
38-
rm ${{ inputs.llvm_tag }}-linux-x86_64/bin/clangd
39-
rm ${{ inputs.llvm_tag }}-linux-x86_64/bin/clang-query
40-
rm ${{ inputs.llvm_tag }}-linux-x86_64/bin/clang-refactor
41-
rm ${{ inputs.llvm_tag }}-linux-x86_64/bin/clang-rename
42-
rm ${{ inputs.llvm_tag }}-linux-x86_64/bin/clang-change-namespace
43-
rm ${{ inputs.llvm_tag }}-linux-x86_64/bin/clang-check
44-
45-
for file in ${{ inputs.llvm_tag }}-linux-x86_64/bin/*; do
46-
if [ -f "$file" ]; then
47-
echo "Strip $file"
48-
strip $file || echo "Failed to strip"
49-
fi
50-
done
51-
52-
for file in ${{ inputs.llvm_tag }}-linux-x86_64/lib/*; do
53-
if [ -f "$file" ]; then
54-
echo "Strip $file"
55-
strip $file || echo "Failed to strip"
56-
fi
57-
done
5873
5974
tar --zstd -cf ${{ inputs.llvm_tag }}-linux-x86_64.tar.zst ${{ inputs.llvm_tag }}-linux-x86_64
6075
- name: Upload artifact
6176
uses: actions/upload-artifact@v3
6277
with:
6378
path: build/install/${{ inputs.llvm_tag }}-linux-x86_64.tar.zst
64-
name: linux_x86_64_toolchain
79+
name: linux-x86_64-toolchain
6580

6681
publish_release:
6782
needs: ["build_linux_x64"]
@@ -77,6 +92,6 @@ jobs:
7792
name: LLVM Toolchain ${{ inputs.llvm_tag }}
7893
prerelease: true
7994
files: |
80-
${{ inputs.llvm_tag }}-linux-x86_64.tar.zst
95+
linux-x86_64-toolchain/${{ inputs.llvm_tag }}-linux-x86_64.tar.zst
8196
8297

0 commit comments

Comments
 (0)