| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- name: 'Build Kernel'
- description: 'Builds kernel using legacy build.sh or Bazel (kleaf)'
- runs:
- using: composite
- steps:
- - name: 'Setup ccache and Build Environment'
- shell: bash
- working-directory: ${{ github.workspace }}
- run: |
- set -euo pipefail
-
- # Download and install ccache
- echo "Installing ccache..."
- curl -LfsS --retry 5 --retry-delay 5 --retry-all-errors --connect-timeout 30 --tcp-fastopen -H "User-Agent: Mozilla/5.0" "https://github.com/WildKernels/kernel_patches/raw/refs/heads/main/ccache/ccache-x86-64" -o ccache || { echo "❌ Failed to download ccache"; exit 1; }
- sudo cp -f ./ccache /usr/bin/ccache || { echo "❌ Failed to install ccache"; exit 1; }
- sudo chmod +x /usr/bin/ccache
- rm -f ./ccache
-
- # Verify ccache
- if ! /usr/bin/ccache --version > /dev/null 2>&1; then
- echo "❌ ccache installation failed or binary is corrupted"
- exit 1
- fi
- echo "✅ ccache binary verified: $(/usr/bin/ccache --version | head -1)"
-
- # Setup cache directories
- export CCACHE_DIR="/home/runner/.ccache"
- echo "CCACHE_DIR=$CCACHE_DIR" >> $GITHUB_ENV
- export LDCACHE_DIR="/home/runner/.ld_cache"
- echo "LDCACHE_DIR=$LDCACHE_DIR" >> $GITHUB_ENV
- mkdir -p "$CCACHE_DIR" "$LDCACHE_DIR"
-
- # Create LD wrapper for thin-LTO caching
- cat > "$GITHUB_WORKSPACE/kernel/common/ld-wrapper" << 'EOF'
- #!/bin/bash
- ld.lld "$@" --thinlto-cache-dir="$LDCACHE_DIR" --thinlto-jobs="$(nproc --all)"
- EOF
- chmod +x "$GITHUB_WORKSPACE/kernel/common/ld-wrapper"
- # Setup ccache compiler wrappers in PATH (masquerade method)
- # This intercepts compiler invocations regardless of how the build system calls them
- #mkdir -p "$GITHUB_WORKSPACE/ccache-bin"
- #cp /usr/bin/ccache "$GITHUB_WORKSPACE/ccache-bin/clang"
- #cp /usr/bin/ccache "$GITHUB_WORKSPACE/ccache-bin/clang++"
- #cp /usr/bin/ccache "$GITHUB_WORKSPACE/ccache-bin/gcc"
- #cp /usr/bin/ccache "$GITHUB_WORKSPACE/ccache-bin/g++"
- #cp /usr/bin/ccache "$GITHUB_WORKSPACE/ccache-bin/ld.lld"
- #chmod +x "$GITHUB_WORKSPACE/ccache-bin"/*
-
- # Export environment variables for subsequent steps
- #echo "PATH=$GITHUB_WORKSPACE/ccache-bin:$PATH" >> $GITHUB_ENV
-
- export CC="/usr/bin/ccache clang"
- echo "CC=$CC" >> $GITHUB_ENV
- export CXX="/usr/bin/ccache clang++"
- echo "CXX=$CXX" >> $GITHUB_ENV
- export HOSTCC="/usr/bin/ccache clang"
- echo "HOSTCC=$HOSTCC" >> $GITHUB_ENV
- export HOSTCXX="/usr/bin/ccache clang++"
- echo "HOSTCXX=$HOSTCXX" >> $GITHUB_ENV
- #export LD="$GITHUB_WORKSPACE/kernel/common/ld-wrapper"
- #echo "LD=$LD" >> $GITHUB_ENV
- #export HOSTLD="$GITHUB_WORKSPACE/kernel/common/ld-wrapper"
- #echo "HOSTLD=$HOSTLD" >> $GITHUB_ENV
- #echo "CLANG_PREBUILT_BIN=$GITHUB_WORKSPACE/ccache-bin" >> $GITHUB_ENV
- export CCACHE_MAXSIZE="12G"
- echo CCACHE_MAXSIZE="12G" >> $GITHUB_ENV
- export CCACHE_COMPILERCHECK="content"
- echo CCACHE_COMPILERCHECK="content" >> $GITHUB_ENV
- export CCACHE_BASEDIR="${GITHUB_WORKSPACE}"
- echo CCACHE_BASEDIR="${GITHUB_WORKSPACE}" >> $GITHUB_ENV
- export CCACHE_NOHASHDIR="true"
- echo CCACHE_NOHASHDIR="true" >> $GITHUB_ENV
- export CCACHE_IGNOREOPTIONS="--sysroot*"
- echo CCACHE_IGNOREOPTIONS="--sysroot*" >> $GITHUB_ENV
- export CCACHE_COMPRESSION="true"
- echo CCACHE_COMPRESSION="true" >> $GITHUB_ENV
- export CCACHE_COMPRESSLEVEL="3"
- echo CCACHE_COMPRESSION_LEVEL="3" >> $GITHUB_ENV
- export CCACHE_DIRECT="true"
- echo CCACHE_DIRECT="true" >> $GITHUB_ENV
- export CCACHE_FILE_CLONE="true"
- echo CCACHE_FILE_CLONE="true" >> $GITHUB_ENV
- export CCACHE_INODE_CACHE="true"
- echo CCACHE_INODE_CACHE="true" >> $GITHUB_ENV
- export CCACHE_IS_KERNEL_COMPILING="true"
- echo CCACHE_IS_KERNEL_COMPILING="true" >> $GITHUB_ENV
- export CCACHE_UMASK="002"
- echo CCACHE_UMASK="002" >> $GITHUB_ENV
- export CCACHE_SLOPPINESS="file_macro,time_macros,include_file_mtime,include_file_ctime,pch_defines,system_headers,locale"
- echo CCACHE_SLOPPINESS="file_macro,time_macros,include_file_mtime,include_file_ctime,pch_defines,system_headers,locale" >> $GITHUB_ENV
-
- if ccache --help 2>&1 | grep -q 'depend_mode'; then
- export CCACHE_DEPEND=true
- echo "CCACHE_DEPEND=true" >> "$GITHUB_ENV"
- fi
-
- # Initialize ccache
- #ccache -M 100G
- ccache -p
- ccache -s
- ccache -z
-
- echo "✅ Build environment ready"
- echo " CCACHE_DIR: $CCACHE_DIR"
- echo " LDCACHE_DIR: $LDCACHE_DIR"
- #echo " Compiler wrappers: $GITHUB_WORKSPACE/ccache-bin"
- - name: 'Build Kernel'
- shell: bash
- working-directory: ${{ github.workspace }}/kernel
- run: |
- set -euo pipefail
- if [ -f "build/build.sh" ]; then
- SKIP_MRPROPER=1 \
- LTO=thin \
- SKIP_VENDOR_BOOT=1 \
- SKIP_EXT_MODULES=1 \
- SKIP_CP_KERNEL_HDR=1 \
- GKI_DEFCONFIG_FRAGMENT="$GITHUB_WORKSPACE/wild_gki.fragment" \
- BUILD_CONFIG=common/build.config.gki.aarch64 \
- CCACHE_DIR="$CCACHE_DIR" \
- #LD="$LD" \
- LDCACHE_DIR="$LDCACHE_DIR" \
- build/build.sh -j"$(nproc)"
- else
- cp "$GITHUB_WORKSPACE/wild_gki.fragment" common/arch/arm64/configs/wild_gki.fragment
- tools/bazel build --config=release --notrim --defconfig_fragment=//common:arch/arm64/configs/wild_gki.fragment --disk_cache=$LDCACHE_DIR --cache_dir=$GITHUB_WORKSPACE/kernel/.cache/bazel //common:kernel_aarch64
- fi
-
- - name: 'Report Cache Sizes'
- shell: bash
- working-directory: ${{ github.workspace }}/kernel/common
- run: |
- set -euo pipefail
- echo "📊 Cache sizes after build:"
- echo " CCACHE usage:"
- du -sh "$CCACHE_DIR" || echo " (no ccache directory)"
- echo " LDCACHE usage:"
- du -sh "$LDCACHE_DIR" || echo " (no ldcache directory)"
-
- echo "Perform cache eviction!"
- # 3h = 10800s using seconds to support older ccache
- ccache --evict-older-than 10800s
|