action.yml 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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/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/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=/usr/bin/ccache clang" >> $GITHUB_ENV
  48. export CXX="/usr/bin/ccache clang++"
  49. echo "CXX=/usr/bin/ccache clang++" >> $GITHUB_ENV
  50. export HOSTCC="/usr/bin/ccache clang"
  51. echo "HOSTCC=/usr/bin/ccache clang" >> $GITHUB_ENV
  52. export HOSTCXX="/usr/bin/ccache clang++"
  53. echo "HOSTCXX=/usr/bin/ccache clang++" >> $GITHUB_ENV
  54. export LD="$GITHUB_WORKSPACE/kernel/ld-wrapper"
  55. echo "LD=$GITHUB_WORKSPACE/kernel/ld-wrapper" >> $GITHUB_ENV
  56. #echo "HOSTLD=$GITHUB_WORKSPACE/kernel/ld-wrapper" >> $GITHUB_ENV
  57. #echo "CLANG_PREBUILT_BIN=$GITHUB_WORKSPACE/ccache-bin" >> $GITHUB_ENV
  58. export CCACHE_MAXSIZE="12G"
  59. echo CCACHE_MAXSIZE="12G" >> $GITHUB_ENV
  60. export CCACHE_COMPILERCHECK="content"
  61. echo CCACHE_COMPILERCHECK="content" >> $GITHUB_ENV
  62. export CCACHE_BASEDIR="${GITHUB_WORKSPACE}"
  63. echo CCACHE_BASEDIR="${GITHUB_WORKSPACE}" >> $GITHUB_ENV
  64. export CCACHE_NOHASHDIR="true"
  65. echo CCACHE_NOHASHDIR="true" >> $GITHUB_ENV
  66. export CCACHE_IGNOREOPTIONS="--sysroot*"
  67. echo CCACHE_IGNOREOPTIONS="--sysroot*" >> $GITHUB_ENV
  68. export CCACHE_COMPRESSION="true"
  69. echo CCACHE_COMPRESSION="true" >> $GITHUB_ENV
  70. export CCACHE_COMPRESSLEVEL="3"
  71. echo CCACHE_COMPRESSION_LEVEL="3" >> $GITHUB_ENV
  72. export CCACHE_DIRECT="true"
  73. echo CCACHE_DIRECT="true" >> $GITHUB_ENV
  74. export CCACHE_FILE_CLONE="true"
  75. echo CCACHE_FILE_CLONE="true" >> $GITHUB_ENV
  76. export CCACHE_INODE_CACHE="true"
  77. echo CCACHE_INODE_CACHE="true" >> $GITHUB_ENV
  78. export CCACHE_IS_KERNEL_COMPILING="true"
  79. echo CCACHE_IS_KERNEL_COMPILING="true" >> $GITHUB_ENV
  80. export CCACHE_UMASK="002"
  81. echo CCACHE_UMASK="002" >> $GITHUB_ENV
  82. export CCACHE_SLOPPINESS="file_macro,time_macros,include_file_mtime,include_file_ctime,pch_defines,system_headers,locale"
  83. echo CCACHE_SLOPPINESS="file_macro,time_macros,include_file_mtime,include_file_ctime,pch_defines,system_headers,locale" >> $GITHUB_ENV
  84. if ccache --help 2>&1 | grep -q 'depend_mode'; then
  85. export CCACHE_DEPEND=true
  86. echo "CCACHE_DEPEND=true" >> "$GITHUB_ENV"
  87. fi
  88. # Initialize ccache
  89. #ccache -M 100G
  90. ccache -p
  91. ccache -s
  92. ccache -z
  93. echo "✅ Build environment ready"
  94. echo " CCACHE_DIR: $CCACHE_DIR"
  95. echo " LDCACHE_DIR: $LDCACHE_DIR"
  96. echo " Compiler wrappers: $GITHUB_WORKSPACE/ccache-bin"
  97. - name: 'Build Kernel'
  98. shell: bash
  99. working-directory: ${{ github.workspace }}/kernel
  100. run: |
  101. set -euo pipefail
  102. if [ -f "build/build.sh" ]; then
  103. SKIP_MRPROPER=1 \
  104. LTO=thin \
  105. SKIP_VENDOR_BOOT=1 \
  106. SKIP_EXT_MODULES=1 \
  107. SKIP_CP_KERNEL_HDR=1 \
  108. GKI_DEFCONFIG_FRAGMENT="$GITHUB_WORKSPACE/wild_gki.fragment" \
  109. BUILD_CONFIG=common/build.config.gki.aarch64 \
  110. CCACHE_DIR="$CCACHE_DIR" \
  111. LD="$LD" \
  112. LDCACHE_DIR="$LDCACHE_DIR" \
  113. #CLANG_PREBUILT_BIN="$CLANG_PREBUILT_BIN" \
  114. #PATH="$PATH" \
  115. build/build.sh -j"$(nproc)"
  116. else
  117. cp "$GITHUB_WORKSPACE/wild_gki.fragment" common/arch/arm64/configs/wild_gki.fragment
  118. 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
  119. fi
  120. - name: 'Report Cache Sizes'
  121. shell: bash
  122. working-directory: ${{ github.workspace }}/kernel/common
  123. run: |
  124. set -euo pipefail
  125. echo "📊 Cache sizes after build:"
  126. echo " CCACHE usage:"
  127. du -sh "$CCACHE_DIR" || echo " (no ccache directory)"
  128. echo " LDCACHE usage:"
  129. du -sh "$LDCACHE_DIR" || echo " (no ldcache directory)"
  130. echo "Perform cache eviction!"
  131. # 3h = 10800s using seconds to support older ccache
  132. ccache --evict-older-than 10800s