Build Clang #72
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 }} |