Skip to content

Build Clang

Build Clang #72

Workflow file for this run

name: Build Clang
on:
workflow_dispatch:
schedule:
- cron: '0 0 */3 * *'
jobs:
build:
name: Build Clang
runs-on: ubuntu-latest
env:
CLANG_VENDOR: "TopNotchFreaks "
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Dependencies
run: |
sudo apt update
sudo apt install -y cmake ninja-build python3 git build-essential binutils-dev
- name: Clone LLVM
run: |
git clone --depth=1 --branch=release/20.x https://github.com/llvm/llvm-project.git
- name: Configure Build
run: |
mkdir build && cd build
cmake -G Ninja ../llvm-project/llvm \
-DLLVM_ENABLE_PROJECTS="clang;lld;polly" \
-DLLVM_TARGETS_TO_BUILD="AArch64;X86;ARM" \
-DLLVM_DEFAULT_TARGET_TRIPLE="x86_64-linux-gnu" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER=gcc \
-DCMAKE_CXX_COMPILER=g++ \
-DLLVM_ENABLE_ASSERTIONS=OFF \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_INCLUDE_DOCS=OFF \
-DLLVM_INSTALL_TOOLCHAIN_ONLY=ON \
-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
-DCLANG_ENABLE_ARCMT=OFF \
-DCLANG_ENABLE_FORMAT=OFF \
-DLLVM_ENABLE_BINUTILS_INTEROP=ON \
-DCLANG_VENDOR="${{ env.CLANG_VENDOR }}" \
-DCMAKE_INSTALL_PREFIX=$PWD/install
- name: Build Clang
run: |
cd build
ninja -j$(nproc) clang lld llvm-ar llvm-nm llvm-strip llvm-objcopy llvm-objdump Polly
- name: Install Clang
run: |
cd build
ninja install
- name: Create Android Kernel Wrapper
run: |
cd build/install/bin
# Backup the original clang binary
mv clang clang.real
# Create host clang wrapper (for x86_64 host tools)
cat > clang << 'EOF'
#!/bin/bash
exec "$(dirname "$0")/clang.real" -target x86_64-linux-gnu "$@"
EOF
# Create Android ARM64 clang wrapper
cat > aarch64-linux-android-clang << 'EOF'
#!/bin/bash
exec "$(dirname "$0")/clang.real" -target aarch64-linux-gnu "$@"
EOF
# Create ARM32 clang wrapper (for vdso32 and other 32-bit ARM code)
cat > arm-linux-gnueabi-clang << 'EOF'
#!/bin/bash
exec "$(dirname "$0")/clang.real" -target armv7-linux-gnueabi "$@"
EOF
chmod +x clang aarch64-linux-android-clang arm-linux-gnueabi-clang
# Create symlinks
ln -sf aarch64-linux-android-clang aarch64-linux-gnu-clang
ln -sf aarch64-linux-android-clang android-clang
ln -sf arm-linux-gnueabi-clang armv7-linux-gnueabi-clang
# Create binutils symlinks for kernel builds
ln -sf llvm-ar aarch64-linux-android-ar
ln -sf llvm-nm aarch64-linux-android-nm
ln -sf llvm-strip aarch64-linux-android-strip
ln -sf llvm-objcopy aarch64-linux-android-objcopy
ln -sf llvm-objdump aarch64-linux-android-objdump
# Create ARM32 binutils symlinks
ln -sf llvm-ar arm-linux-gnueabi-ar
ln -sf llvm-nm arm-linux-gnueabi-nm
ln -sf llvm-strip arm-linux-gnueabi-strip
ln -sf llvm-objcopy arm-linux-gnueabi-objcopy
ln -sf llvm-objdump arm-linux-gnueabi-objdump
- name: Test Build
run: |
cd build/install/bin
./clang --version
./aarch64-linux-android-clang --version
./arm-linux-gnueabi-clang --version
./llvm-ar --version
./aarch64-linux-android-ar --version
- name: Package
run: |
cd build/install
tar -czf ../../clang20-android-arm64.tar.gz .
- name: Set Version
id: version
run: echo "tag=clang20-android-arm64-$(date +'%Y%m%d-%H%M')" >> "$GITHUB_OUTPUT"
- name: Create Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.version.outputs.tag }}
name: Clang 20 Android ARM64 - ${{ steps.version.outputs.tag }}
files: clang20-android-arm64.tar.gz
body: |
🔧 **TopNotchFreaks Clang 20 for Android ARM64 Kernel Compilation**
- Default host target: x86_64-linux-gnu
- Android ARM64 target: aarch64-linux-gnu
- ARM32 target: armv7-linux-gnueabi (for vdso32)
env:
GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }}