action.yml 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. name: 'Build Kernel'
  2. description: 'Builds kernel using legacy build.sh or Bazel (kleaf)'
  3. runs:
  4. using: composite
  5. steps:
  6. - name: 'Setup ccache and Build Environment'
  7. shell: bash
  8. working-directory: ${{ github.workspace }}
  9. run: |
  10. set -euo pipefail
  11. # Download and install ccache
  12. echo "Installing ccache..."
  13. 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; }
  14. sudo cp -f ./ccache /usr/bin/ccache || { echo "❌ Failed to install ccache"; exit 1; }
  15. sudo chmod +x /usr/bin/ccache
  16. rm -f ./ccache
  17. # Verify ccache
  18. if ! /usr/bin/ccache --version > /dev/null 2>&1; then
  19. echo "❌ ccache installation failed or binary is corrupted"
  20. exit 1
  21. fi
  22. echo "✅ ccache binary verified: $(/usr/bin/ccache --version | head -1)"
  23. # Setup cache directories
  24. export CCACHE_DIR="/home/runner/.ccache"
  25. echo "CCACHE_DIR=$CCACHE_DIR" >> $GITHUB_ENV
  26. export LDCACHE_DIR="/home/runner/.ld_cache"
  27. echo "LDCACHE_DIR=$LDCACHE_DIR" >> $GITHUB_ENV
  28. mkdir -p "$CCACHE_DIR" "$LDCACHE_DIR"
  29. # Create LD wrapper for thin-LTO caching
  30. cat > "$GITHUB_WORKSPACE/kernel/common/ld-wrapper" << 'EOF'
  31. #!/bin/bash
  32. ld.lld "$@" --thinlto-cache-dir="$LDCACHE_DIR" --thinlto-jobs="$(nproc --all)"
  33. EOF
  34. chmod +x "$GITHUB_WORKSPACE/kernel/common/ld-wrapper"
  35. # Setup ccache compiler wrappers in PATH (masquerade method)
  36. # This intercepts compiler invocations regardless of how the build system calls them
  37. #mkdir -p "$GITHUB_WORKSPACE/ccache-bin"
  38. #cp /usr/bin/ccache "$GITHUB_WORKSPACE/ccache-bin/clang"
  39. #cp /usr/bin/ccache "$GITHUB_WORKSPACE/ccache-bin/clang++"
  40. #cp /usr/bin/ccache "$GITHUB_WORKSPACE/ccache-bin/gcc"
  41. #cp /usr/bin/ccache "$GITHUB_WORKSPACE/ccache-bin/g++"
  42. #cp /usr/bin/ccache "$GITHUB_WORKSPACE/ccache-bin/ld.lld"
  43. #chmod +x "$GITHUB_WORKSPACE/ccache-bin"/*
  44. # Export environment variables for subsequent steps
  45. #echo "PATH=$GITHUB_WORKSPACE/ccache-bin:$PATH" >> $GITHUB_ENV
  46. export CC="/usr/bin/ccache clang"
  47. echo "CC=$CC" >> $GITHUB_ENV
  48. export CXX="/usr/bin/ccache clang++"
  49. echo "CXX=$CXX" >> $GITHUB_ENV
  50. export HOSTCC="/usr/bin/ccache clang"
  51. echo "HOSTCC=$HOSTCC" >> $GITHUB_ENV
  52. export HOSTCXX="/usr/bin/ccache clang++"
  53. echo "HOSTCXX=$HOSTCXX" >> $GITHUB_ENV
  54. #export LD="$GITHUB_WORKSPACE/kernel/common/ld-wrapper"
  55. #echo "LD=$LD" >> $GITHUB_ENV
  56. #export HOSTLD="$GITHUB_WORKSPACE/kernel/common/ld-wrapper"
  57. #echo "HOSTLD=$HOSTLD" >> $GITHUB_ENV
  58. #echo "CLANG_PREBUILT_BIN=$GITHUB_WORKSPACE/ccache-bin" >> $GITHUB_ENV
  59. export CCACHE_MAXSIZE="12G"
  60. echo CCACHE_MAXSIZE="12G" >> $GITHUB_ENV
  61. export CCACHE_COMPILERCHECK="content"
  62. echo CCACHE_COMPILERCHECK="content" >> $GITHUB_ENV
  63. export CCACHE_BASEDIR="${GITHUB_WORKSPACE}"
  64. echo CCACHE_BASEDIR="${GITHUB_WORKSPACE}" >> $GITHUB_ENV
  65. export CCACHE_NOHASHDIR="true"
  66. echo CCACHE_NOHASHDIR="true" >> $GITHUB_ENV
  67. export CCACHE_IGNOREOPTIONS="--sysroot*"
  68. echo CCACHE_IGNOREOPTIONS="--sysroot*" >> $GITHUB_ENV
  69. export CCACHE_COMPRESSION="true"
  70. echo CCACHE_COMPRESSION="true" >> $GITHUB_ENV
  71. export CCACHE_COMPRESSLEVEL="3"
  72. echo CCACHE_COMPRESSION_LEVEL="3" >> $GITHUB_ENV
  73. export CCACHE_DIRECT="true"
  74. echo CCACHE_DIRECT="true" >> $GITHUB_ENV
  75. export CCACHE_FILE_CLONE="true"
  76. echo CCACHE_FILE_CLONE="true" >> $GITHUB_ENV
  77. export CCACHE_INODE_CACHE="true"
  78. echo CCACHE_INODE_CACHE="true" >> $GITHUB_ENV
  79. export CCACHE_IS_KERNEL_COMPILING="true"
  80. echo CCACHE_IS_KERNEL_COMPILING="true" >> $GITHUB_ENV
  81. export CCACHE_UMASK="002"
  82. echo CCACHE_UMASK="002" >> $GITHUB_ENV
  83. export CCACHE_SLOPPINESS="file_macro,time_macros,include_file_mtime,include_file_ctime,pch_defines,system_headers,locale"
  84. echo CCACHE_SLOPPINESS="file_macro,time_macros,include_file_mtime,include_file_ctime,pch_defines,system_headers,locale" >> $GITHUB_ENV
  85. if ccache --help 2>&1 | grep -q 'depend_mode'; then
  86. export CCACHE_DEPEND=true
  87. echo "CCACHE_DEPEND=true" >> "$GITHUB_ENV"
  88. fi
  89. # Initialize ccache
  90. #ccache -M 100G
  91. ccache -p
  92. ccache -s
  93. ccache -z
  94. echo "✅ Build environment ready"
  95. echo " CCACHE_DIR: $CCACHE_DIR"
  96. echo " LDCACHE_DIR: $LDCACHE_DIR"
  97. #echo " Compiler wrappers: $GITHUB_WORKSPACE/ccache-bin"
  98. - name: 'Build Kernel'
  99. shell: bash
  100. working-directory: ${{ github.workspace }}/kernel
  101. run: |
  102. set -euo pipefail
  103. if [ -f "build/build.sh" ]; then
  104. SKIP_MRPROPER=1 \
  105. LTO=thin \
  106. SKIP_VENDOR_BOOT=1 \
  107. SKIP_EXT_MODULES=1 \
  108. SKIP_CP_KERNEL_HDR=1 \
  109. GKI_DEFCONFIG_FRAGMENT="$GITHUB_WORKSPACE/wild_gki.fragment" \
  110. BUILD_CONFIG=common/build.config.gki.aarch64 \
  111. CCACHE_DIR="$CCACHE_DIR" \
  112. #LD="$LD" \
  113. LDCACHE_DIR="$LDCACHE_DIR" \
  114. build/build.sh -j"$(nproc)"
  115. else
  116. cp "$GITHUB_WORKSPACE/wild_gki.fragment" common/arch/arm64/configs/wild_gki.fragment
  117. 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
  118. fi
  119. - name: 'Report Cache Sizes'
  120. shell: bash
  121. working-directory: ${{ github.workspace }}/kernel/common
  122. run: |
  123. set -euo pipefail
  124. echo "📊 Cache sizes after build:"
  125. echo " CCACHE usage:"
  126. du -sh "$CCACHE_DIR" || echo " (no ccache directory)"
  127. echo " LDCACHE usage:"
  128. du -sh "$LDCACHE_DIR" || echo " (no ldcache directory)"
  129. echo "Perform cache eviction!"
  130. # 3h = 10800s using seconds to support older ccache
  131. ccache --evict-older-than 10800s