Kaynağa Gözat

fix(action): streamline ccache setup and enhance build environment configuration

Co-authored-by: Copilot <copilot@github.com>
TheWildJames 4 ay önce
ebeveyn
işleme
07773bc408
1 değiştirilmiş dosya ile 38 ekleme ve 54 silme
  1. 38 54
      .github/actions/build-kernel/action.yml

+ 38 - 54
.github/actions/build-kernel/action.yml

@@ -4,79 +4,69 @@ description: 'Builds kernel using legacy build.sh or Bazel (kleaf)'
 runs:
   using: composite
   steps:
-    - shell: bash
+    - name: 'Setup ccache and Build Environment'
+      shell: bash
       working-directory: ${{ github.workspace }}
       run: |
         set -euo pipefail
-        # Install ccache with ECS by cctv18
-        echo "Install ccache with ECS"
+        
+        # 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 is actually installed and works
+        # 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)"
-
-    - name: 'Setup Cache Environment'
-      shell: bash
-      working-directory: ${{ github.workspace }}/kernel/common
-      run: |
-        set -euo pipefail
+        
+        # Setup cache directories
         export CCACHE_DIR="$GITHUB_WORKSPACE/kernel/common/.ccache"
-        echo "CCACHE_DIR=$CCACHE_DIR" >> $GITHUB_ENV
         export LDCACHE_DIR="$GITHUB_WORKSPACE/kernel/common/.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"
 
-        export CC="ccache clang"
-        echo "CC=$CC" >> $GITHUB_ENV
-        export CXX="ccache clang++"
-        echo "CXX=$CXX" >> $GITHUB_ENV
-        export HOSTCC="ccache clang"
-        echo "HOSTCC=$HOSTCC" >> $GITHUB_ENV
-        export HOSTCXX="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
-
-        #export CCACHE_MAXSIZE=10G
-        #export CCACHE_COMPILERCHECK=content
-        #export CCACHE_BASEDIR="$GITHUB_WORKSPACE/kernel"
-        #export CCACHE_NOHASHDIR=true
-        #export CCACHE_COMPRESSION=true
-        #export CCACHE_COMPRESSION_LEVEL=3
-        #export CCACHE_DIRECT=true
-        #export CCACHE_FILE_CLONE=true
-        #export CCACHE_INODE_CACHE=true
-        #export CCACHE_IS_KERNEL_COMPILING=true
-        #export CCACHE_UMASK=002
-        #export CCACHE_SLOPPINESS="file_macro,time_macros,include_file_mtime,include_file_ctime,pch_defines,system_headers,locale"
-        #if /usr/bin/ccache --help 2>&1 | grep -q 'depend_mode'; then
-        #  export CCACHE_DEPEND=true
-        #fi
-        echo "✅ ccache environment variables set"
-        #echo "   CC: $CC"
-        #echo "   CXX: $CXX"
-        echo "📁 Cache directories:"
-        echo "   CCACHE_DIR: $CCACHE_DIR"
-        echo "   LDCACHE_DIR: $LDCACHE_DIR"
-        mkdir -p "$CCACHE_DIR" "$LDCACHE_DIR"
+        # 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 "CCACHE_DIR=$CCACHE_DIR" >> $GITHUB_ENV
+        echo "LDCACHE_DIR=$LDCACHE_DIR" >> $GITHUB_ENV
+        echo "PATH=$GITHUB_WORKSPACE/ccache-bin:$PATH" >> $GITHUB_ENV
+        echo "CC=clang" >> $GITHUB_ENV
+        echo "CXX=clang++" >> $GITHUB_ENV
+        echo "HOSTCC=clang" >> $GITHUB_ENV
+        echo "HOSTCXX=clang++" >> $GITHUB_ENV
+        echo "LD=$GITHUB_WORKSPACE/kernel/common/ld-wrapper" >> $GITHUB_ENV
+        echo "HOSTLD=$GITHUB_WORKSPACE/kernel/common/ld-wrapper" >> $GITHUB_ENV
+        
+        # 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
@@ -91,12 +81,6 @@ runs:
           SKIP_CP_KERNEL_HDR=1 \
           GKI_DEFCONFIG_FRAGMENT="$GITHUB_WORKSPACE/wild_gki.fragment" \
           BUILD_CONFIG=common/build.config.gki.aarch64 \
-          LD="$LD" \
-          HOSTLD="$HOSTLD" \
-          CC="$CC" \
-          HOSTCC="$HOSTCC" \
-          CXX="$CXX" \
-          HOSTCXX="$HOSTCXX" \
           build/build.sh -j"$(nproc)"
         else
           cp "$GITHUB_WORKSPACE/wild_gki.fragment" common/arch/arm64/configs/wild_gki.fragment