Skip to content

Build LLVM/Clang #22

Build LLVM/Clang

Build LLVM/Clang #22

Workflow file for this run

name: Build LLVM/Clang
on:
workflow_dispatch:
inputs:
version:
description: 'Select version to build'
required: true
default: '16.0.6'
type: choice
options:
- '16.0.6'
- '17.0.6'
- '18.1.8'
jobs:
build:
name: Build LLVM/Clang
runs-on: ubuntu-24.04
defaults:
run:
shell: bash
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set version-specific variables
run: |
if [[ "${{ github.event.inputs.version }}" =~ ^16\..* ]]; then
echo "branch=llvmorg-${{ github.event.inputs.version }}" >> $GITHUB_ENV
echo "version_major=16" >> $GITHUB_ENV
elif [[ "${{ github.event.inputs.version }}" =~ ^17\..* ]]; then
echo "branch=llvmorg-${{ github.event.inputs.version }}" >> $GITHUB_ENV
echo "version_major=17" >> $GITHUB_ENV
elif [[ "${{ github.event.inputs.version }}" =~ ^18\..* ]]; then
echo "branch=llvmorg-${{ github.event.inputs.version }}" >> $GITHUB_ENV
echo "version_major=18" >> $GITHUB_ENV
fi
echo "version=${{ github.event.inputs.version }}" >> $GITHUB_ENV
- name: CentOS Rootfs
run: |
wget -q https://github.com/sbwml/kernel-latest-centos/releases/download/rootfs/rootfs.tar.xz
wget -q https://github.com/sbwml/redhat-llvm-project/releases/download/16.0.6/clang-16.0.6-x86_64-redhat-linux.tar.xz
tar xf rootfs.tar.xz && rm -f rootfs.tar.xz
tar xf clang-16.0.6-x86_64-redhat-linux.tar.xz && rm -f clang-16.0.6-x86_64-redhat-linux.tar.xz
echo "rootfs=$(pwd)/rootfs" >> "$GITHUB_ENV"
sudo mount -o bind /dev rootfs/dev
sudo mount -t proc /proc rootfs/proc
sudo mount -t sysfs /sys rootfs/proc
# copy source to rootfs
sudo cp -a build.sh rootfs
sudo cp -a cmake rootfs
sudo cp -a src/* rootfs
sudo cp -a tools rootfs/opt
sudo mv clang-16.0.6-x86_64-redhat-linux rootfs/opt/clang
- name: Checkout LLVM ${{ env.version }}
uses: actions/checkout@v4
with:
repository: llvm/llvm-project
ref: ${{ env.branch }}
path: llvm-project
- name: Patch llvm-project
run: |
if [[ "${{ env.version_major }}" == 16 ]]; then
git -C llvm-project apply $GITHUB_WORKSPACE/patches/llvm-16-add-lld-install-targets.patch
git -C llvm-project apply $GITHUB_WORKSPACE/patches/llvm-16-add-llvm-name-prefix-to-llc-lli-opt-tools.patch
git -C llvm-project apply $GITHUB_WORKSPACE/patches/llvm-16-force-disable-clang-ast-introspection.patch
elif [[ "${{ env.version_major }}" == 17 ]]; then
git -C llvm-project apply $GITHUB_WORKSPACE/patches/llvm-17-add-lld-install-targets.patch
git -C llvm-project apply $GITHUB_WORKSPACE/patches/llvm-17-add-llvm-name-prefix-to-llc-lli-opt-tools.patch
git -C llvm-project apply $GITHUB_WORKSPACE/patches/llvm-17-force-disable-clang-ast-introspection.patch
elif [[ "${{ env.version_major }}" == 18 ]]; then
git -C llvm-project apply $GITHUB_WORKSPACE/patches/llvm-18-add-lld-install-targets.patch
git -C llvm-project apply $GITHUB_WORKSPACE/patches/llvm-18-add-llvm-name-prefix-to-llc-lli-opt-tools.patch
git -C llvm-project apply $GITHUB_WORKSPACE/patches/llvm-18-force-disable-clang-ast-introspection.patch
fi
sudo mv llvm-project ${{ env.rootfs }}
- name: Build System Setup
run: |
sudo chroot ${{ env.rootfs }} /bin/bash /build.sh setup
- name: Build Dependent
run: |
sudo chroot ${{ env.rootfs }} /bin/bash /build.sh dll
- name: Build LLVM
run: |
sudo chroot ${{ env.rootfs }} /bin/bash /build.sh llvm ${{ env.version }}
- name: Install LLVM
run: |
# llvm
sudo mv ${{ env.rootfs }}/llvm-install llvm-install
sudo cp -a ${{ env.rootfs }}/llvm-build/lib/LLVMgold.so llvm-install/lib
sudo mkdir llvm-install/lib/bfd-plugins
sudo ln -sf ../LLVMgold.so llvm-install/lib/bfd-plugins/LLVMgold.so
sudo ln -sf llvm-llc llvm-install/bin/llc
sudo ln -sf llvm-opt llvm-install/bin/opt
sudo rm -rf llvm-install/bin/{clang,clang++,clang-cl,clang-cpp}
sudo ln -sf clang-${{ env.version_major }} llvm-install/bin/clang
sudo ln -sf clang-${{ env.version_major }} llvm-install/bin/clang++
sudo ln -sf clang-${{ env.version_major }} llvm-install/bin/clang-cl
sudo ln -sf clang-${{ env.version_major }} llvm-install/bin/clang-cpp
# libs
sudo cp -a ${{ env.rootfs }}/lib-install/* llvm-install/lib
sudo chown -R runner.runner llvm-install
- name: Package LLVM
run: |
mv llvm-install clang-${{ env.version }}-x86_64-redhat-linux
sudo chown -R root:root clang-${{ env.version }}-x86_64-redhat-linux
sudo tar -Jcf clang-${{ env.version }}-x86_64-redhat-linux.tar.xz clang-${{ env.version }}-x86_64-redhat-linux
- name: Create release
continue-on-error: true
uses: ncipollo/release-action@v1.14.0
with:
name: clang-${{ env.version }}
allowUpdates: true
tag: ${{ env.version }}
commit: main
replacesArtifacts: true
token: ${{ secrets.GITHUB_TOKEN }}
artifacts: clang-${{ env.version }}-x86_64-redhat-linux.tar.xz