main 576e6d98e7eb cached
30 files
2.3 MB
614.9k tokens
1 requests
Download .txt
Showing preview only (2,535K chars total). Download the full file or copy to clipboard to get everything.
Repository: cctv18/oppo_oplus_realme_sm8650
Branch: main
Commit: 576e6d98e7eb
Files: 30
Total size: 2.3 MB

Directory structure:
gitextract_pmjp290u/

├── .github/
│   └── workflows/
│       ├── build-test.yml
│       ├── clean_workflow.yml
│       ├── cleaner.yml
│       ├── fastbuild_6.1.115.yml
│       ├── fastbuild_6.1.118.yml
│       ├── fastbuild_6.1.128.yml
│       ├── fastbuild_6.1.134.yml
│       ├── fastbuild_6.1.141.yml
│       ├── fastbuild_6.1.57.yml
│       └── fastbuild_6.1.75.yml
├── .old_yml/
│   ├── build_6.1.118.yml
│   ├── build_6.1.57.yml
│   └── build_6.1.75.yml
├── README.md
├── lib/
│   ├── ccache-arm64
│   └── ccache-x86-64
├── local/
│   ├── builder_6.1.115.sh
│   ├── builder_6.1.118.sh
│   ├── builder_6.1.128.sh
│   ├── builder_6.1.134.sh
│   ├── builder_6.1.141.sh
│   ├── builder_6.1.57.sh
│   └── builder_6.1.75.sh
├── other_patch/
│   ├── 69_hide_stuff.patch
│   ├── apk_sign.patch
│   └── config.patch
└── zram_patch/
    ├── 001-lz4-old.patch
    ├── 001-lz4.patch
    ├── 002-zstd.patch
    └── lz4armv8.S

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/workflows/build-test.yml
================================================
name: 发布测试

env:
  TZ: Asia/Shanghai
  ANDROID_VERSION: 'android14'
  KERNEL_VERSION: '6.1'
  SUB_VERSION: '118'
  KERNEL_NAME: 'android14-11-o-gca13bffobf09'
  CCACHE_KEY: ccache-neov4-6.1.118

on:
  workflow_dispatch:
    inputs:
      ksu_type:
        description: 'KernelSU分支(ReSukiSU/SukiSU Ultra/KernelSU Next/KSU(原版)/无内置KSU,默认ReSukiSU)'
        required: true
        type: choice
        default: 'resukisu'
        options:
          - 'resukisu'
          - 'sukisu'
          - 'ksunext'
          - 'ksu'
          - 'none'
      susfs_enable:
        description: '是否开启susfs(用于增强隐藏环境挂载功能; 可能轻微增加耗电,上游更新导致不稳定时或不需要可关闭)'
        required: true
        type: boolean
        default: 'true'
      kpm_enable:
        description: '是否开启kpm(builtin-使用(re)sukisu内置kpm, kpn-使用独立kpm实现(支持任意KSU/面具环境); 不需要可保持默认关闭)'
        required: true
        type: choice
        default: 'false'
        options:
          - 'false'
          - 'builtin'
          - 'kpn'
      lz4_enable:
        description: '是否安装 lz4 1.10.0+zstd 1.5.7 补丁及 LZ4KD 补丁'
        required: true
        type: boolean
        default: 'true'
      lz4kd_enable:
        description: '是否安装 LZ4KD 补丁(若已开启lz4+zstd补丁则可不开启)'
        required: true
        type: boolean
        default: 'false'
      bbr_enable:
        description: '是否启用bbr算法(优化上行数据,对手机日用无太大意义甚至可能负优化;false关闭,true仅加入算法,default设为默认)'
        required: true
        type: choice
        default: 'false'
        options:
          - 'false'
          - 'true'
          - 'default'
      better_net:
        description: '是否开启网络功能拓展配置(用于为ipset及需要iptables等高级网络功能内核支持的程序提供支持)'
        required: true
        type: boolean
        default: 'false'
      ssg_enable:
        description: '是否启用三星SSG IO调度器支持(提升IO读写性能; 在一加12上可能导致bug)'
        required: true
        type: boolean
        default: 'true'
      rekernel_enable:
        description: '是否启用Re-Kernel支持(与Freezer/NoActive等软件配合, 提升应用冻结能力)'
        required: true
        type: boolean
        default: 'false'
      baseband_guard:
        description: '是否开启内核级基带保护(阻止一切对非用户分区的写入,有效防止格机)'
        required: true
        type: boolean
        default: 'true'
      kernel_suffix:
        description: '内核后缀(留空默认,开头别加连字符,勿加空格等影响指令运行的保留字符)'
        required: false
        type: string
        default: ''

jobs:
  build:
    runs-on: ubuntu-latest
    outputs:
      ksuver: ${{ steps.ksu_version.outputs.ksuver }}
      ak3name: ${{ steps.create_zip.outputs.ak3name }}
    steps:
      - name: 添加KernelSU版本号
        id: ksu_version
        run: |
          KSU_VERSION="114514"
          echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
          echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
          #export KSUVER=$KSU_VERSION
          
      - name: 克隆 AnyKernel3 并打包
        id: create_zip
        run: |
          if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then
            KSU_TYPENAME="SukiSU"
          elif [[ ${{ github.event.inputs.ksu_type }} == "resukisu" ]]; then
            KSU_TYPENAME="ReSukiSU"
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
            KSU_TYPENAME="KSUNext"
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
            KSU_TYPENAME="KSU"
          else
            KSU_TYPENAME="none"
          fi
          #echo "KSU_TYPENAME=$KSU_TYPENAME" >> $GITHUB_ENV
          if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
            AK3_NAME=AnyKernel3_${KSU_TYPENAME}_${{ env.KSUVER }}_${{ env.KERNEL_VERSION }}_${{ github.event.inputs.kernel_suffix }}.zip
          else
            AK3_NAME=AnyKernel3_${KSU_TYPENAME}_${{ env.KSUVER }}_${{ env.KERNEL_VERSION }}_${{ env.KERNEL_NAME }}.zip
          fi
          truncate -s 30M testfile
          zip -r ./$AK3_NAME ./testfile
          echo "ak3name=$AK3_NAME" >> $GITHUB_OUTPUT

      - name: 上传 ZIP 工件
        uses: actions/upload-artifact@v7
        with:
          path: ${{ github.workspace }}/AnyKernel*.zip
          archive: false

  release:
    needs: build
    runs-on: ubuntu-latest
    permissions:
      contents: write
      packages: write
      actions: read
      
    steps:
      - name: 下载 ZIP 工件
        uses: actions/download-artifact@v8
        with:
          name: ${{ needs.build.outputs.ak3name }}
          path: ./release_zips
          skip-decompress: true

      - name: 设置环境变量
        run: |
          if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
            FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-${{ github.event.inputs.kernel_suffix }}
            echo "FULL_VERSION=$FULL_VERSION" >> $GITHUB_ENV
            export FULL_VERSION=$FULL_VERSION
          else
            FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-${{ env.KERNEL_NAME }}
            echo "FULL_VERSION=$FULL_VERSION" >> $GITHUB_ENV
            export FULL_VERSION=$FULL_VERSION
          fi
          TIME="$(TZ='Asia/Shanghai' date +'%y%m%d%H%M%S')"
          TIME_FORM="$(TZ='Asia/Shanghai' date +'%Y-%m-%d %H:%M:%S')"
          echo "TIME=$TIME" >> $GITHUB_ENV
          echo "TIME_FORM=$TIME_FORM" >> $GITHUB_ENV
          TAG_HEAD="OPPO-OPlus-Realme-build"
          echo "TAG_HEAD=$TAG_HEAD" >> $GITHUB_ENV
          if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then
            KSU_TYPENAME="SukiSU Ultra"
          elif [[ ${{ github.event.inputs.ksu_type }} == "resukisu" ]]; then
            KSU_TYPENAME="ReSukiSU"
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
            KSU_TYPENAME="KernelSU Next"
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
            KSU_TYPENAME="KernelSU (Official)"
          else
            KSU_TYPENAME="无内置KSU"
          fi
          echo "KSU_TYPENAME=$KSU_TYPENAME" >> $GITHUB_ENV
         
      - name: 创建发布
        id: create_release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          cat << 'EOF' > release_notes.md
          ### 📱 欧加真 ${{ env.KSU_TYPENAME }} SM8650 通用内核 | 构建信息
          - 内核版本号: ${{ env.FULL_VERSION }}
          - 编译时间: ${{ env.TIME_FORM }}
          - 机型:欧加真骁龙8Gen3通用 ${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }} 内核(基于一加12 ${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }} Android 15 版官方OKI源码)
          - KSU分支:${{ env.KSU_TYPENAME }}
          - susfs支持:${{ github.event.inputs.susfs_enable }}
          - KPM支持 :${{ github.event.inputs.kpm_enable }}
          - LZ4支持:${{ github.event.inputs.lz4_enable }}
          - LZ4KD支持:${{ github.event.inputs.lz4kd_enable }}
          - 网络功能增强:${{ github.event.inputs.better_net }}
          - BBR/Brutal 等拥塞控制算法支持:${{ github.event.inputs.bbr_enable }}
          - 三星SSG IO调度器支持:${{ github.event.inputs.ssg_enable }}
          - Re-Kernel支持:${{ github.event.inputs.rekernel_enable }}
          - 内核级基带保护支持:${{ github.event.inputs.baseband_guard }}
          - ReSukiSU管理器下载:[ReSukiSU_CI](https://github.com/cctv18/ReSukiSU_CI/releases)
          - SukiSU Ultra管理器下载:[SukiSU-Ultra](https://github.com/SukiSU-Ultra/SukiSU-Ultra/releases)
          - KernelSU Next管理器下载:[KernelSU-Next](https://github.com/KernelSU-Next/KernelSU-Next/releases)
          - KSU原版管理器下载:[KernelSU](https://github.com/tiann/KernelSU/releases)
          
          ### ⏫️ 更新内容:
          - 更新${{ env.KSU_TYPENAME }}至最新版本(${{ needs.build.outputs.ksuver }})
          - (预留)
          
          ### 📋 安装方法 | Installation Guide
          1. 若你的手机已经安装了第三方Recovery(如TWRP),可下载对应机型的AnyKernel刷机包后进入Recovery模式,通过Recovery刷入刷机包后重启设备;
          2. 若你的手机之前已有 root 权限,可在手机上安装[HorizonKernelFlasher](https://github.com/libxzr/HorizonKernelFlasher/releases),在HorizonKernelFlasher中刷入AnyKernel刷机包并重启;
          3. 若你之前已刷入SukiSU Ultra内核,且SukiSU Ultra管理器已更新至最新版本,可在SukiSU Ultra管理器中直接刷入AnyKernel刷机包并重启;
          4. 刷入无lz4kd补丁版的内核前若刷入过lz4kd补丁版的内核,为避免出错,请先关闭zram模块;
          5. 由于KernelSU上游更新了元模块功能,最新版KSU管理器(包括除KernelSU Next以外的各分支)需要配合元模块(metamodule)才能正常挂载模块。目前的元模块包括[meta overlayfs](https://github.com/KernelSU-Modules-Repo/meta-overlayfs), [mountify](https://github.com/backslashxx/mountify), [meta magicmount](https://github.com/7a72/meta-magic_mount/), [meta magicmount rs](https://github.com/Tools-cx-app/meta-magic_mount/), [hybrid mount](https://github.com/YuzakiKokuban/meta-hybrid_mount)等。若你是第一次使用KSU或刚从旧版KSU管理器升级至新版,请先安装一个元模块,这样其他涉及系统挂载的模块才能正常运行;
          6. KernelPatch Next(即KPN)是一个独立于KSU的KPM实现,可以运行在任意KSU/面具环境中(不适用于Apatch),且不能与(Re)SukiSU内置的kpm功能共同使用,使用前请保证你的内核没有内置的kpm实现/修补。
          
          #### ※※※刷写内核有风险,为防止出现意外导致手机变砖,在刷入内核前请务必用[KernelFlasher](https://github.com/capntrips/KernelFlasher)等软件备份boot等关键启动分区!※※※
          EOF

          gh release create "${{ env.TAG_HEAD }}-${{ env.TIME }}" \
            --repo "${{ github.repository }}" \
            --title "${{ env.TAG_HEAD }}-${{ env.FULL_VERSION }}" \
            --notes-file release_notes.md \
            release_zips/AnyKernel3_*.zip


================================================
FILE: .github/workflows/clean_workflow.yml
================================================
name: 清理仓库工作流

on:
  workflow_dispatch:
    inputs:
      clean_mode:
        description: "清理模式(amount--保留数量, date--保留天数):"
        required: true
        type: choice
        default: 'amount'
        options:
          - 'amount'
          - 'date'
      clean_to_keep:
        description: "保留最近工作流的天数/数量:"
        required: true
        type: string
        default: "0"

jobs:
  clean-workflows:
    runs-on: ubuntu-latest
    permissions:
      actions: write
      contents: read

    steps:
      - name: 检出当前仓库
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          
      - name: 安装GitHub CLI
        run: |
          sudo apt-mark hold firefox
          sudo apt-mark hold libc-bin
          sudo apt purge man-db
          sudo apt update
          sudo apt install -y jq
          type -p gh >/dev/null || sudo apt install -y gh
          gh auth login --with-token <<< "${{ secrets.GITHUB_TOKEN }}"
          gh --version

      - name: 按保留数量清理工作流
        if: ${{ github.event.inputs.clean_mode == 'amount' }}
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          repo_full_name=$GITHUB_REPOSITORY
          # 获取所有工作流(按创建时间倒序)
          all_workflows=$(gh api -X GET "repos/$repo_full_name/actions/runs?per_page=100" | 
            jq --arg current_run "$GITHUB_RUN_ID" '.workflow_runs | map(select(.id != ($current_run | tonumber)))')
          # 计算实际需要保留的工作流数量
          total_workflows=$(echo "$all_workflows" | jq length)
          keep_count=$(( ${{ github.event.inputs.clean_to_keep }} < total_workflows ? ${{ github.event.inputs.clean_to_keep }} : total_workflows ))
          # 获取要保留的最新工作流ID
          keep_ids=$(echo "$all_workflows" | 
            jq -r 'sort_by(.created_at) | reverse | .[0:'$keep_count'] | .[].id')
          echo "保留最近 $keep_count 个工作流 (ID: $keep_ids)"
          # 删除不在保留列表中的工作流
          echo "$all_workflows" | jq -r '.[] | select(.status != "in_progress" and .status != "queued") | .id' | while read id; do
            if ! grep -qw "$id" <<< "$keep_ids"; then
              echo "删除工作流 $id"
              gh api -X DELETE "repos/$repo_full_name/actions/runs/$id" --silent
            fi
          done


      - name: 按保留天数清理工作流
        if: ${{ github.event.inputs.clean_mode == 'date'}}
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          repo_full_name=$GITHUB_REPOSITORY
          cutoff_date=$(date -d "${{ github.event.inputs.clean_to_keep }} days ago" -u +"%Y-%m-%dT%H:%M:%SZ")
          echo "删除 $cutoff_date 之前的所有工作流..."
          
          # 获取需要删除的工作流ID
          to_delete_ids=$(gh api -X GET "repos/$repo_full_name/actions/runs?created=<$cutoff_date&per_page=100" | 
            jq -r --arg current_run "$GITHUB_RUN_ID" '.workflow_runs[] | 
            select(.id != ($current_run | tonumber) and .status != "in_progress" and .status != "queued") | .id')
          
          for id in $to_delete_ids; do
            echo "删除工作流 $id (创建于 $cutoff_date 之前)"
            gh api -X DELETE "repos/$repo_full_name/actions/runs/$id" --silent
          done


================================================
FILE: .github/workflows/cleaner.yml
================================================
name: 清理全部ccache缓存

on:
  workflow_dispatch:
    inputs:
      confirm:
        description: "输入DELETE确认清理所有缓存"
        required: true
        default: ""

jobs:
  clean-caches:
    runs-on: ubuntu-latest
    permissions:
      actions: write
    
    steps:
      - name: 验证确认输入
        if: ${{ github.event.inputs.confirm != 'DELETE' }}
        run: |
          echo "::error::必须输入DELETE确认清理操作!"
          exit 1
      
      - name: 获取并删除所有缓存
        uses: actions/github-script@v6
        with:
          script: |
            const { owner, repo } = context.repo;
            let totalDeleted = 0;
            
            // 获取所有缓存
            const caches = await github.rest.actions.getActionsCacheList({
              owner,
              repo,
              per_page: 100
            });
            
            // 删除匹配的缓存
            for (const cache of caches.data.actions_caches) {
              if (cache.key.startsWith('ccache-')) {
                console.log(`删除缓存: ${cache.key}`);
                await github.rest.actions.deleteActionsCacheById({
                  owner,
                  repo,
                  cache_id: cache.id
                });
                totalDeleted++;
              }
            }
            
            return `成功删除 ${totalDeleted} 个缓存`;

      - name: 重置环境
        run: |
          rm -rf $HOME/.ccache/*
          rm -rf $HOME/.ccache_6.1.57/*
          rm -rf $HOME/.ccache_6.1.75/*
          rm -rf $HOME/.ccache_6.1.118/*
          sudo apt clean
          sudo journalctl --vacuum-time=1s
          sudo rm -rf /var/log/*
          docker system prune -af || true
          sudo rm -rf /tmp/*
          echo "容器环境已重置!"
          echo "清理后空间:"
          df -h


================================================
FILE: .github/workflows/fastbuild_6.1.115.yml
================================================
name: 6.1.115 (天玑特供)欧加真OKI内核快速构建

env:
  TZ: Asia/Shanghai
  ANDROID_VERSION: 'android14'
  KERNEL_VERSION: '6.1'
  SUB_VERSION: '115'
  KERNEL_NAME: 'android14-11-o-gca13bffobf09'
  CCACHE_KEY: ccache-ecsv2-6.1.115

on:
  workflow_dispatch:
    inputs:
      ksu_type:
        description: 'KernelSU分支(ReSukiSU/SukiSU Ultra/KernelSU Next/KSU(原版)/无内置KSU,默认ReSukiSU)'
        required: true
        type: choice
        default: 'resukisu'
        options:
          - 'resukisu'
          - 'sukisu'
          - 'ksunext'
          - 'ksu'
          - 'none'
      susfs_enable:
        description: '是否开启susfs(用于增强隐藏环境挂载功能; 可能轻微增加耗电,上游更新导致不稳定时或不需要可关闭)'
        required: true
        type: boolean
        default: 'true'
      kpm_enable:
        description: '是否开启kpm(builtin-使用(re)sukisu内置kpm, kpn-使用独立kpm实现(支持任意KSU/面具环境); 不需要可保持默认关闭)'
        required: true
        type: choice
        default: 'false'
        options:
          - 'false'
          - 'builtin'
          - 'kpn'
      lz4_enable:
        description: '是否安装 lz4 1.10.0+zstd 1.5.7 补丁'
        required: true
        type: boolean
        default: 'true'
      lz4kd_enable:
        description: '是否安装 LZ4KD 补丁(若已开启lz4+zstd补丁则可不开启)'
        required: true
        type: boolean
        default: 'false'
      bbr_enable:
        description: '是否启用bbr算法(优化上行数据,对手机日用无太大意义甚至可能负优化;false关闭,true仅加入算法,default设为默认)'
        required: true
        type: choice
        default: 'false'
        options:
          - 'false'
          - 'true'
          - 'default'
      better_net:
        description: '是否开启网络功能拓展配置(用于为ipset及需要iptables等高级网络功能内核支持的程序提供支持,天玑机型可能导致bug,建议关闭)'
        required: true
        type: boolean
        default: 'false'
      ssg_enable:
        description: '是否启用三星SSG IO调度器支持(提升IO读写性能; 在一加12上可能导致bug)'
        required: true
        type: boolean
        default: 'true'
      rekernel_enable:
        description: '是否启用Re-Kernel支持(与Freezer/NoActive等软件配合, 提升应用冻结能力)'
        required: true
        type: boolean
        default: 'false'
      baseband_guard:
        description: '是否开启内核级基带保护(阻止一切对非用户分区的写入,有效防止格机)'
        required: true
        type: boolean
        default: 'true'
      ccache_update:
        description: '更新ccache缓存(将本次编译生成的ccache缓存覆盖至仓库缓存,在更改编译配置、源码或需要刷新缓存时开启)'
        required: true
        type: boolean
        default: 'false'
      ccache_debug:
        description: '是否上传 Ccache调试日志(用于调试, 无需要不必开启)'
        required: true
        type: boolean
        default: 'false'
      kernel_suffix:
        description: '内核后缀(留空默认,开头别加连字符,勿加空格等影响指令运行的保留字符)'
        required: false
        type: string
        default: ''

jobs:
  build:
    runs-on: ubuntu-latest
    outputs:
      ksuver: ${{ steps.ksu_version.outputs.ksuver }}
      ak3name: ${{ steps.create_zip.outputs.ak3name }}
    permissions:
      actions: write
      contents: read
    steps:
      - name: 安装环境依赖+初始化源码仓库及llvm-Clang20工具链
        run: |
          rm -rf kernel_workspace
          mkdir kernel_workspace
          cd kernel_workspace
          echo "当前仓库:$GITHUB_REPOSITORY"
          echo "当前分支:$GITHUB_REF_NAME"
          
          sudo apt-mark hold firefox &&
          sudo apt-mark hold libc-bin &&
          sudo apt purge man-db &&
          sudo rm -rf /var/lib/man-db/auto-update &&
          sudo apt update &&
          sudo apt-get install -y --no-install-recommends binutils python-is-python3 libssl-dev libelf-dev &
          #旧版完整指令:(由于经过验证大部分指令已内置于GitHub Action环境中,故进行精简)
          #sudo apt-get install -y --no-install-recommends curl bison flex make binutils git perl gcc python3 python-is-python3 bc libssl-dev libelf-dev zip unzip ccache
          
          #使用最新版ccache-ECS(特化优化内核编译缓存,大幅提升二次不同配置编译速度)
          wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/lib/ccache-x86-64 -O ccache &&
          sudo cp -f ./ccache /usr/bin/ccache &&
          sudo chmod +x /usr/bin/ccache &&
          rm -f ./ccache &
          
          echo "正在克隆源码仓库..."
          aria2c -s16 -x16 -k1M https://github.com/cctv18/android_kernel_oneplus_mt6989/archive/refs/heads/oneplus/mt6989_v_15.0.2_ace5_race.zip -o common.zip && 
          unzip -q common.zip && 
          mv "android_kernel_oneplus_mt6989-oneplus-mt6989_v_15.0.2_ace5_race" common &&
          rm -rf common.zip &
          
          echo "正在克隆llvm-Clang20工具链..." &&
          mkdir -p clang20 &&
          aria2c -s16 -x16 -k1M https://github.com/cctv18/oneplus_sm8650_toolchain/releases/download/LLVM-Clang20-r547379/clang-r547379.zip -o clang.zip &&
          unzip -q clang.zip -d clang20 &&
          rm -rf clang.zip &
          
          echo "正在克隆构建工具..." &&
          aria2c -s16 -x16 -k1M https://github.com/cctv18/oneplus_sm8650_toolchain/releases/download/LLVM-Clang20-r547379/build-tools.zip -o build-tools.zip &&
          unzip -q build-tools.zip &&
          rm -rf build-tools.zip &
          
          wait
          echo "所有源码及llvm-Clang20工具链初始化完成!"
          echo "正在去除 ABI 保护 & 去除 dirty 后缀..."
          rm common/android/abi_gki_protected_exports_* || true
          for f in common/scripts/setlocalversion; do
            sed -i 's/ -dirty//g' "$f"
            sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' "$f"
          done

      - name: 配置ccache目录
        run: |
          echo "CCACHE_DIR=$HOME/.ccache_${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}" >> $GITHUB_ENV
          echo "CCACHE_MAXSIZE=3G" >> $GITHUB_ENV
          echo "当前磁盘空间:"
          df -h
          echo "当前构建内核版本:${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}"

      - name: 载入当前版本内核的 ccache缓存
        uses: actions/cache@v5
        id: ccache-restore
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ${{ env.CCACHE_KEY }}-${{ runner.os }}-${{ github.ref_name }}
          restore-keys: |
            ${{ env.CCACHE_KEY }}-${{ runner.os }}-
            ${{ env.CCACHE_KEY }}-

      - name: 拉取公共预置 ccache 缓存
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          echo "检查本地缓存状态..."
          if [ -d "${{ env.CCACHE_DIR }}" ] && [ "$(ls -A ${{ env.CCACHE_DIR }} 2>/dev/null)" ]; then
            echo "检测到本地已成功载入 ccache 缓存,跳过公共 ccache 拉取!"
            exit 0
          fi
          
          echo "未命中缓存,尝试拉取最新公共 ccache ..."
          mkdir -p ${{ env.CCACHE_DIR }}
          FILE_NAME="ccache-${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}.tar.zst"
          
          if gh release download -p "$FILE_NAME" -R cctv18/public_ccache; then
            echo "成功下载 $FILE_NAME,正在解压..."
            tar -I zstd -xf "$FILE_NAME" -C ${{ env.CCACHE_DIR }}
            echo "公共 ccache 恢复完成!"
          else
            echo "公共 ccache 中未找到对应的 ccache 文件,将进行全量全新编译..."
          fi

      - name: 清除旧 ccache 缓存
        if: inputs.ccache_update
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          echo "正在清除仓库中的旧 ccache 缓存..."
          if gh cache delete ${{ env.CCACHE_KEY }}-${{ runner.os }}-${{ github.ref_name }} -R ${{ github.repository }}; then
            echo "成功删除旧的 ccache 缓存!"
          else
            echo "旧缓存不存在或已被清理!"
          fi
      
      - name: 初始化并配置ccache
        run: |
          # 设置ccache环境变量
          export CCACHE_COMPILERCHECK="none"
          export CCACHE_BASEDIR="${{ github.workspace }}"
          export CCACHE_NOHASHDIR="true"
          export CCACHE_NOHARDLINK="true"
          export CCACHE_DIR="${{ env.CCACHE_DIR }}"
          export CCACHE_MAXSIZE="${{ env.CCACHE_MAXSIZE }}"
          
          # 确保ccache目录存在
          mkdir -p "$CCACHE_DIR"
          
          # 每次运行都重新配置缓存大小
          echo "配置ccache缓存大小为: $CCACHE_MAXSIZE"
          ccache -M "$CCACHE_MAXSIZE"
          ccache -o compression=true
          
          # 显示初始缓存状态
          echo "ccache初始状态:"
          ccache -s
          
          # 如果缓存恢复命中,显示详细信息
          if [ "${{ steps.ccache-restore.outputs.cache-hit }}" == 'true' ]; then
            echo "ccache缓存命中详情:"
            ccache -sv
          fi

      - name: 添加KernelSU
        id: ksu_version
        run: |
          # 进入内核工作目录
          cd kernel_workspace
          if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then
            echo "正在配置SukiSU Ultra..."
            curl -LSs "https://raw.githubusercontent.com/ShirkNeko/SukiSU-Ultra/refs/heads/main/kernel/setup.sh" | bash -s builtin
            cd ./KernelSU
            # 获取当前 Git 提交的短哈希 (8位)
            GIT_COMMIT_HASH=$(git rev-parse --short=8 HEAD)
            echo "当前提交哈希: $GIT_COMMIT_HASH"
            export KSU_VERSION=$KSU_VERSION
            # 尝试最多 3 次获取 KernelSU API 版本号
            for i in {1..3}; do
              # 从远程 Makefile 中提取 KSU_API_VERSION
              KSU_API_VERSION=$(curl -s "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/builtin/kernel/Makefile" | 
                # 查找第一个包含版本定义的行
                grep -m1 "KSU_VERSION_API :=" | 
                # 提取等号后的值
                awk -F'= ' '{print $2}' | 
                # 删除所有空白字符
                tr -d '[:space:]')
              # 如果成功获取到版本号则跳出循环,否则等待 1 秒后重试
              [ -n "$KSU_API_VERSION" ] && break || sleep 1
            done
            # 如果获取失败,使用默认版本号 3.1.7
            [ -z "$KSU_API_VERSION" ] && KSU_API_VERSION="3.1.7"
            # 将 API 版本号存储到 GitHub 环境变量
            echo "KSU_API_VERSION=$KSU_API_VERSION" >> $GITHUB_ENV
            # 创建版本定义模板&版本格式函数: 使用获取的提交哈希和固定后缀
            # KSU_VERSION_API: API 版本定义
            # KSU_VERSION_FULL: 完整版本定义
            VERSION_DEFINITIONS=$'define get_ksu_version_full\nv\\$1-'"$GIT_COMMIT_HASH"$'@cctv18\nendef\n\nKSU_VERSION_API := '"$KSU_API_VERSION"$'\nKSU_VERSION_FULL := v'"$KSU_API_VERSION"$'-'"$GIT_COMMIT_HASH"$'@cctv18'
            # 清理内核 Makefile 中的旧版本定义
            # 删除版本函数
            sed -i '/define get_ksu_version_full/,/endef/d' kernel/Makefile
            # 删除 API 版本定义
            sed -i '/KSU_VERSION_API :=/d' kernel/Makefile
            # 删除完整版本定义
            sed -i '/KSU_VERSION_FULL :=/d' kernel/Makefile
            # 在 REPO_OWNER 行后插入新版本定义
            awk -v def="$VERSION_DEFINITIONS" '
              # 当找到 REPO_OWNER 行时,插入版本定义并设置标记
              /REPO_OWNER :=/ {print; print def; inserted=1; next}
              # 打印所有行
              1
              # 如果未找到插入点,在文件末尾追加
              END {if (!inserted) print def}
            ' kernel/Makefile > kernel/Makefile.tmp && mv kernel/Makefile.tmp kernel/Makefile

            # 生成自定义版本号(基于提交计数), 失败时使用 114514
            KSU_VERSION=$(expr $(git rev-list --count main) + 37185 2>/dev/null || echo 114514)
            # 存储版本号到 GitHub 环境变量
            echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
            echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT

            # 验证修改结果
            grep -A10 "REPO_OWNER" kernel/Makefile  # 检查插入点后的内容
            grep "KSU_VERSION_FULL" kernel/Makefile # 确认版本定义存在
            echo "SukiSU版本号: v${KSU_API_VERSION}-${GIT_COMMIT_HASH}@cctv18"
          elif [[ ${{ github.event.inputs.ksu_type }} == "resukisu" ]]; then
            echo "正在配置ReSukiSU..."
            curl -LSs "https://raw.githubusercontent.com/ReSukiSU/ReSukiSU/refs/heads/main/kernel/setup.sh" | bash -s main
            echo 'CONFIG_KSU_FULL_NAME_FORMAT="%TAG_NAME%-%COMMIT_SHA%@cctv18"' >> ./common/arch/arm64/configs/gki_defconfig
            cd ./KernelSU
            # 生成自定义版本号(基于提交计数), 失败时使用 114514
            KSU_VERSION=$(expr $(git rev-list --count main) + 30700 2>/dev/null || echo 114514)
            # 存储版本号到 GitHub 环境变量
            echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
            echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
            echo "正在配置KernelSU Next..."
            curl -LSs "https://raw.githubusercontent.com/pershoot/KernelSU-Next/refs/heads/dev-susfs/kernel/setup.sh" | bash -s dev-susfs
            cd KernelSU-Next
            rm -rf .git
            KSU_VERSION=$(expr $(curl -sI "https://api.github.com/repos/pershoot/KernelSU-Next/commits?sha=dev&per_page=1" | grep -i "link:" | sed -n 's/.*page=\([0-9]*\)>; rel="last".*/\1/p') "+" 30000)
            echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
            echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
            sed -i "s/KSU_VERSION_FALLBACK := 1/KSU_VERSION_FALLBACK := $KSU_VERSION/g" kernel/Kbuild
            KSU_GIT_TAG=$(curl -sL "https://api.github.com/repos/KernelSU-Next/KernelSU-Next/tags" | grep -o '"name": *"[^"]*"' | head -n 1 | sed 's/"name": "//;s/"//')
            sed -i "s/KSU_VERSION_TAG_FALLBACK := v0.0.1/KSU_VERSION_TAG_FALLBACK := $KSU_GIT_TAG/g" kernel/Kbuild
            #为KernelSU Next添加WildKSU管理器支持
            cd ../common/drivers/kernelsu
            wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/other_patch/apk_sign.patch
            patch -p2 -N -F 3 < apk_sign.patch || true
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
            echo "正在配置原版 KernelSU (tiann/KernelSU)..."
            curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/refs/heads/main/kernel/setup.sh" | bash -s main
            cd ./KernelSU
            KSU_VERSION=$(expr $(curl -sI "https://api.github.com/repos/tiann/KernelSU/commits?sha=main&per_page=1" | grep -i "link:" | sed -n 's/.*page=\([0-9]*\)>; rel="last".*/\1/p') "+" 30000)
            echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
            echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
            sed -i "s/DKSU_VERSION=16/DKSU_VERSION=${KSU_VERSION}/" kernel/Kbuild
          else
            echo "已选择无内置KernelSU模式,跳过KernelSU配置..."
          fi

      - name: 应用 KernelSU & SUSFS 补丁
        if: inputs.susfs_enable
        run: |
          cd kernel_workspace
          if [[ ${{ github.event.inputs.ksu_type }} != "none" ]]; then
            echo "正在添加susfs补丁..."
            git clone --depth=1 https://github.com/cctv18/susfs4oki.git susfs4ksu -b oki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}
            wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/other_patch/69_hide_stuff.patch -O ./common/69_hide_stuff.patch
            cp ./susfs4ksu/kernel_patches/50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch ./common/
            cp ./susfs4ksu/kernel_patches/fs/* ./common/fs/
            cp ./susfs4ksu/kernel_patches/include/linux/* ./common/include/linux/
            cd ./common
            patch -p1 < 50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch || true
            patch -p1 -N -F 3 < 69_hide_stuff.patch || true
            cd ..
          else
            echo "已选择无内置KernelSU模式,跳过susfs配置..."
          fi
          if [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
            echo "正在为原版 KernelSU (tiann/KernelSU)添加补丁..."
            cp ./susfs4ksu/kernel_patches/KernelSU/10_enable_susfs_for_ksu.patch ./KernelSU/
            cd ./KernelSU
            patch -p1 < 10_enable_susfs_for_ksu.patch || true
          fi
          
      - name: 应用lz4 1.10.0 & zstd 1.5.7补丁
        if: inputs.lz4_enable
        run: |
          echo "正在添加lz4 1.10.0 & zstd 1.5.7补丁…"
          cd kernel_workspace
          git clone --depth=1 https://github.com/$GITHUB_REPOSITORY.git -b $GITHUB_REF_NAME $GITHUB_ACTOR
          cp ./$GITHUB_ACTOR/zram_patch/001-lz4.patch ./common/
          cp ./$GITHUB_ACTOR/zram_patch/lz4armv8.S ./common/lib
          cp ./$GITHUB_ACTOR/zram_patch/002-zstd.patch ./common/
          cd ./common
          git apply -p1 < 001-lz4.patch || true
          patch -p1 < 002-zstd.patch || true

      - name: 应用 lz4kd 补丁
        if: inputs.lz4kd_enable
        run: |
          echo "正在添加lz4kd补丁…"
          cd kernel_workspace
          if [ ! -d "SukiSU_patch" ]; then
            git clone --depth=1 https://github.com/ShirkNeko/SukiSU_patch.git
          fi
          cd common
          cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./include/linux/
          cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./lib
          cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./crypto
          cp ../SukiSU_patch/other/zram/zram_patch/${{ env.KERNEL_VERSION }}/lz4kd.patch ./
          patch -p1 -F 3 < lz4kd.patch || true
          
      - name: 添加SUSFS 配置项
        if: inputs.susfs_enable
        run: |
          cd kernel_workspace
          echo "CONFIG_KSU_SUSFS=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_HAS_MAGIC_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SUS_PATH=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SUS_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_AUTO_ADD_SUS_KSU_DEFAULT_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_AUTO_ADD_SUS_BIND_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SUS_KSTAT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_TRY_UMOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_AUTO_ADD_TRY_UMOUNT_FOR_BIND_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SPOOF_UNAME=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_ENABLE_LOG=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_OPEN_REDIRECT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SUS_MAP=y" >> ./common/arch/arm64/configs/gki_defconfig
          
      - name: 添加 KSU & 其他配置项
        run: |
          cd kernel_workspace
          echo "CONFIG_KSU=y" >> ./common/arch/arm64/configs/gki_defconfig
          if [[ ${{ github.event.inputs.kpm_enable }} == 'builtin' && ( "${{ github.event.inputs.ksu_type }}" == "sukisu" || "${{ github.event.inputs.ksu_type }}" == "resukisu" ) ]]; then
            echo "CONFIG_KPM=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          if [[ "${{ github.event.inputs.susfs_enable }}" == "false" ]]; then
            echo "CONFIG_KSU_SUSFS=n" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          #添加对 Mountify (backslashxx/mountify) 模块的支持
          echo "CONFIG_TMPFS_XATTR=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_TMPFS_POSIX_ACL=y" >> ./common/arch/arm64/configs/gki_defconfig
          if [[ ${{ github.event.inputs.lz4kd_enable }} == 'true' ]]; then
            echo "CONFIG_ZSMALLOC=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_LZ4HC=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_LZ4K=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_LZ4KD=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_842=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          # 开启O2编译优化配置
          echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> ./common/arch/arm64/configs/gki_defconfig
          #禁用 defconfig 检查
          sed -i 's/check_defconfig//' ./common/build.config.gki
          #跳过将uapi标准头安装到 usr/include 目录的不必要操作,节省编译时间
          echo "CONFIG_HEADERS_INSTALL=n" >> ./common/arch/arm64/configs/gki_defconfig
          
      - name: 启用网络功能增强优化配置
        if: inputs.better_net
        run: |
          cd kernel_workspace
          #启用  BPF 流解析器,实现高性能网络流量处理,增强网络监控和分析能力
          echo "CONFIG_BPF_STREAM_PARSER=y" >> ./common/arch/arm64/configs/gki_defconfig
          #开启增强 Netfilter 防火墙扩展模块,支持基于地址类型的匹配规则,启用 IP 集合支持,提高防火墙规则灵活性,支持更复杂的流量过滤策略
          echo "CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_NETFILTER_XT_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
          #启用 IP 集框架及其多种数据结构实现,提供高效的大规模 IP 地址管理,提高防火墙规则处理效率,减少内存占用
          echo "CONFIG_IP_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_MAX=65534" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_BITMAP_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_BITMAP_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_BITMAP_PORT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IPMARK=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IPPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IPPORTIP=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IPPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_MAC=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_NETPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_NET=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_NETNET=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_NETPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_NETIFACE=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_LIST_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
          #启用 IPv6 网络地址转换
          echo "CONFIG_IP6_NF_NAT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP6_NF_TARGET_MASQUERADE=y" >> ./common/arch/arm64/configs/gki_defconfig
          #由于部分机型的vintf兼容性检测规则,在开启CONFIG_IP6_NF_NAT后开机会出现"您的设备内部出现了问题。请联系您的设备制造商了解详情。"的提示,故添加一个配置修复补丁,在编译内核时隐藏CONFIG_IP6_NF_NAT=y但不影响对应功能编译
          cd common
          wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/other_patch/config.patch
          patch -p1 -F 3 < config.patch || true

      - name: 添加 BBR 等一系列拥塞控制算法
        run: |
          if [[ "${{ github.event.inputs.bbr_enable }}" != "false" ]]; then
            echo "正在添加BBR等拥塞控制算法..."
            cd kernel_workspace
            #开启TCP拥塞控制算法控制器(必需)
            echo "CONFIG_TCP_CONG_ADVANCED=y" >> ./common/arch/arm64/configs/gki_defconfig
            ################################################################################################################################
            # BBR:基于链路容量的代表拥塞控制算法,不再使用丢包、延时等信号去衡量拥塞是否发生,而是直接对网络建模来应对、避免真实的网络拥塞;
            # 具有高吞吐、低延迟、抗丢包的特点,但在手机上使用时由于持续探测带宽/RTT、高频计算与发包增加 CPU 和射频模块功耗,会增加耗电及发热;
            # 且移动基站缓冲区深度通常较小(~50ms),BBR 的带宽探测阶段(ProbeRTT)过度降窗可能导致吞吐量骤降,且网络切换(WiFi→5G)时需重新
            # 探测参数,反而增加延迟或导致速率振荡(短暂卡顿),且存在 RTT 不公平性,与基于丢包的流竞争时可能过于强势,在混合网络环境中
            #(如 BBR + CUBIC 共存),BBR 会抢占更多其他软件的带宽,降低其他应用的公平性(如后台软件更新影响前台视频播放)。
            # 因此,虽然BBR可以显著减少排队延迟,抗丢包能力强,带宽利用率高,但由于其会增加耗电,且易导致网络速率波动,故安卓系统默认不使用
            # BBR拥塞算法,而是使用在吞吐量、稳定性、兼容性、能效之间取得最佳平衡的CUBIC算法。在开启BBR前,请考虑自己是否真的有使用BBR的必要。
            ################################################################################################################################
            echo "CONFIG_TCP_CONG_BBR=y" >> ./common/arch/arm64/configs/gki_defconfig
            #CUBIC:安卓的默认TCP拥塞控制算法,在吞吐量、稳定性、兼容性、能效之间取得最佳平衡,具有高兼容性与公平性、抗网络波动性强、低计算开销的特点,是绝大部分移动场景的优先选择
            echo "CONFIG_TCP_CONG_CUBIC=y" >> ./common/arch/arm64/configs/gki_defconfig
            #VEGAS:基于时延的拥塞控制算法之一,将回路响应时间(Round Trip Time,RTT)增加视为出现拥塞,增加时增大拥塞窗口,减小时减小拥塞窗口
            echo "CONFIG_TCP_CONG_VEGAS=y" >> ./common/arch/arm64/configs/gki_defconfig
            #New Vegas:Vegas 算法的改进版,优化了 RTT 测量和竞争公平性,可以更准确地检测拥塞,与 Reno/CUBIC 共存能力提升
            echo "CONFIG_TCP_CONG_NV=y" >> ./common/arch/arm64/configs/gki_defconfig
            #Westwood+:基于带宽估计(ACK 到达率)动态设置拥塞窗口和慢启动阈值;快速恢复,适合无线网络(区分拥塞丢包与无线丢包)
            echo "CONFIG_TCP_CONG_WESTWOOD=y" >> ./common/arch/arm64/configs/gki_defconfig
            #HTCP:一种基于损失的算法,使用 AIMD 来控制拥塞窗口,根据 RTT 动态调整增长因子,结合延迟和丢包信号,针对高延迟的高速网络进行优化
            echo "CONFIG_TCP_CONG_HTCP=y" >> ./common/arch/arm64/configs/gki_defconfig
            #brutal:一种通过主动探测 + 激进抢占最大化吞吐量的拥塞算法,无拥塞窗口上限,轻度丢包(<20%)不降窗,避免类似 BBR 的 ProbeRTT 阶段,
            #持续维持高发送速率,与 Reno/CUBIC 共存时,Brutal 可通过高频发包抢占 90%+ 带宽,适用于高丢包弱网环境(如公共 Wi-Fi、蜂窝网络)及
            #直播推流、云游戏上行链路等需优先保证吞吐量而非延迟敏感的场景,提升弱网吞吐性能,对抗运营商 QoS 限速。但由于TCP Brutal 仅在应用程序
            #对每个 TCP 连接设置带宽参数之后才能正常工作,绝大部分安卓应用都不支持该操作,故请勿将 TCP Brutal 设置成默认拥塞控制算法。
            echo "CONFIG_TCP_CONG_BRUTAL=y" >> ./common/arch/arm64/configs/gki_defconfig
            if [[ "${{ github.event.inputs.bbr_enable }}" == "default" ]]; then
              echo "正在将BBR设为默认拥塞控制算法..."
              echo "CONFIG_DEFAULT_TCP_CONG=bbr" >> ./common/arch/arm64/configs/gki_defconfig
            else
              echo "CONFIG_DEFAULT_TCP_CONG=cubic" >> ./common/arch/arm64/configs/gki_defconfig
            fi
          fi

      - name: 启用三星SSG IO调度器
        if: inputs.ssg_enable
        run: |
          echo "正在启用三星SSG IO调度器(一加12等极少数机型开启后可能不开机,若出现bug请关闭此项)…"
          cd kernel_workspace
          echo "CONFIG_MQ_IOSCHED_SSG=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_MQ_IOSCHED_SSG_CGROUP=y" >> ./common/arch/arm64/configs/gki_defconfig

      - name: 启用Re-Kernel支持
        if: inputs.rekernel_enable
        run: |
          echo "正在启用Re-Kernel支持(用于与Freezer,NoActive等软件配合使用,提升冻结后台能力)…"
          cd kernel_workspace
          echo "CONFIG_REKERNEL=y" >> ./common/arch/arm64/configs/gki_defconfig

      - name: 启用内核级基带保护
        if: inputs.baseband_guard
        run: |
          echo "正在启用启用内核级基带保护支持…"
          cd kernel_workspace
          echo "CONFIG_BBG=y" >> ./common/arch/arm64/configs/gki_defconfig
          cd ./common
          curl -sSL https://github.com/cctv18/Baseband-guard/raw/master/setup.sh | bash
          sed -i '/^config LSM$/,/^help$/{ /^[[:space:]]*default/ { /baseband_guard/! s/selinux/selinux,baseband_guard/ } }' security/Kconfig

      - name: 添加制作名称
        run: |
          cd kernel_workspace
          echo "替换内核版本后缀..."
          if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
            echo "当前内核版本后缀:${{ github.event.inputs.kernel_suffix }}"
            for f in ./common/scripts/setlocalversion; do
              sed -i "\$s|echo \"\\\$res\"|echo \"-${{ github.event.inputs.kernel_suffix }}\"|" "$f"
            done
          else
            echo "当前内核版本后缀:${{ env.KERNEL_NAME }}"
            for f in ./common/scripts/setlocalversion; do
              sed -i "\$s|echo \"\\\$res\"|echo \"-${{ env.KERNEL_NAME }}\"|" "$f"
            done
          fi
           
      - name: 构建内核
        run: |
          WORKDIR="$(pwd)"
          export PATH="/usr/lib/ccache:$PATH"
          export PATH="$WORKDIR/kernel_workspace/clang20/bin:$PATH"
          export PATH="$WORKDIR/kernel_workspace/build-tools/bin:$PATH"
          CLANG_DIR="$WORKDIR/kernel_workspace/clang20/bin"
          CLANG_VERSION="$($CLANG_DIR/clang --version | head -n 1)"
          LLD_VERSION="$($CLANG_DIR/ld.lld --version | head -n 1)"
          echo "编译器信息:"
          echo "Clang版本: $CLANG_VERSION"
          echo "LLD版本: $LLD_VERSION"
          pahole_version=$(pahole --version 2>/dev/null | head -n1); [ -z "$pahole_version" ] && echo "pahole版本:未安装" || echo "pahole版本:$pahole_version"
          
          export CCACHE_LOGFILE="${{ github.workspace }}/kernel_workspace/ccache.log"
          export CCACHE_COMPILERCHECK="none"
          export CCACHE_BASEDIR="${{ github.workspace }}"
          export CCACHE_NOHASHDIR="true"
          export CCACHE_NOHARDLINK="true"
          export CCACHE_DIR="${{ env.CCACHE_DIR }}"
          export CCACHE_MAXSIZE="3G"
          export CCACHE_IS_KERNEL_COMPILING="true"
          echo "sloppiness = file_stat_matches,include_file_ctime,include_file_mtime,pch_defines,file_macro,time_macros" >> "$CCACHE_DIR/ccache.conf"
          
          cd kernel_workspace/common
          wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/lib/libfakestat.so
          wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/lib/libfaketimeMT.so
          chmod 777 ./*.so
          export FAKESTAT="2025-05-25 12:00:00"
          export FAKETIME="@2025-05-25 13:00:00"
          echo "FAKESTAT=$FAKESTAT" >> $GITHUB_ENV
          echo "FAKETIME=$FAKETIME" >> $GITHUB_ENV
          SO_DIR=$(pwd)
          export PRELOAD_LIBS="$SO_DIR/libfakestat.so $SO_DIR/libfaketimeMT.so"
          #创建 CC (编译器) 包装器
          echo '#!/bin/bash' > cc-wrapper
          echo 'export LD_PRELOAD="'$PRELOAD_LIBS'"' >> cc-wrapper
          echo 'export FAKESTAT="'$FAKESTAT'"' >> cc-wrapper
          echo 'export FAKETIME="'$FAKETIME'"' >> cc-wrapper
          echo 'ccache clang "$@"' >> cc-wrapper
          #创建 LD (链接器) 包装器
          echo '#!/bin/bash' > ld-wrapper
          echo 'export LD_PRELOAD="'$PRELOAD_LIBS'"' >> ld-wrapper
          echo 'export FAKESTAT="'$FAKESTAT'"' >> ld-wrapper
          echo 'export FAKETIME="'$FAKETIME'"' >> ld-wrapper
          echo 'ld.lld "$@"' >> ld-wrapper
          
          # 测试时间劫持测试是否正常工作
          echo "--- [Wrapper Test] 正在创建通用的时间劫持测试脚本 ---"
          echo '#!/bin/bash' > test-wrapper.sh
          echo 'export LD_PRELOAD="'$PRELOAD_LIBS'"' >> test-wrapper.sh
          echo 'export FAKESTAT="'$FAKESTAT'"' >> test-wrapper.sh
          echo 'export FAKETIME="'$FAKETIME'"' >> test-wrapper.sh
          echo 'echo ">>> Wrapper 内部环境检查完毕."' >> test-wrapper.sh
          echo 'exec "$@"' >> test-wrapper.sh # 执行所有传入的参数
          chmod +x test-wrapper.sh
          echo "--- [Wrapper Test] 正在测试 (date) 命令 ---"
          ./test-wrapper.sh date
          echo "--- [Wrapper Test] 正在测试 (stat) 命令 ---"
          ./test-wrapper.sh stat ./Makefile
          echo "--- [Wrapper Test] 测试完毕 ---"
          chmod +x cc-wrapper ld-wrapper
          echo "--- 编译前环境时间: $(LD_PRELOAD=$PRELOAD_LIBS date) ---"
          echo "--- 编译前环境文件时间戳: ---"
          LD_PRELOAD=$PRELOAD_LIBS stat ./Makefile
          
          #在构建内核的同时清除不必要的.NET, Android NDK, Haskell, CodeQL运行库,清理空间且不阻塞后续步骤运行
          sudo rm -rf /usr/share/dotnet &
          sudo rm -rf /usr/local/lib/android &
          sudo rm -rf /opt/ghc &
          sudo rm -rf /opt/hostedtoolcache/CodeQL &
          make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" LD="ld.lld" HOSTLD=ld.lld O=out KCFLAGS+=-O2 KCFLAGS+=-Wno-error gki_defconfig &&
          make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="$(pwd)/cc-wrapper" LD="$(pwd)/ld-wrapper" HOSTLD=ld.lld O=out KCFLAGS+=-O2 KCFLAGS+=-Wno-error Image
          
          # 编译后时间劫持二次校验
          echo "--- 编译后环境时间: $(LD_PRELOAD=$PRELOAD_LIBS date) ---"
          echo "--- 编译后环境文件时间戳: ---"
          LD_PRELOAD=$PRELOAD_LIBS stat ./Makefile
          echo "内核编译完成!"
          echo "ccache状态:"
          ccache -s
          echo "编译后空间:"
          df -h

      - name: 保存新的 ccache 缓存
        if: inputs.ccache_update || steps.ccache-restore.outputs.cache-hit != 'true'
        uses: actions/cache/save@v5
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ${{ env.CCACHE_KEY }}-${{ runner.os }}-${{ github.ref_name }}
         
      - name: 应用KPM并修补内核
        run: |
          if [[ ${{ github.event.inputs.kpm_enable }} == 'builtin' && ( "${{ github.event.inputs.ksu_type }}" == "sukisu" || "${{ github.event.inputs.ksu_type }}" == "resukisu" ) ]]; then
            echo "正在应用KPM并修补内核..."
            cd kernel_workspace/common/out/arch/arm64/boot
            curl -LO https://github.com/SukiSU-Ultra/SukiSU_KernelPatch_patch/releases/latest/download/patch_linux
            chmod +x patch_linux
            ./patch_linux
            rm -f Image
            mv oImage Image
          fi
          if [[ ${{ github.event.inputs.kpm_enable }} == 'kpn' ]]; then
            echo "正在应用KP-N并修补内核..."
            cd kernel_workspace/common/out/arch/arm64/boot
            wget https://github.com/KernelSU-Next/KPatch-Next/releases/latest/download/kptools-linux
            wget https://github.com/KernelSU-Next/KPatch-Next/releases/latest/download/kpimg-linux
            chmod +x ./kptools-linux
            ./kptools-linux -p -i ./Image -k ./kpimg-linux -o ./oImage
            rm -f Image
            mv oImage Image
          fi
          
      - name: 克隆 AnyKernel3 并打包
        id: create_zip
        run: |
          cd kernel_workspace
          git clone https://github.com/cctv18/AnyKernel3 --depth=1
          rm -rf ./AnyKernel3/.git
          cd AnyKernel3
          cp ../common/out/arch/arm64/boot/Image ./Image
          if [[ ! -f ./Image ]]; then
            echo "未找到内核镜像文件,构建可能出错"
            exit 1
          fi
          if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then
            KSU_TYPENAME="SukiSU"
          elif [[ ${{ github.event.inputs.ksu_type }} == "resukisu" ]]; then
            KSU_TYPENAME="ReSukiSU"
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
            KSU_TYPENAME="KSUNext"
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
            KSU_TYPENAME="KSU"
          else
            KSU_TYPENAME="none"
          fi
          if [[ ${{ github.event.inputs.lz4kd_enable }} == 'true' ]]; then
            wget https://raw.githubusercontent.com/$GITHUB_REPOSITORY/refs/heads/$GITHUB_REF_NAME/zram.zip
          fi
          if [[ ${{ github.event.inputs.kpm_enable }} == 'kpn' ]]; then
            wget https://github.com/cctv18/KPatch-Next/releases/latest/download/kpn.zip
          fi
          if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
            AK3_NAME=AnyKernel3_${KSU_TYPENAME}_${{ env.KSUVER }}_${{ env.KERNEL_VERSION }}_${{ github.event.inputs.kernel_suffix }}.zip
          else
            AK3_NAME=AnyKernel3_${KSU_TYPENAME}_${{ env.KSUVER }}_${{ env.KERNEL_VERSION }}_${{ env.KERNEL_NAME }}.zip
          fi
          zip -r ../$AK3_NAME ./*
          echo "ak3name=$AK3_NAME" >> $GITHUB_OUTPUT
          
          #为AK3添加注释(调试信息)
          if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
            FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-${{ github.event.inputs.kernel_suffix }}
          else
            FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-${{ env.KERNEL_NAME }}
          fi
          TIME_NOW="$(TZ='Asia/Shanghai' date +'%Y-%m-%d %H:%M:%S')"
          echo "Author: $GITHUB_ACTOR" > ./ak3.log
          echo "Repo: $GITHUB_REPOSITORY" >> ./ak3.log
          echo "Branch: $GITHUB_REF_NAME" >> ./ak3.log
          echo "Run ID: $GITHUB_RUN_ID" >> ./ak3.log
          echo "Commit: $GITHUB_SHA" >> ./ak3.log
          echo "Time: $TIME_NOW" >> ./ak3.log
          echo "Kernel Ver: $FULL_VERSION" >> ./ak3.log
          echo "KSU Branch: ${KSU_TYPENAME}" >> ./ak3.log
          echo "KSU Ver: ${KSUVER}" >> ./ak3.log
          echo "susfs: ${{ github.event.inputs.susfs_enable }}" >> ./ak3.log
          echo "KPM: ${{ github.event.inputs.kpm_enable }}" >> ./ak3.log
          echo "LZ4: ${{ github.event.inputs.lz4_enable }}" >> ./ak3.log
          echo "LZ4KD: ${{ github.event.inputs.lz4kd_enable }}" >> ./ak3.log
          echo "IPset: ${{ github.event.inputs.better_net }}" >> ./ak3.log
          echo "BBR&Brutal: ${{ github.event.inputs.bbr_enable }}" >> ./ak3.log
          echo "SSG: ${{ github.event.inputs.ssg_enable }}" >> ./ak3.log
          echo "Re-Kernel: ${{ github.event.inputs.rekernel_enable }}" >> ./ak3.log
          echo "BBG: ${{ github.event.inputs.baseband_guard }}" >> ./ak3.log
          zip -z ../$AK3_NAME < ./ak3.log

      - name: 上传 Ccache 调试日志
        if: always() && inputs.ccache_debug
        uses: actions/upload-artifact@v7
        with:
          name: ccache-debug-log
          path: ${{ github.workspace }}/kernel_workspace/ccache.log
          archive: true

      - name: 上传 ZIP 工件
        uses: actions/upload-artifact@v7
        with:
          path: ${{ github.workspace }}/kernel_workspace/AnyKernel*.zip
          archive: false

  release:
    needs: build
    runs-on: ubuntu-latest
    permissions:
      contents: write
      packages: write
      actions: read
      
    steps:
      - name: 下载 ZIP 工件
        uses: actions/download-artifact@v8
        with:
          name: ${{ needs.build.outputs.ak3name }}
          path: ./release_zips
          skip-decompress: true

      - name: 设置环境变量
        run: |
          if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
            FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-${{ github.event.inputs.kernel_suffix }}
            echo "FULL_VERSION=$FULL_VERSION" >> $GITHUB_ENV
            export FULL_VERSION=$FULL_VERSION
          else
            FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-${{ env.KERNEL_NAME }}
            echo "FULL_VERSION=$FULL_VERSION" >> $GITHUB_ENV
            export FULL_VERSION=$FULL_VERSION
          fi
          TIME="$(TZ='Asia/Shanghai' date +'%y%m%d%H%M%S')"
          TIME_FORM="$(TZ='Asia/Shanghai' date +'%Y-%m-%d %H:%M:%S')"
          echo "TIME=$TIME" >> $GITHUB_ENV
          echo "TIME_FORM=$TIME_FORM" >> $GITHUB_ENV
          TAG_HEAD="OPPO-OPlus-Realme-build"
          echo "TAG_HEAD=$TAG_HEAD" >> $GITHUB_ENV
          if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then
            KSU_TYPENAME="SukiSU Ultra"
          elif [[ ${{ github.event.inputs.ksu_type }} == "resukisu" ]]; then
            KSU_TYPENAME="ReSukiSU"
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
            KSU_TYPENAME="KernelSU Next"
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
            KSU_TYPENAME="KernelSU (Official)"
          else
            KSU_TYPENAME="无内置KSU"
          fi
          echo "KSU_TYPENAME=$KSU_TYPENAME" >> $GITHUB_ENV
         
      - name: 创建发布
        id: create_release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          cat << 'EOF' > release_notes.md
          ### 📱 欧加真 ${{ env.KSU_TYPENAME }} MT6989 通用内核 | 构建信息
          - 内核版本号: ${{ env.FULL_VERSION }}
          - 编译时间: ${{ env.TIME_FORM }}
          - 机型:欧加真骁龙8Gen3通用 ${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }} 内核(基于一加Ace5竞速版 ${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }} 版官方OKI源码)
          - KSU分支:${{ env.KSU_TYPENAME }}
          - susfs支持:${{ github.event.inputs.susfs_enable }}
          - KPM支持 :${{ github.event.inputs.kpm_enable }}
          - LZ4支持:${{ github.event.inputs.lz4_enable }}
          - LZ4KD支持:${{ github.event.inputs.lz4kd_enable }}
          - 网络功能增强:${{ github.event.inputs.better_net }}
          - BBR/Brutal 等拥塞控制算法支持:${{ github.event.inputs.bbr_enable }}
          - 三星SSG IO调度器支持:${{ github.event.inputs.ssg_enable }}
          - Re-Kernel支持:${{ github.event.inputs.rekernel_enable }}
          - 内核级基带保护支持:${{ github.event.inputs.baseband_guard }}
          - ReSukiSU管理器下载:[ReSukiSU_CI](https://github.com/cctv18/ReSukiSU_CI/releases)
          - SukiSU Ultra管理器下载:[SukiSU-Ultra](https://github.com/SukiSU-Ultra/SukiSU-Ultra/releases)
          - KernelSU Next管理器下载:[KernelSU-Next](https://github.com/KernelSU-Next/KernelSU-Next/releases)
          - KSU原版管理器下载:[KernelSU](https://github.com/tiann/KernelSU/releases)
          
          ### ⏫️ 更新内容:
          - 更新${{ env.KSU_TYPENAME }}至最新版本(${{ needs.build.outputs.ksuver }})
          - (预留)
          
          ### 📋 安装方法 | Installation Guide
          1. 若你的手机已经安装了第三方Recovery(如TWRP),可下载对应机型的AnyKernel刷机包后进入Recovery模式,通过Recovery刷入刷机包后重启设备;
          2. 若你的手机之前已有 root 权限,可在手机上安装[HorizonKernelFlasher](https://github.com/libxzr/HorizonKernelFlasher/releases),在HorizonKernelFlasher中刷入AnyKernel刷机包并重启;
          3. 若你之前已刷入SukiSU Ultra内核,且SukiSU Ultra管理器已更新至最新版本,可在SukiSU Ultra管理器中直接刷入AnyKernel刷机包并重启;
          4. 刷入无lz4kd补丁版的内核前若刷入过lz4kd补丁版的内核,为避免出错,请先关闭zram模块;
          5. 由于KernelSU上游更新了元模块功能,最新版KSU管理器(包括除KernelSU Next以外的各分支)需要配合元模块(metamodule)才能正常挂载模块。目前的元模块包括[meta overlayfs](https://github.com/KernelSU-Modules-Repo/meta-overlayfs), [mountify](https://github.com/backslashxx/mountify), [meta magicmount](https://github.com/7a72/meta-magic_mount/), [meta magicmount rs](https://github.com/Tools-cx-app/meta-magic_mount/), [hybrid mount](https://github.com/YuzakiKokuban/meta-hybrid_mount)等。若你是第一次使用KSU或刚从旧版KSU管理器升级至新版,请先安装一个元模块,这样其他涉及系统挂载的模块才能正常运行;
          6. KernelPatch Next(即KPN)是一个独立于KSU的KPM实现,可以运行在任意KSU/面具环境中(不适用于Apatch),且不能与(Re)SukiSU内置的kpm功能共同使用,使用前请保证你的内核没有内置的kpm实现/修补。
          
          #### ※※※刷写内核有风险,为防止出现意外导致手机变砖,在刷入内核前请务必用[KernelFlasher](https://github.com/capntrips/KernelFlasher)等软件备份boot等关键启动分区!※※※
          EOF

          gh release create "${{ env.TAG_HEAD }}-${{ env.TIME }}" \
            --repo "${{ github.repository }}" \
            --title "${{ env.TAG_HEAD }}-${{ env.FULL_VERSION }}" \
            --notes-file release_notes.md \
            release_zips/AnyKernel3_*.zip


================================================
FILE: .github/workflows/fastbuild_6.1.118.yml
================================================
name: 6.1.118 欧加真OKI内核快速构建

env:
  TZ: Asia/Shanghai
  ANDROID_VERSION: 'android14'
  KERNEL_VERSION: '6.1'
  SUB_VERSION: '118'
  KERNEL_NAME: 'android14-11-o-gca13bffobf09'
  CCACHE_KEY: ccache-ecsv2-6.1.118

on:
  workflow_dispatch:
    inputs:
      ksu_type:
        description: 'KernelSU分支(ReSukiSU/SukiSU Ultra/KernelSU Next/KSU(原版)/无内置KSU,默认ReSukiSU)'
        required: true
        type: choice
        default: 'resukisu'
        options:
          - 'resukisu'
          - 'sukisu'
          - 'ksunext'
          - 'ksu'
          - 'none'
      susfs_enable:
        description: '是否开启susfs(用于增强隐藏环境挂载功能; 可能轻微增加耗电,上游更新导致不稳定时或不需要可关闭)'
        required: true
        type: boolean
        default: 'true'
      kpm_enable:
        description: '是否开启kpm(builtin-使用(re)sukisu内置kpm, kpn-使用独立kpm实现(支持任意KSU/面具环境); 不需要可保持默认关闭)'
        required: true
        type: choice
        default: 'false'
        options:
          - 'false'
          - 'builtin'
          - 'kpn'
      lz4_enable:
        description: '是否安装 lz4 1.10.0+zstd 1.5.7 补丁'
        required: true
        type: boolean
        default: 'true'
      lz4kd_enable:
        description: '是否安装 LZ4KD 补丁(若已开启lz4+zstd补丁则可不开启)'
        required: true
        type: boolean
        default: 'false'
      bbr_enable:
        description: '是否启用bbr算法(优化上行数据,对手机日用无太大意义甚至可能负优化;false关闭,true仅加入算法,default设为默认)'
        required: true
        type: choice
        default: 'false'
        options:
          - 'false'
          - 'true'
          - 'default'
      better_net:
        description: '是否开启网络功能拓展配置(用于为ipset及需要iptables等高级网络功能内核支持的程序提供支持)'
        required: true
        type: boolean
        default: 'false'
      ssg_enable:
        description: '是否启用三星SSG IO调度器支持(提升IO读写性能; 在一加12上可能导致bug)'
        required: true
        type: boolean
        default: 'true'
      rekernel_enable:
        description: '是否启用Re-Kernel支持(与Freezer/NoActive等软件配合, 提升应用冻结能力)'
        required: true
        type: boolean
        default: 'false'
      baseband_guard:
        description: '是否开启内核级基带保护(阻止一切对非用户分区的写入,有效防止格机)'
        required: true
        type: boolean
        default: 'true'
      ccache_update:
        description: '更新ccache缓存(将本次编译生成的ccache缓存覆盖至仓库缓存,在更改编译配置、源码或需要刷新缓存时开启)'
        required: true
        type: boolean
        default: 'false'
      ccache_debug:
        description: '是否上传 Ccache调试日志(用于调试, 无需要不必开启)'
        required: true
        type: boolean
        default: 'false'
      kernel_suffix:
        description: '内核后缀(留空默认,开头别加连字符,勿加空格等影响指令运行的保留字符)'
        required: false
        type: string
        default: ''

jobs:
  build:
    runs-on: ubuntu-latest
    outputs:
      ksuver: ${{ steps.ksu_version.outputs.ksuver }}
      ak3name: ${{ steps.create_zip.outputs.ak3name }}
    permissions:
      actions: write
      contents: read
    steps:
      - name: 安装环境依赖+初始化源码仓库及llvm-Clang20工具链
        run: |
          rm -rf kernel_workspace
          mkdir kernel_workspace
          cd kernel_workspace
          echo "当前仓库:$GITHUB_REPOSITORY"
          echo "当前分支:$GITHUB_REF_NAME"
          
          sudo apt-mark hold firefox &&
          sudo apt-mark hold libc-bin &&
          sudo apt purge man-db &&
          sudo rm -rf /var/lib/man-db/auto-update &&
          sudo apt update &&
          sudo apt-get install -y --no-install-recommends binutils python-is-python3 libssl-dev libelf-dev &
          #旧版完整指令:(由于经过验证大部分指令已内置于GitHub Action环境中,故进行精简)
          #sudo apt-get install -y --no-install-recommends curl bison flex make binutils git perl gcc python3 python-is-python3 bc libssl-dev libelf-dev zip unzip ccache
          
          #使用最新版ccache-ECS(特化优化内核编译缓存,大幅提升二次不同配置编译速度)
          wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/lib/ccache-x86-64 -O ccache &&
          sudo cp -f ./ccache /usr/bin/ccache &&
          sudo chmod +x /usr/bin/ccache &&
          rm -f ./ccache &
          
          echo "正在克隆源码仓库..."
          aria2c -s16 -x16 -k1M https://github.com/cctv18/android_kernel_common_oneplus_sm8650/archive/refs/heads/oneplus/sm8650_b_16.0.0_oneplus12.zip -o common.zip && 
          unzip -q common.zip && 
          mv "android_kernel_common_oneplus_sm8650-oneplus-sm8650_b_16.0.0_oneplus12" common &&
          rm -rf common.zip &
          
          echo "正在克隆llvm-Clang20工具链..." &&
          mkdir -p clang20 &&
          aria2c -s16 -x16 -k1M https://github.com/cctv18/oneplus_sm8650_toolchain/releases/download/LLVM-Clang20-r547379/clang-r547379.zip -o clang.zip &&
          unzip -q clang.zip -d clang20 &&
          rm -rf clang.zip &
          
          echo "正在克隆构建工具..." &&
          aria2c -s16 -x16 -k1M https://github.com/cctv18/oneplus_sm8650_toolchain/releases/download/LLVM-Clang20-r547379/build-tools.zip -o build-tools.zip &&
          unzip -q build-tools.zip &&
          rm -rf build-tools.zip &
          
          wait
          echo "所有源码及llvm-Clang20工具链初始化完成!"
          echo "正在去除 ABI 保护 & 去除 dirty 后缀..."
          rm common/android/abi_gki_protected_exports_* || true
          for f in common/scripts/setlocalversion; do
            sed -i 's/ -dirty//g' "$f"
            sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' "$f"
          done

      - name: 配置ccache目录
        run: |
          echo "CCACHE_DIR=$HOME/.ccache_${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}" >> $GITHUB_ENV
          echo "CCACHE_MAXSIZE=3G" >> $GITHUB_ENV
          echo "当前磁盘空间:"
          df -h
          echo "当前构建内核版本:${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}"

      - name: 载入当前版本内核的 ccache缓存
        uses: actions/cache@v5
        id: ccache-restore
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ${{ env.CCACHE_KEY }}-${{ runner.os }}-${{ github.ref_name }}
          restore-keys: |
            ${{ env.CCACHE_KEY }}-${{ runner.os }}-
            ${{ env.CCACHE_KEY }}-

      - name: 拉取公共预置 ccache 缓存
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          echo "检查本地缓存状态..."
          if [ -d "${{ env.CCACHE_DIR }}" ] && [ "$(ls -A ${{ env.CCACHE_DIR }} 2>/dev/null)" ]; then
            echo "检测到本地已成功载入 ccache 缓存,跳过公共 ccache 拉取!"
            exit 0
          fi
          
          echo "未命中缓存,尝试拉取最新公共 ccache ..."
          mkdir -p ${{ env.CCACHE_DIR }}
          FILE_NAME="ccache-${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}.tar.zst"
          
          if gh release download -p "$FILE_NAME" -R cctv18/public_ccache; then
            echo "成功下载 $FILE_NAME,正在解压..."
            tar -I zstd -xf "$FILE_NAME" -C ${{ env.CCACHE_DIR }}
            echo "公共 ccache 恢复完成!"
          else
            echo "公共 ccache 中未找到对应的 ccache 文件,将进行全量全新编译..."
          fi

      - name: 清除旧 ccache 缓存
        if: inputs.ccache_update
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          echo "正在清除仓库中的旧 ccache 缓存..."
          if gh cache delete ${{ env.CCACHE_KEY }}-${{ runner.os }}-${{ github.ref_name }} -R ${{ github.repository }}; then
            echo "成功删除旧的 ccache 缓存!"
          else
            echo "旧缓存不存在或已被清理!"
          fi
      
      - name: 初始化并配置ccache
        run: |
          # 设置ccache环境变量
          export CCACHE_COMPILERCHECK="none"
          export CCACHE_BASEDIR="${{ github.workspace }}"
          export CCACHE_NOHASHDIR="true"
          export CCACHE_NOHARDLINK="true"
          export CCACHE_DIR="${{ env.CCACHE_DIR }}"
          export CCACHE_MAXSIZE="${{ env.CCACHE_MAXSIZE }}"
          
          # 确保ccache目录存在
          mkdir -p "$CCACHE_DIR"
          
          # 每次运行都重新配置缓存大小
          echo "配置ccache缓存大小为: $CCACHE_MAXSIZE"
          ccache -M "$CCACHE_MAXSIZE"
          ccache -o compression=true
          
          # 显示初始缓存状态
          echo "ccache初始状态:"
          ccache -s
          
          # 如果缓存恢复命中,显示详细信息
          if [ "${{ steps.ccache-restore.outputs.cache-hit }}" == 'true' ]; then
            echo "ccache缓存命中详情:"
            ccache -sv
          fi

      - name: 添加KernelSU
        id: ksu_version
        run: |
          # 进入内核工作目录
          cd kernel_workspace
          if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then
            echo "正在配置SukiSU Ultra..."
            curl -LSs "https://raw.githubusercontent.com/ShirkNeko/SukiSU-Ultra/refs/heads/main/kernel/setup.sh" | bash -s builtin
            cd ./KernelSU
            # 获取当前 Git 提交的短哈希 (8位)
            GIT_COMMIT_HASH=$(git rev-parse --short=8 HEAD)
            echo "当前提交哈希: $GIT_COMMIT_HASH"
            export KSU_VERSION=$KSU_VERSION
            # 尝试最多 3 次获取 KernelSU API 版本号
            for i in {1..3}; do
              # 从远程 Makefile 中提取 KSU_API_VERSION
              KSU_API_VERSION=$(curl -s "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/builtin/kernel/Makefile" | 
                # 查找第一个包含版本定义的行
                grep -m1 "KSU_VERSION_API :=" | 
                # 提取等号后的值
                awk -F'= ' '{print $2}' | 
                # 删除所有空白字符
                tr -d '[:space:]')
              # 如果成功获取到版本号则跳出循环,否则等待 1 秒后重试
              [ -n "$KSU_API_VERSION" ] && break || sleep 1
            done
            # 如果获取失败,使用默认版本号 3.1.7
            [ -z "$KSU_API_VERSION" ] && KSU_API_VERSION="3.1.7"
            # 将 API 版本号存储到 GitHub 环境变量
            echo "KSU_API_VERSION=$KSU_API_VERSION" >> $GITHUB_ENV
            # 创建版本定义模板&版本格式函数: 使用获取的提交哈希和固定后缀
            # KSU_VERSION_API: API 版本定义
            # KSU_VERSION_FULL: 完整版本定义
            VERSION_DEFINITIONS=$'define get_ksu_version_full\nv\\$1-'"$GIT_COMMIT_HASH"$'@cctv18\nendef\n\nKSU_VERSION_API := '"$KSU_API_VERSION"$'\nKSU_VERSION_FULL := v'"$KSU_API_VERSION"$'-'"$GIT_COMMIT_HASH"$'@cctv18'
            # 清理内核 Makefile 中的旧版本定义
            # 删除版本函数
            sed -i '/define get_ksu_version_full/,/endef/d' kernel/Makefile
            # 删除 API 版本定义
            sed -i '/KSU_VERSION_API :=/d' kernel/Makefile
            # 删除完整版本定义
            sed -i '/KSU_VERSION_FULL :=/d' kernel/Makefile
            # 在 REPO_OWNER 行后插入新版本定义
            awk -v def="$VERSION_DEFINITIONS" '
              # 当找到 REPO_OWNER 行时,插入版本定义并设置标记
              /REPO_OWNER :=/ {print; print def; inserted=1; next}
              # 打印所有行
              1
              # 如果未找到插入点,在文件末尾追加
              END {if (!inserted) print def}
            ' kernel/Makefile > kernel/Makefile.tmp && mv kernel/Makefile.tmp kernel/Makefile

            # 生成自定义版本号(基于提交计数), 失败时使用 114514
            KSU_VERSION=$(expr $(git rev-list --count main) + 37185 2>/dev/null || echo 114514)
            # 存储版本号到 GitHub 环境变量
            echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
            echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT

            # 验证修改结果
            grep -A10 "REPO_OWNER" kernel/Makefile  # 检查插入点后的内容
            grep "KSU_VERSION_FULL" kernel/Makefile # 确认版本定义存在
            echo "SukiSU版本号: v${KSU_API_VERSION}-${GIT_COMMIT_HASH}@cctv18"
          elif [[ ${{ github.event.inputs.ksu_type }} == "resukisu" ]]; then
            echo "正在配置ReSukiSU..."
            curl -LSs "https://raw.githubusercontent.com/ReSukiSU/ReSukiSU/refs/heads/main/kernel/setup.sh" | bash -s main
            echo 'CONFIG_KSU_FULL_NAME_FORMAT="%TAG_NAME%-%COMMIT_SHA%@cctv18"' >> ./common/arch/arm64/configs/gki_defconfig
            cd ./KernelSU
            # 生成自定义版本号(基于提交计数), 失败时使用 114514
            KSU_VERSION=$(expr $(git rev-list --count main) + 30700 2>/dev/null || echo 114514)
            # 存储版本号到 GitHub 环境变量
            echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
            echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
            echo "正在配置KernelSU Next..."
            curl -LSs "https://raw.githubusercontent.com/pershoot/KernelSU-Next/refs/heads/dev-susfs/kernel/setup.sh" | bash -s dev-susfs
            cd KernelSU-Next
            rm -rf .git
            KSU_VERSION=$(expr $(curl -sI "https://api.github.com/repos/pershoot/KernelSU-Next/commits?sha=dev&per_page=1" | grep -i "link:" | sed -n 's/.*page=\([0-9]*\)>; rel="last".*/\1/p') "+" 30000)
            echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
            echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
            sed -i "s/KSU_VERSION_FALLBACK := 1/KSU_VERSION_FALLBACK := $KSU_VERSION/g" kernel/Kbuild
            KSU_GIT_TAG=$(curl -sL "https://api.github.com/repos/KernelSU-Next/KernelSU-Next/tags" | grep -o '"name": *"[^"]*"' | head -n 1 | sed 's/"name": "//;s/"//')
            sed -i "s/KSU_VERSION_TAG_FALLBACK := v0.0.1/KSU_VERSION_TAG_FALLBACK := $KSU_GIT_TAG/g" kernel/Kbuild
            #为KernelSU Next添加WildKSU管理器支持
            cd ../common/drivers/kernelsu
            wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/other_patch/apk_sign.patch
            patch -p2 -N -F 3 < apk_sign.patch || true
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
            echo "正在配置原版 KernelSU (tiann/KernelSU)..."
            curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/refs/heads/main/kernel/setup.sh" | bash -s main
            cd ./KernelSU
            KSU_VERSION=$(expr $(curl -sI "https://api.github.com/repos/tiann/KernelSU/commits?sha=main&per_page=1" | grep -i "link:" | sed -n 's/.*page=\([0-9]*\)>; rel="last".*/\1/p') "+" 30000)
            echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
            echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
            sed -i "s/DKSU_VERSION=16/DKSU_VERSION=${KSU_VERSION}/" kernel/Kbuild
          else
            echo "已选择无内置KernelSU模式,跳过KernelSU配置..."
          fi

      - name: 应用 KernelSU & SUSFS 补丁
        if: inputs.susfs_enable
        run: |
          cd kernel_workspace
          if [[ ${{ github.event.inputs.ksu_type }} != "none" ]]; then
            echo "正在添加susfs补丁..."
            git clone --depth=1 https://github.com/cctv18/susfs4oki.git susfs4ksu -b oki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}
            wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/other_patch/69_hide_stuff.patch -O ./common/69_hide_stuff.patch
            cp ./susfs4ksu/kernel_patches/50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch ./common/
            cp ./susfs4ksu/kernel_patches/fs/* ./common/fs/
            cp ./susfs4ksu/kernel_patches/include/linux/* ./common/include/linux/
            cd ./common
            patch -p1 < 50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch || true
            patch -p1 -N -F 3 < 69_hide_stuff.patch || true
            cd ..
          else
            echo "已选择无内置KernelSU模式,跳过susfs配置..."
          fi
          if [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
            echo "正在为原版 KernelSU (tiann/KernelSU)添加补丁..."
            cp ./susfs4ksu/kernel_patches/KernelSU/10_enable_susfs_for_ksu.patch ./KernelSU/
            cd ./KernelSU
            patch -p1 < 10_enable_susfs_for_ksu.patch || true
          fi
          
      - name: 应用lz4 1.10.0 & zstd 1.5.7补丁
        if: inputs.lz4_enable
        run: |
          echo "正在添加lz4 1.10.0 & zstd 1.5.7补丁…"
          cd kernel_workspace
          git clone --depth=1 https://github.com/$GITHUB_REPOSITORY.git -b $GITHUB_REF_NAME $GITHUB_ACTOR
          cp ./$GITHUB_ACTOR/zram_patch/001-lz4.patch ./common/
          cp ./$GITHUB_ACTOR/zram_patch/lz4armv8.S ./common/lib
          cp ./$GITHUB_ACTOR/zram_patch/002-zstd.patch ./common/
          cd ./common
          git apply -p1 < 001-lz4.patch || true
          patch -p1 < 002-zstd.patch || true

      - name: 应用 lz4kd 补丁
        if: inputs.lz4kd_enable
        run: |
          echo "正在添加lz4kd补丁…"
          cd kernel_workspace
          if [ ! -d "SukiSU_patch" ]; then
            git clone --depth=1 https://github.com/ShirkNeko/SukiSU_patch.git
          fi
          cd common
          cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./include/linux/
          cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./lib
          cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./crypto
          cp ../SukiSU_patch/other/zram/zram_patch/${{ env.KERNEL_VERSION }}/lz4kd.patch ./
          patch -p1 -F 3 < lz4kd.patch || true
          
      - name: 添加SUSFS 配置项
        if: inputs.susfs_enable
        run: |
          cd kernel_workspace
          echo "CONFIG_KSU_SUSFS=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_HAS_MAGIC_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SUS_PATH=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SUS_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_AUTO_ADD_SUS_KSU_DEFAULT_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_AUTO_ADD_SUS_BIND_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SUS_KSTAT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_TRY_UMOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_AUTO_ADD_TRY_UMOUNT_FOR_BIND_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SPOOF_UNAME=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_ENABLE_LOG=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_OPEN_REDIRECT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SUS_MAP=y" >> ./common/arch/arm64/configs/gki_defconfig
          
      - name: 添加 KSU & 其他配置项
        run: |
          cd kernel_workspace
          echo "CONFIG_KSU=y" >> ./common/arch/arm64/configs/gki_defconfig
          if [[ ${{ github.event.inputs.kpm_enable }} == 'builtin' && ( "${{ github.event.inputs.ksu_type }}" == "sukisu" || "${{ github.event.inputs.ksu_type }}" == "resukisu" ) ]]; then
            echo "CONFIG_KPM=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          if [[ "${{ github.event.inputs.susfs_enable }}" == "false" ]]; then
            echo "CONFIG_KSU_SUSFS=n" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          #添加对 Mountify (backslashxx/mountify) 模块的支持
          echo "CONFIG_TMPFS_XATTR=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_TMPFS_POSIX_ACL=y" >> ./common/arch/arm64/configs/gki_defconfig
          if [[ ${{ github.event.inputs.lz4kd_enable }} == 'true' ]]; then
            echo "CONFIG_ZSMALLOC=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_LZ4HC=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_LZ4K=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_LZ4KD=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_842=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          # 开启O2编译优化配置
          echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> ./common/arch/arm64/configs/gki_defconfig
          #禁用 defconfig 检查
          sed -i 's/check_defconfig//' ./common/build.config.gki
          #跳过将uapi标准头安装到 usr/include 目录的不必要操作,节省编译时间
          echo "CONFIG_HEADERS_INSTALL=n" >> ./common/arch/arm64/configs/gki_defconfig
          
      - name: 启用网络功能增强优化配置
        if: inputs.better_net
        run: |
          cd kernel_workspace
          #启用  BPF 流解析器,实现高性能网络流量处理,增强网络监控和分析能力
          echo "CONFIG_BPF_STREAM_PARSER=y" >> ./common/arch/arm64/configs/gki_defconfig
          #开启增强 Netfilter 防火墙扩展模块,支持基于地址类型的匹配规则,启用 IP 集合支持,提高防火墙规则灵活性,支持更复杂的流量过滤策略
          echo "CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_NETFILTER_XT_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
          #启用 IP 集框架及其多种数据结构实现,提供高效的大规模 IP 地址管理,提高防火墙规则处理效率,减少内存占用
          echo "CONFIG_IP_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_MAX=65534" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_BITMAP_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_BITMAP_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_BITMAP_PORT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IPMARK=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IPPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IPPORTIP=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IPPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_MAC=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_NETPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_NET=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_NETNET=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_NETPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_NETIFACE=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_LIST_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
          #启用 IPv6 网络地址转换
          echo "CONFIG_IP6_NF_NAT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP6_NF_TARGET_MASQUERADE=y" >> ./common/arch/arm64/configs/gki_defconfig
          #由于部分机型的vintf兼容性检测规则,在开启CONFIG_IP6_NF_NAT后开机会出现"您的设备内部出现了问题。请联系您的设备制造商了解详情。"的提示,故添加一个配置修复补丁,在编译内核时隐藏CONFIG_IP6_NF_NAT=y但不影响对应功能编译
          cd common
          wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/other_patch/config.patch
          patch -p1 -F 3 < config.patch || true

      - name: 添加 BBR 等一系列拥塞控制算法
        run: |
          if [[ "${{ github.event.inputs.bbr_enable }}" != "false" ]]; then
            echo "正在添加BBR等拥塞控制算法..."
            cd kernel_workspace
            #开启TCP拥塞控制算法控制器(必需)
            echo "CONFIG_TCP_CONG_ADVANCED=y" >> ./common/arch/arm64/configs/gki_defconfig
            ################################################################################################################################
            # BBR:基于链路容量的代表拥塞控制算法,不再使用丢包、延时等信号去衡量拥塞是否发生,而是直接对网络建模来应对、避免真实的网络拥塞;
            # 具有高吞吐、低延迟、抗丢包的特点,但在手机上使用时由于持续探测带宽/RTT、高频计算与发包增加 CPU 和射频模块功耗,会增加耗电及发热;
            # 且移动基站缓冲区深度通常较小(~50ms),BBR 的带宽探测阶段(ProbeRTT)过度降窗可能导致吞吐量骤降,且网络切换(WiFi→5G)时需重新
            # 探测参数,反而增加延迟或导致速率振荡(短暂卡顿),且存在 RTT 不公平性,与基于丢包的流竞争时可能过于强势,在混合网络环境中
            #(如 BBR + CUBIC 共存),BBR 会抢占更多其他软件的带宽,降低其他应用的公平性(如后台软件更新影响前台视频播放)。
            # 因此,虽然BBR可以显著减少排队延迟,抗丢包能力强,带宽利用率高,但由于其会增加耗电,且易导致网络速率波动,故安卓系统默认不使用
            # BBR拥塞算法,而是使用在吞吐量、稳定性、兼容性、能效之间取得最佳平衡的CUBIC算法。在开启BBR前,请考虑自己是否真的有使用BBR的必要。
            ################################################################################################################################
            echo "CONFIG_TCP_CONG_BBR=y" >> ./common/arch/arm64/configs/gki_defconfig
            #CUBIC:安卓的默认TCP拥塞控制算法,在吞吐量、稳定性、兼容性、能效之间取得最佳平衡,具有高兼容性与公平性、抗网络波动性强、低计算开销的特点,是绝大部分移动场景的优先选择
            echo "CONFIG_TCP_CONG_CUBIC=y" >> ./common/arch/arm64/configs/gki_defconfig
            #VEGAS:基于时延的拥塞控制算法之一,将回路响应时间(Round Trip Time,RTT)增加视为出现拥塞,增加时增大拥塞窗口,减小时减小拥塞窗口
            echo "CONFIG_TCP_CONG_VEGAS=y" >> ./common/arch/arm64/configs/gki_defconfig
            #New Vegas:Vegas 算法的改进版,优化了 RTT 测量和竞争公平性,可以更准确地检测拥塞,与 Reno/CUBIC 共存能力提升
            echo "CONFIG_TCP_CONG_NV=y" >> ./common/arch/arm64/configs/gki_defconfig
            #Westwood+:基于带宽估计(ACK 到达率)动态设置拥塞窗口和慢启动阈值;快速恢复,适合无线网络(区分拥塞丢包与无线丢包)
            echo "CONFIG_TCP_CONG_WESTWOOD=y" >> ./common/arch/arm64/configs/gki_defconfig
            #HTCP:一种基于损失的算法,使用 AIMD 来控制拥塞窗口,根据 RTT 动态调整增长因子,结合延迟和丢包信号,针对高延迟的高速网络进行优化
            echo "CONFIG_TCP_CONG_HTCP=y" >> ./common/arch/arm64/configs/gki_defconfig
            #brutal:一种通过主动探测 + 激进抢占最大化吞吐量的拥塞算法,无拥塞窗口上限,轻度丢包(<20%)不降窗,避免类似 BBR 的 ProbeRTT 阶段,
            #持续维持高发送速率,与 Reno/CUBIC 共存时,Brutal 可通过高频发包抢占 90%+ 带宽,适用于高丢包弱网环境(如公共 Wi-Fi、蜂窝网络)及
            #直播推流、云游戏上行链路等需优先保证吞吐量而非延迟敏感的场景,提升弱网吞吐性能,对抗运营商 QoS 限速。但由于TCP Brutal 仅在应用程序
            #对每个 TCP 连接设置带宽参数之后才能正常工作,绝大部分安卓应用都不支持该操作,故请勿将 TCP Brutal 设置成默认拥塞控制算法。
            echo "CONFIG_TCP_CONG_BRUTAL=y" >> ./common/arch/arm64/configs/gki_defconfig
            if [[ "${{ github.event.inputs.bbr_enable }}" == "default" ]]; then
              echo "正在将BBR设为默认拥塞控制算法..."
              echo "CONFIG_DEFAULT_TCP_CONG=bbr" >> ./common/arch/arm64/configs/gki_defconfig
            else
              echo "CONFIG_DEFAULT_TCP_CONG=cubic" >> ./common/arch/arm64/configs/gki_defconfig
            fi
          fi

      - name: 启用三星SSG IO调度器
        if: inputs.ssg_enable
        run: |
          echo "正在启用三星SSG IO调度器(一加12等极少数机型开启后可能不开机,若出现bug请关闭此项)…"
          cd kernel_workspace
          echo "CONFIG_MQ_IOSCHED_SSG=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_MQ_IOSCHED_SSG_CGROUP=y" >> ./common/arch/arm64/configs/gki_defconfig

      - name: 启用Re-Kernel支持
        if: inputs.rekernel_enable
        run: |
          echo "正在启用Re-Kernel支持(用于与Freezer,NoActive等软件配合使用,提升冻结后台能力)…"
          cd kernel_workspace
          echo "CONFIG_REKERNEL=y" >> ./common/arch/arm64/configs/gki_defconfig

      - name: 启用内核级基带保护
        if: inputs.baseband_guard
        run: |
          echo "正在启用启用内核级基带保护支持…"
          cd kernel_workspace
          echo "CONFIG_BBG=y" >> ./common/arch/arm64/configs/gki_defconfig
          cd ./common
          curl -sSL https://github.com/cctv18/Baseband-guard/raw/master/setup.sh | bash
          sed -i '/^config LSM$/,/^help$/{ /^[[:space:]]*default/ { /baseband_guard/! s/selinux/selinux,baseband_guard/ } }' security/Kconfig

      - name: 添加制作名称
        run: |
          cd kernel_workspace
          echo "替换内核版本后缀..."
          if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
            echo "当前内核版本后缀:${{ github.event.inputs.kernel_suffix }}"
            for f in ./common/scripts/setlocalversion; do
              sed -i "\$s|echo \"\\\$res\"|echo \"-${{ github.event.inputs.kernel_suffix }}\"|" "$f"
            done
          else
            echo "当前内核版本后缀:${{ env.KERNEL_NAME }}"
            for f in ./common/scripts/setlocalversion; do
              sed -i "\$s|echo \"\\\$res\"|echo \"-${{ env.KERNEL_NAME }}\"|" "$f"
            done
          fi
           
      - name: 构建内核
        run: |
          WORKDIR="$(pwd)"
          export PATH="/usr/lib/ccache:$PATH"
          export PATH="$WORKDIR/kernel_workspace/clang20/bin:$PATH"
          export PATH="$WORKDIR/kernel_workspace/build-tools/bin:$PATH"
          CLANG_DIR="$WORKDIR/kernel_workspace/clang20/bin"
          CLANG_VERSION="$($CLANG_DIR/clang --version | head -n 1)"
          LLD_VERSION="$($CLANG_DIR/ld.lld --version | head -n 1)"
          echo "编译器信息:"
          echo "Clang版本: $CLANG_VERSION"
          echo "LLD版本: $LLD_VERSION"
          pahole_version=$(pahole --version 2>/dev/null | head -n1); [ -z "$pahole_version" ] && echo "pahole版本:未安装" || echo "pahole版本:$pahole_version"
          
          export CCACHE_LOGFILE="${{ github.workspace }}/kernel_workspace/ccache.log"
          export CCACHE_COMPILERCHECK="none"
          export CCACHE_BASEDIR="${{ github.workspace }}"
          export CCACHE_NOHASHDIR="true"
          export CCACHE_NOHARDLINK="true"
          export CCACHE_DIR="${{ env.CCACHE_DIR }}"
          export CCACHE_MAXSIZE="3G"
          export CCACHE_IS_KERNEL_COMPILING="true"
          echo "sloppiness = file_stat_matches,include_file_ctime,include_file_mtime,pch_defines,file_macro,time_macros" >> "$CCACHE_DIR/ccache.conf"
          
          cd kernel_workspace/common
          wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/lib/libfakestat.so
          wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/lib/libfaketimeMT.so
          chmod 777 ./*.so
          export FAKESTAT="2025-05-25 12:00:00"
          export FAKETIME="@2025-05-25 13:00:00"
          echo "FAKESTAT=$FAKESTAT" >> $GITHUB_ENV
          echo "FAKETIME=$FAKETIME" >> $GITHUB_ENV
          SO_DIR=$(pwd)
          export PRELOAD_LIBS="$SO_DIR/libfakestat.so $SO_DIR/libfaketimeMT.so"
          #创建 CC (编译器) 包装器
          echo '#!/bin/bash' > cc-wrapper
          echo 'export LD_PRELOAD="'$PRELOAD_LIBS'"' >> cc-wrapper
          echo 'export FAKESTAT="'$FAKESTAT'"' >> cc-wrapper
          echo 'export FAKETIME="'$FAKETIME'"' >> cc-wrapper
          echo 'ccache clang "$@"' >> cc-wrapper
          #创建 LD (链接器) 包装器
          echo '#!/bin/bash' > ld-wrapper
          echo 'export LD_PRELOAD="'$PRELOAD_LIBS'"' >> ld-wrapper
          echo 'export FAKESTAT="'$FAKESTAT'"' >> ld-wrapper
          echo 'export FAKETIME="'$FAKETIME'"' >> ld-wrapper
          echo 'ld.lld "$@"' >> ld-wrapper
          
          # 测试时间劫持测试是否正常工作
          echo "--- [Wrapper Test] 正在创建通用的时间劫持测试脚本 ---"
          echo '#!/bin/bash' > test-wrapper.sh
          echo 'export LD_PRELOAD="'$PRELOAD_LIBS'"' >> test-wrapper.sh
          echo 'export FAKESTAT="'$FAKESTAT'"' >> test-wrapper.sh
          echo 'export FAKETIME="'$FAKETIME'"' >> test-wrapper.sh
          echo 'echo ">>> Wrapper 内部环境检查完毕."' >> test-wrapper.sh
          echo 'exec "$@"' >> test-wrapper.sh # 执行所有传入的参数
          chmod +x test-wrapper.sh
          echo "--- [Wrapper Test] 正在测试 (date) 命令 ---"
          ./test-wrapper.sh date
          echo "--- [Wrapper Test] 正在测试 (stat) 命令 ---"
          ./test-wrapper.sh stat ./Makefile
          echo "--- [Wrapper Test] 测试完毕 ---"
          chmod +x cc-wrapper ld-wrapper
          echo "--- 编译前环境时间: $(LD_PRELOAD=$PRELOAD_LIBS date) ---"
          echo "--- 编译前环境文件时间戳: ---"
          LD_PRELOAD=$PRELOAD_LIBS stat ./Makefile
          
          #在构建内核的同时清除不必要的.NET, Android NDK, Haskell, CodeQL运行库,清理空间且不阻塞后续步骤运行
          sudo rm -rf /usr/share/dotnet &
          sudo rm -rf /usr/local/lib/android &
          sudo rm -rf /opt/ghc &
          sudo rm -rf /opt/hostedtoolcache/CodeQL &
          make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" LD="ld.lld" HOSTLD=ld.lld O=out KCFLAGS+=-O2 KCFLAGS+=-Wno-error gki_defconfig &&
          make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="$(pwd)/cc-wrapper" LD="$(pwd)/ld-wrapper" HOSTLD=ld.lld O=out KCFLAGS+=-O2 KCFLAGS+=-Wno-error Image
          
          # 编译后时间劫持二次校验
          echo "--- 编译后环境时间: $(LD_PRELOAD=$PRELOAD_LIBS date) ---"
          echo "--- 编译后环境文件时间戳: ---"
          LD_PRELOAD=$PRELOAD_LIBS stat ./Makefile
          echo "内核编译完成!"
          echo "ccache状态:"
          ccache -s
          echo "编译后空间:"
          df -h

      - name: 保存新的 ccache 缓存
        if: inputs.ccache_update || steps.ccache-restore.outputs.cache-hit != 'true'
        uses: actions/cache/save@v5
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ${{ env.CCACHE_KEY }}-${{ runner.os }}-${{ github.ref_name }}
         
      - name: 应用KPM并修补内核
        run: |
          if [[ ${{ github.event.inputs.kpm_enable }} == 'builtin' && ( "${{ github.event.inputs.ksu_type }}" == "sukisu" || "${{ github.event.inputs.ksu_type }}" == "resukisu" ) ]]; then
            echo "正在应用KPM并修补内核..."
            cd kernel_workspace/common/out/arch/arm64/boot
            curl -LO https://github.com/SukiSU-Ultra/SukiSU_KernelPatch_patch/releases/latest/download/patch_linux
            chmod +x patch_linux
            ./patch_linux
            rm -f Image
            mv oImage Image
          fi
          if [[ ${{ github.event.inputs.kpm_enable }} == 'kpn' ]]; then
            echo "正在应用KP-N并修补内核..."
            cd kernel_workspace/common/out/arch/arm64/boot
            wget https://github.com/KernelSU-Next/KPatch-Next/releases/latest/download/kptools-linux
            wget https://github.com/KernelSU-Next/KPatch-Next/releases/latest/download/kpimg-linux
            chmod +x ./kptools-linux
            ./kptools-linux -p -i ./Image -k ./kpimg-linux -o ./oImage
            rm -f Image
            mv oImage Image
          fi
          
      - name: 克隆 AnyKernel3 并打包
        id: create_zip
        run: |
          cd kernel_workspace
          git clone https://github.com/cctv18/AnyKernel3 --depth=1
          rm -rf ./AnyKernel3/.git
          cd AnyKernel3
          cp ../common/out/arch/arm64/boot/Image ./Image
          if [[ ! -f ./Image ]]; then
            echo "未找到内核镜像文件,构建可能出错"
            exit 1
          fi
          if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then
            KSU_TYPENAME="SukiSU"
          elif [[ ${{ github.event.inputs.ksu_type }} == "resukisu" ]]; then
            KSU_TYPENAME="ReSukiSU"
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
            KSU_TYPENAME="KSUNext"
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
            KSU_TYPENAME="KSU"
          else
            KSU_TYPENAME="none"
          fi
          if [[ ${{ github.event.inputs.lz4kd_enable }} == 'true' ]]; then
            wget https://raw.githubusercontent.com/$GITHUB_REPOSITORY/refs/heads/$GITHUB_REF_NAME/zram.zip
          fi
          if [[ ${{ github.event.inputs.kpm_enable }} == 'kpn' ]]; then
            wget https://github.com/cctv18/KPatch-Next/releases/latest/download/kpn.zip
          fi
          if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
            AK3_NAME=AnyKernel3_${KSU_TYPENAME}_${{ env.KSUVER }}_${{ env.KERNEL_VERSION }}_${{ github.event.inputs.kernel_suffix }}.zip
          else
            AK3_NAME=AnyKernel3_${KSU_TYPENAME}_${{ env.KSUVER }}_${{ env.KERNEL_VERSION }}_${{ env.KERNEL_NAME }}.zip
          fi
          zip -r ../$AK3_NAME ./*
          echo "ak3name=$AK3_NAME" >> $GITHUB_OUTPUT
          
          #为AK3添加注释(调试信息)
          if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
            FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-${{ github.event.inputs.kernel_suffix }}
          else
            FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-${{ env.KERNEL_NAME }}
          fi
          TIME_NOW="$(TZ='Asia/Shanghai' date +'%Y-%m-%d %H:%M:%S')"
          echo "Author: $GITHUB_ACTOR" > ./ak3.log
          echo "Repo: $GITHUB_REPOSITORY" >> ./ak3.log
          echo "Branch: $GITHUB_REF_NAME" >> ./ak3.log
          echo "Run ID: $GITHUB_RUN_ID" >> ./ak3.log
          echo "Commit: $GITHUB_SHA" >> ./ak3.log
          echo "Time: $TIME_NOW" >> ./ak3.log
          echo "Kernel Ver: $FULL_VERSION" >> ./ak3.log
          echo "KSU Branch: ${KSU_TYPENAME}" >> ./ak3.log
          echo "KSU Ver: ${KSUVER}" >> ./ak3.log
          echo "susfs: ${{ github.event.inputs.susfs_enable }}" >> ./ak3.log
          echo "KPM: ${{ github.event.inputs.kpm_enable }}" >> ./ak3.log
          echo "LZ4: ${{ github.event.inputs.lz4_enable }}" >> ./ak3.log
          echo "LZ4KD: ${{ github.event.inputs.lz4kd_enable }}" >> ./ak3.log
          echo "IPset: ${{ github.event.inputs.better_net }}" >> ./ak3.log
          echo "BBR&Brutal: ${{ github.event.inputs.bbr_enable }}" >> ./ak3.log
          echo "SSG: ${{ github.event.inputs.ssg_enable }}" >> ./ak3.log
          echo "Re-Kernel: ${{ github.event.inputs.rekernel_enable }}" >> ./ak3.log
          echo "BBG: ${{ github.event.inputs.baseband_guard }}" >> ./ak3.log
          zip -z ../$AK3_NAME < ./ak3.log

      - name: 上传 Ccache 调试日志
        if: always() && inputs.ccache_debug
        uses: actions/upload-artifact@v7
        with:
          name: ccache-debug-log
          path: ${{ github.workspace }}/kernel_workspace/ccache.log
          archive: true

      - name: 上传 ZIP 工件
        uses: actions/upload-artifact@v7
        with:
          path: ${{ github.workspace }}/kernel_workspace/AnyKernel*.zip
          archive: false

  release:
    needs: build
    runs-on: ubuntu-latest
    permissions:
      contents: write
      packages: write
      actions: read
      
    steps:
      - name: 下载 ZIP 工件
        uses: actions/download-artifact@v8
        with:
          name: ${{ needs.build.outputs.ak3name }}
          path: ./release_zips
          skip-decompress: true

      - name: 设置环境变量
        run: |
          if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
            FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-${{ github.event.inputs.kernel_suffix }}
            echo "FULL_VERSION=$FULL_VERSION" >> $GITHUB_ENV
            export FULL_VERSION=$FULL_VERSION
          else
            FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-${{ env.KERNEL_NAME }}
            echo "FULL_VERSION=$FULL_VERSION" >> $GITHUB_ENV
            export FULL_VERSION=$FULL_VERSION
          fi
          TIME="$(TZ='Asia/Shanghai' date +'%y%m%d%H%M%S')"
          TIME_FORM="$(TZ='Asia/Shanghai' date +'%Y-%m-%d %H:%M:%S')"
          echo "TIME=$TIME" >> $GITHUB_ENV
          echo "TIME_FORM=$TIME_FORM" >> $GITHUB_ENV
          TAG_HEAD="OPPO-OPlus-Realme-build"
          echo "TAG_HEAD=$TAG_HEAD" >> $GITHUB_ENV
          if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then
            KSU_TYPENAME="SukiSU Ultra"
          elif [[ ${{ github.event.inputs.ksu_type }} == "resukisu" ]]; then
            KSU_TYPENAME="ReSukiSU"
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
            KSU_TYPENAME="KernelSU Next"
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
            KSU_TYPENAME="KernelSU (Official)"
          else
            KSU_TYPENAME="无内置KSU"
          fi
          echo "KSU_TYPENAME=$KSU_TYPENAME" >> $GITHUB_ENV
         
      - name: 创建发布
        id: create_release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          cat << 'EOF' > release_notes.md
          ### 📱 欧加真 ${{ env.KSU_TYPENAME }} SM8650 通用内核 | 构建信息
          - 内核版本号: ${{ env.FULL_VERSION }}
          - 编译时间: ${{ env.TIME_FORM }}
          - 机型:欧加真骁龙8Gen3通用 ${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }} 内核(基于一加12 ${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }} 版官方OKI源码)
          - KSU分支:${{ env.KSU_TYPENAME }}
          - susfs支持:${{ github.event.inputs.susfs_enable }}
          - KPM支持 :${{ github.event.inputs.kpm_enable }}
          - LZ4支持:${{ github.event.inputs.lz4_enable }}
          - LZ4KD支持:${{ github.event.inputs.lz4kd_enable }}
          - 网络功能增强:${{ github.event.inputs.better_net }}
          - BBR/Brutal 等拥塞控制算法支持:${{ github.event.inputs.bbr_enable }}
          - 三星SSG IO调度器支持:${{ github.event.inputs.ssg_enable }}
          - Re-Kernel支持:${{ github.event.inputs.rekernel_enable }}
          - 内核级基带保护支持:${{ github.event.inputs.baseband_guard }}
          - ReSukiSU管理器下载:[ReSukiSU_CI](https://github.com/cctv18/ReSukiSU_CI/releases)
          - SukiSU Ultra管理器下载:[SukiSU-Ultra](https://github.com/SukiSU-Ultra/SukiSU-Ultra/releases)
          - KernelSU Next管理器下载:[KernelSU-Next](https://github.com/KernelSU-Next/KernelSU-Next/releases)
          - KSU原版管理器下载:[KernelSU](https://github.com/tiann/KernelSU/releases)
          
          ### ⏫️ 更新内容:
          - 更新${{ env.KSU_TYPENAME }}至最新版本(${{ needs.build.outputs.ksuver }})
          - (预留)
          
          ### 📋 安装方法 | Installation Guide
          1. 若你的手机已经安装了第三方Recovery(如TWRP),可下载对应机型的AnyKernel刷机包后进入Recovery模式,通过Recovery刷入刷机包后重启设备;
          2. 若你的手机之前已有 root 权限,可在手机上安装[HorizonKernelFlasher](https://github.com/libxzr/HorizonKernelFlasher/releases),在HorizonKernelFlasher中刷入AnyKernel刷机包并重启;
          3. 若你之前已刷入SukiSU Ultra内核,且SukiSU Ultra管理器已更新至最新版本,可在SukiSU Ultra管理器中直接刷入AnyKernel刷机包并重启;
          4. 刷入无lz4kd补丁版的内核前若刷入过lz4kd补丁版的内核,为避免出错,请先关闭zram模块;
          5. 由于KernelSU上游更新了元模块功能,最新版KSU管理器(包括除KernelSU Next以外的各分支)需要配合元模块(metamodule)才能正常挂载模块。目前的元模块包括[meta overlayfs](https://github.com/KernelSU-Modules-Repo/meta-overlayfs), [mountify](https://github.com/backslashxx/mountify), [meta magicmount](https://github.com/7a72/meta-magic_mount/), [meta magicmount rs](https://github.com/Tools-cx-app/meta-magic_mount/), [hybrid mount](https://github.com/YuzakiKokuban/meta-hybrid_mount)等。若你是第一次使用KSU或刚从旧版KSU管理器升级至新版,请先安装一个元模块,这样其他涉及系统挂载的模块才能正常运行;
          6. KernelPatch Next(即KPN)是一个独立于KSU的KPM实现,可以运行在任意KSU/面具环境中(不适用于Apatch),且不能与(Re)SukiSU内置的kpm功能共同使用,使用前请保证你的内核没有内置的kpm实现/修补。
          
          #### ※※※刷写内核有风险,为防止出现意外导致手机变砖,在刷入内核前请务必用[KernelFlasher](https://github.com/capntrips/KernelFlasher)等软件备份boot等关键启动分区!※※※
          EOF

          gh release create "${{ env.TAG_HEAD }}-${{ env.TIME }}" \
            --repo "${{ github.repository }}" \
            --title "${{ env.TAG_HEAD }}-${{ env.FULL_VERSION }}" \
            --notes-file release_notes.md \
            release_zips/AnyKernel3_*.zip


================================================
FILE: .github/workflows/fastbuild_6.1.128.yml
================================================
name: 6.1.128 (天玑特供)欧加真OKI内核快速构建

env:
  TZ: Asia/Shanghai
  ANDROID_VERSION: 'android14'
  KERNEL_VERSION: '6.1'
  SUB_VERSION: '128'
  KERNEL_NAME: 'android14-11-o-gca13bffobf09'
  CCACHE_KEY: ccache-ecsv2-6.1.128

on:
  workflow_dispatch:
    inputs:
      ksu_type:
        description: 'KernelSU分支(ReSukiSU/SukiSU Ultra/KernelSU Next/KSU(原版)/无内置KSU,默认ReSukiSU)'
        required: true
        type: choice
        default: 'resukisu'
        options:
          - 'resukisu'
          - 'sukisu'
          - 'ksunext'
          - 'ksu'
          - 'none'
      susfs_enable:
        description: '是否开启susfs(用于增强隐藏环境挂载功能; 可能轻微增加耗电,上游更新导致不稳定时或不需要可关闭)'
        required: true
        type: boolean
        default: 'true'
      kpm_enable:
        description: '是否开启kpm(builtin-使用(re)sukisu内置kpm, kpn-使用独立kpm实现(支持任意KSU/面具环境); 不需要可保持默认关闭)'
        required: true
        type: choice
        default: 'false'
        options:
          - 'false'
          - 'builtin'
          - 'kpn'
      lz4_enable:
        description: '是否安装 lz4 1.10.0+zstd 1.5.7 补丁'
        required: true
        type: boolean
        default: 'true'
      lz4kd_enable:
        description: '是否安装 LZ4KD 补丁(若已开启lz4+zstd补丁则可不开启)'
        required: true
        type: boolean
        default: 'false'
      bbr_enable:
        description: '是否启用bbr算法(优化上行数据,对手机日用无太大意义甚至可能负优化;false关闭,true仅加入算法,default设为默认)'
        required: true
        type: choice
        default: 'false'
        options:
          - 'false'
          - 'true'
          - 'default'
      better_net:
        description: '是否开启网络功能拓展配置(用于为ipset及需要iptables等高级网络功能内核支持的程序提供支持,天玑机型可能导致bug,建议关闭)'
        required: true
        type: boolean
        default: 'false'
      ssg_enable:
        description: '是否启用三星SSG IO调度器支持(提升IO读写性能; 在一加12上可能导致bug)'
        required: true
        type: boolean
        default: 'true'
      rekernel_enable:
        description: '是否启用Re-Kernel支持(与Freezer/NoActive等软件配合, 提升应用冻结能力)'
        required: true
        type: boolean
        default: 'false'
      baseband_guard:
        description: '是否开启内核级基带保护(阻止一切对非用户分区的写入,有效防止格机)'
        required: true
        type: boolean
        default: 'true'
      ccache_update:
        description: '更新ccache缓存(将本次编译生成的ccache缓存覆盖至仓库缓存,在更改编译配置、源码或需要刷新缓存时开启)'
        required: true
        type: boolean
        default: 'false'
      ccache_debug:
        description: '是否上传 Ccache调试日志(用于调试, 无需要不必开启)'
        required: true
        type: boolean
        default: 'false'
      kernel_suffix:
        description: '内核后缀(留空默认,开头别加连字符,勿加空格等影响指令运行的保留字符)'
        required: false
        type: string
        default: ''

jobs:
  build:
    runs-on: ubuntu-latest
    outputs:
      ksuver: ${{ steps.ksu_version.outputs.ksuver }}
      ak3name: ${{ steps.create_zip.outputs.ak3name }}
    permissions:
      actions: write
      contents: read
    steps:
      - name: 安装环境依赖+初始化源码仓库及llvm-Clang20工具链
        run: |
          rm -rf kernel_workspace
          mkdir kernel_workspace
          cd kernel_workspace
          echo "当前仓库:$GITHUB_REPOSITORY"
          echo "当前分支:$GITHUB_REF_NAME"
          
          sudo apt-mark hold firefox &&
          sudo apt-mark hold libc-bin &&
          sudo apt purge man-db &&
          sudo rm -rf /var/lib/man-db/auto-update &&
          sudo apt update &&
          sudo apt-get install -y --no-install-recommends binutils python-is-python3 libssl-dev libelf-dev &
          #旧版完整指令:(由于经过验证大部分指令已内置于GitHub Action环境中,故进行精简)
          #sudo apt-get install -y --no-install-recommends curl bison flex make binutils git perl gcc python3 python-is-python3 bc libssl-dev libelf-dev zip unzip ccache
          
          #使用最新版ccache-ECS(特化优化内核编译缓存,大幅提升二次不同配置编译速度)
          wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/lib/ccache-x86-64 -O ccache &&
          sudo cp -f ./ccache /usr/bin/ccache &&
          sudo chmod +x /usr/bin/ccache &&
          rm -f ./ccache &
          
          echo "正在克隆源码仓库..."
          aria2c -s16 -x16 -k1M https://github.com/cctv18/android_kernel_oneplus_mt6897/archive/refs/heads/oneplus/mt6897_v_15.0.0_oneplus_pad.zip -o common.zip && 
          unzip -q common.zip && 
          mv "android_kernel_oneplus_mt6897-oneplus-mt6897_v_15.0.0_oneplus_pad" common &&
          rm -rf common.zip &
          
          echo "正在克隆llvm-Clang20工具链..." &&
          mkdir -p clang20 &&
          aria2c -s16 -x16 -k1M https://github.com/cctv18/oneplus_sm8650_toolchain/releases/download/LLVM-Clang20-r547379/clang-r547379.zip -o clang.zip &&
          unzip -q clang.zip -d clang20 &&
          rm -rf clang.zip &
          
          echo "正在克隆构建工具..." &&
          aria2c -s16 -x16 -k1M https://github.com/cctv18/oneplus_sm8650_toolchain/releases/download/LLVM-Clang20-r547379/build-tools.zip -o build-tools.zip &&
          unzip -q build-tools.zip &&
          rm -rf build-tools.zip &
          
          wait
          echo "所有源码及llvm-Clang20工具链初始化完成!"
          echo "正在去除 ABI 保护 & 去除 dirty 后缀..."
          rm common/android/abi_gki_protected_exports_* || true
          for f in common/scripts/setlocalversion; do
            sed -i 's/ -dirty//g' "$f"
            sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' "$f"
          done

      - name: 配置ccache目录
        run: |
          echo "CCACHE_DIR=$HOME/.ccache_${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}" >> $GITHUB_ENV
          echo "CCACHE_MAXSIZE=3G" >> $GITHUB_ENV
          echo "当前磁盘空间:"
          df -h
          echo "当前构建内核版本:${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}"

      - name: 载入当前版本内核的 ccache缓存
        uses: actions/cache@v5
        id: ccache-restore
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ${{ env.CCACHE_KEY }}-${{ runner.os }}-${{ github.ref_name }}
          restore-keys: |
            ${{ env.CCACHE_KEY }}-${{ runner.os }}-
            ${{ env.CCACHE_KEY }}-

      - name: 拉取公共预置 ccache 缓存
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          echo "检查本地缓存状态..."
          if [ -d "${{ env.CCACHE_DIR }}" ] && [ "$(ls -A ${{ env.CCACHE_DIR }} 2>/dev/null)" ]; then
            echo "检测到本地已成功载入 ccache 缓存,跳过公共 ccache 拉取!"
            exit 0
          fi
          
          echo "未命中缓存,尝试拉取最新公共 ccache ..."
          mkdir -p ${{ env.CCACHE_DIR }}
          FILE_NAME="ccache-${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}.tar.zst"
          
          if gh release download -p "$FILE_NAME" -R cctv18/public_ccache; then
            echo "成功下载 $FILE_NAME,正在解压..."
            tar -I zstd -xf "$FILE_NAME" -C ${{ env.CCACHE_DIR }}
            echo "公共 ccache 恢复完成!"
          else
            echo "公共 ccache 中未找到对应的 ccache 文件,将进行全量全新编译..."
          fi

      - name: 清除旧 ccache 缓存
        if: inputs.ccache_update
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          echo "正在清除仓库中的旧 ccache 缓存..."
          if gh cache delete ${{ env.CCACHE_KEY }}-${{ runner.os }}-${{ github.ref_name }} -R ${{ github.repository }}; then
            echo "成功删除旧的 ccache 缓存!"
          else
            echo "旧缓存不存在或已被清理!"
          fi
      
      - name: 初始化并配置ccache
        run: |
          # 设置ccache环境变量
          export CCACHE_COMPILERCHECK="none"
          export CCACHE_BASEDIR="${{ github.workspace }}"
          export CCACHE_NOHASHDIR="true"
          export CCACHE_NOHARDLINK="true"
          export CCACHE_DIR="${{ env.CCACHE_DIR }}"
          export CCACHE_MAXSIZE="${{ env.CCACHE_MAXSIZE }}"
          
          # 确保ccache目录存在
          mkdir -p "$CCACHE_DIR"
          
          # 每次运行都重新配置缓存大小
          echo "配置ccache缓存大小为: $CCACHE_MAXSIZE"
          ccache -M "$CCACHE_MAXSIZE"
          ccache -o compression=true
          
          # 显示初始缓存状态
          echo "ccache初始状态:"
          ccache -s
          
          # 如果缓存恢复命中,显示详细信息
          if [ "${{ steps.ccache-restore.outputs.cache-hit }}" == 'true' ]; then
            echo "ccache缓存命中详情:"
            ccache -sv
          fi

      - name: 添加KernelSU
        id: ksu_version
        run: |
          # 进入内核工作目录
          cd kernel_workspace
          if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then
            echo "正在配置SukiSU Ultra..."
            curl -LSs "https://raw.githubusercontent.com/ShirkNeko/SukiSU-Ultra/refs/heads/main/kernel/setup.sh" | bash -s builtin
            cd ./KernelSU
            # 获取当前 Git 提交的短哈希 (8位)
            GIT_COMMIT_HASH=$(git rev-parse --short=8 HEAD)
            echo "当前提交哈希: $GIT_COMMIT_HASH"
            export KSU_VERSION=$KSU_VERSION
            # 尝试最多 3 次获取 KernelSU API 版本号
            for i in {1..3}; do
              # 从远程 Makefile 中提取 KSU_API_VERSION
              KSU_API_VERSION=$(curl -s "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/builtin/kernel/Makefile" | 
                # 查找第一个包含版本定义的行
                grep -m1 "KSU_VERSION_API :=" | 
                # 提取等号后的值
                awk -F'= ' '{print $2}' | 
                # 删除所有空白字符
                tr -d '[:space:]')
              # 如果成功获取到版本号则跳出循环,否则等待 1 秒后重试
              [ -n "$KSU_API_VERSION" ] && break || sleep 1
            done
            # 如果获取失败,使用默认版本号 3.1.7
            [ -z "$KSU_API_VERSION" ] && KSU_API_VERSION="3.1.7"
            # 将 API 版本号存储到 GitHub 环境变量
            echo "KSU_API_VERSION=$KSU_API_VERSION" >> $GITHUB_ENV
            # 创建版本定义模板&版本格式函数: 使用获取的提交哈希和固定后缀
            # KSU_VERSION_API: API 版本定义
            # KSU_VERSION_FULL: 完整版本定义
            VERSION_DEFINITIONS=$'define get_ksu_version_full\nv\\$1-'"$GIT_COMMIT_HASH"$'@cctv18\nendef\n\nKSU_VERSION_API := '"$KSU_API_VERSION"$'\nKSU_VERSION_FULL := v'"$KSU_API_VERSION"$'-'"$GIT_COMMIT_HASH"$'@cctv18'
            # 清理内核 Makefile 中的旧版本定义
            # 删除版本函数
            sed -i '/define get_ksu_version_full/,/endef/d' kernel/Makefile
            # 删除 API 版本定义
            sed -i '/KSU_VERSION_API :=/d' kernel/Makefile
            # 删除完整版本定义
            sed -i '/KSU_VERSION_FULL :=/d' kernel/Makefile
            # 在 REPO_OWNER 行后插入新版本定义
            awk -v def="$VERSION_DEFINITIONS" '
              # 当找到 REPO_OWNER 行时,插入版本定义并设置标记
              /REPO_OWNER :=/ {print; print def; inserted=1; next}
              # 打印所有行
              1
              # 如果未找到插入点,在文件末尾追加
              END {if (!inserted) print def}
            ' kernel/Makefile > kernel/Makefile.tmp && mv kernel/Makefile.tmp kernel/Makefile

            # 生成自定义版本号(基于提交计数), 失败时使用 114514
            KSU_VERSION=$(expr $(git rev-list --count main) + 37185 2>/dev/null || echo 114514)
            # 存储版本号到 GitHub 环境变量
            echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
            echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT

            # 验证修改结果
            grep -A10 "REPO_OWNER" kernel/Makefile  # 检查插入点后的内容
            grep "KSU_VERSION_FULL" kernel/Makefile # 确认版本定义存在
            echo "SukiSU版本号: v${KSU_API_VERSION}-${GIT_COMMIT_HASH}@cctv18"
          elif [[ ${{ github.event.inputs.ksu_type }} == "resukisu" ]]; then
            echo "正在配置ReSukiSU..."
            curl -LSs "https://raw.githubusercontent.com/ReSukiSU/ReSukiSU/refs/heads/main/kernel/setup.sh" | bash -s main
            echo 'CONFIG_KSU_FULL_NAME_FORMAT="%TAG_NAME%-%COMMIT_SHA%@cctv18"' >> ./common/arch/arm64/configs/gki_defconfig
            cd ./KernelSU
            # 生成自定义版本号(基于提交计数), 失败时使用 114514
            KSU_VERSION=$(expr $(git rev-list --count main) + 30700 2>/dev/null || echo 114514)
            # 存储版本号到 GitHub 环境变量
            echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
            echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
            echo "正在配置KernelSU Next..."
            curl -LSs "https://raw.githubusercontent.com/pershoot/KernelSU-Next/refs/heads/dev-susfs/kernel/setup.sh" | bash -s dev-susfs
            cd KernelSU-Next
            rm -rf .git
            KSU_VERSION=$(expr $(curl -sI "https://api.github.com/repos/pershoot/KernelSU-Next/commits?sha=dev&per_page=1" | grep -i "link:" | sed -n 's/.*page=\([0-9]*\)>; rel="last".*/\1/p') "+" 30000)
            echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
            echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
            sed -i "s/KSU_VERSION_FALLBACK := 1/KSU_VERSION_FALLBACK := $KSU_VERSION/g" kernel/Kbuild
            KSU_GIT_TAG=$(curl -sL "https://api.github.com/repos/KernelSU-Next/KernelSU-Next/tags" | grep -o '"name": *"[^"]*"' | head -n 1 | sed 's/"name": "//;s/"//')
            sed -i "s/KSU_VERSION_TAG_FALLBACK := v0.0.1/KSU_VERSION_TAG_FALLBACK := $KSU_GIT_TAG/g" kernel/Kbuild
            #为KernelSU Next添加WildKSU管理器支持
            cd ../common/drivers/kernelsu
            wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/other_patch/apk_sign.patch
            patch -p2 -N -F 3 < apk_sign.patch || true
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
            echo "正在配置原版 KernelSU (tiann/KernelSU)..."
            curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/refs/heads/main/kernel/setup.sh" | bash -s main
            cd ./KernelSU
            KSU_VERSION=$(expr $(curl -sI "https://api.github.com/repos/tiann/KernelSU/commits?sha=main&per_page=1" | grep -i "link:" | sed -n 's/.*page=\([0-9]*\)>; rel="last".*/\1/p') "+" 30000)
            echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
            echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
            sed -i "s/DKSU_VERSION=16/DKSU_VERSION=${KSU_VERSION}/" kernel/Kbuild
          else
            echo "已选择无内置KernelSU模式,跳过KernelSU配置..."
          fi

      - name: 应用 KernelSU & SUSFS 补丁
        if: inputs.susfs_enable
        run: |
          cd kernel_workspace
          if [[ ${{ github.event.inputs.ksu_type }} != "none" ]]; then
            echo "正在添加susfs补丁..."
            git clone --depth=1 https://github.com/cctv18/susfs4oki.git susfs4ksu -b oki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}
            wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/other_patch/69_hide_stuff.patch -O ./common/69_hide_stuff.patch
            cp ./susfs4ksu/kernel_patches/50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch ./common/
            cp ./susfs4ksu/kernel_patches/fs/* ./common/fs/
            cp ./susfs4ksu/kernel_patches/include/linux/* ./common/include/linux/
            cd ./common
            patch -p1 < 50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch || true
            patch -p1 -N -F 3 < 69_hide_stuff.patch || true
            cd ..
          else
            echo "已选择无内置KernelSU模式,跳过susfs配置..."
          fi
          if [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
            echo "正在为原版 KernelSU (tiann/KernelSU)添加补丁..."
            cp ./susfs4ksu/kernel_patches/KernelSU/10_enable_susfs_for_ksu.patch ./KernelSU/
            cd ./KernelSU
            patch -p1 < 10_enable_susfs_for_ksu.patch || true
          fi
          
      - name: 应用lz4 1.10.0 & zstd 1.5.7补丁
        if: inputs.lz4_enable
        run: |
          echo "正在添加lz4 1.10.0 & zstd 1.5.7补丁…"
          cd kernel_workspace
          git clone --depth=1 https://github.com/$GITHUB_REPOSITORY.git -b $GITHUB_REF_NAME $GITHUB_ACTOR
          cp ./$GITHUB_ACTOR/zram_patch/001-lz4.patch ./common/
          cp ./$GITHUB_ACTOR/zram_patch/lz4armv8.S ./common/lib
          cp ./$GITHUB_ACTOR/zram_patch/002-zstd.patch ./common/
          cd ./common
          git apply -p1 < 001-lz4.patch || true
          patch -p1 < 002-zstd.patch || true

      - name: 应用 lz4kd 补丁
        if: inputs.lz4kd_enable
        run: |
          echo "正在添加lz4kd补丁…"
          cd kernel_workspace
          if [ ! -d "SukiSU_patch" ]; then
            git clone --depth=1 https://github.com/ShirkNeko/SukiSU_patch.git
          fi
          cd common
          cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./include/linux/
          cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./lib
          cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./crypto
          cp ../SukiSU_patch/other/zram/zram_patch/${{ env.KERNEL_VERSION }}/lz4kd.patch ./
          patch -p1 -F 3 < lz4kd.patch || true
          
      - name: 添加SUSFS 配置项
        if: inputs.susfs_enable
        run: |
          cd kernel_workspace
          echo "CONFIG_KSU_SUSFS=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_HAS_MAGIC_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SUS_PATH=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SUS_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_AUTO_ADD_SUS_KSU_DEFAULT_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_AUTO_ADD_SUS_BIND_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SUS_KSTAT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_TRY_UMOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_AUTO_ADD_TRY_UMOUNT_FOR_BIND_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SPOOF_UNAME=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_ENABLE_LOG=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_OPEN_REDIRECT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SUS_MAP=y" >> ./common/arch/arm64/configs/gki_defconfig
          
      - name: 添加 KSU & 其他配置项
        run: |
          cd kernel_workspace
          echo "CONFIG_KSU=y" >> ./common/arch/arm64/configs/gki_defconfig
          if [[ ${{ github.event.inputs.kpm_enable }} == 'builtin' && ( "${{ github.event.inputs.ksu_type }}" == "sukisu" || "${{ github.event.inputs.ksu_type }}" == "resukisu" ) ]]; then
            echo "CONFIG_KPM=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          if [[ "${{ github.event.inputs.susfs_enable }}" == "false" ]]; then
            echo "CONFIG_KSU_SUSFS=n" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          #添加对 Mountify (backslashxx/mountify) 模块的支持
          echo "CONFIG_TMPFS_XATTR=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_TMPFS_POSIX_ACL=y" >> ./common/arch/arm64/configs/gki_defconfig
          if [[ ${{ github.event.inputs.lz4kd_enable }} == 'true' ]]; then
            echo "CONFIG_ZSMALLOC=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_LZ4HC=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_LZ4K=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_LZ4KD=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_842=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          # 开启O2编译优化配置
          echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> ./common/arch/arm64/configs/gki_defconfig
          #禁用 defconfig 检查
          sed -i 's/check_defconfig//' ./common/build.config.gki
          #跳过将uapi标准头安装到 usr/include 目录的不必要操作,节省编译时间
          echo "CONFIG_HEADERS_INSTALL=n" >> ./common/arch/arm64/configs/gki_defconfig
          
      - name: 启用网络功能增强优化配置
        if: inputs.better_net
        run: |
          cd kernel_workspace
          #启用  BPF 流解析器,实现高性能网络流量处理,增强网络监控和分析能力
          echo "CONFIG_BPF_STREAM_PARSER=y" >> ./common/arch/arm64/configs/gki_defconfig
          #开启增强 Netfilter 防火墙扩展模块,支持基于地址类型的匹配规则,启用 IP 集合支持,提高防火墙规则灵活性,支持更复杂的流量过滤策略
          echo "CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_NETFILTER_XT_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
          #启用 IP 集框架及其多种数据结构实现,提供高效的大规模 IP 地址管理,提高防火墙规则处理效率,减少内存占用
          echo "CONFIG_IP_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_MAX=65534" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_BITMAP_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_BITMAP_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_BITMAP_PORT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IPMARK=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IPPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IPPORTIP=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IPPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_MAC=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_NETPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_NET=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_NETNET=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_NETPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_NETIFACE=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_LIST_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
          #启用 IPv6 网络地址转换
          echo "CONFIG_IP6_NF_NAT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP6_NF_TARGET_MASQUERADE=y" >> ./common/arch/arm64/configs/gki_defconfig
          #由于部分机型的vintf兼容性检测规则,在开启CONFIG_IP6_NF_NAT后开机会出现"您的设备内部出现了问题。请联系您的设备制造商了解详情。"的提示,故添加一个配置修复补丁,在编译内核时隐藏CONFIG_IP6_NF_NAT=y但不影响对应功能编译
          cd common
          wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/other_patch/config.patch
          patch -p1 -F 3 < config.patch || true

      - name: 添加 BBR 等一系列拥塞控制算法
        run: |
          if [[ "${{ github.event.inputs.bbr_enable }}" != "false" ]]; then
            echo "正在添加BBR等拥塞控制算法..."
            cd kernel_workspace
            #开启TCP拥塞控制算法控制器(必需)
            echo "CONFIG_TCP_CONG_ADVANCED=y" >> ./common/arch/arm64/configs/gki_defconfig
            ################################################################################################################################
            # BBR:基于链路容量的代表拥塞控制算法,不再使用丢包、延时等信号去衡量拥塞是否发生,而是直接对网络建模来应对、避免真实的网络拥塞;
            # 具有高吞吐、低延迟、抗丢包的特点,但在手机上使用时由于持续探测带宽/RTT、高频计算与发包增加 CPU 和射频模块功耗,会增加耗电及发热;
            # 且移动基站缓冲区深度通常较小(~50ms),BBR 的带宽探测阶段(ProbeRTT)过度降窗可能导致吞吐量骤降,且网络切换(WiFi→5G)时需重新
            # 探测参数,反而增加延迟或导致速率振荡(短暂卡顿),且存在 RTT 不公平性,与基于丢包的流竞争时可能过于强势,在混合网络环境中
            #(如 BBR + CUBIC 共存),BBR 会抢占更多其他软件的带宽,降低其他应用的公平性(如后台软件更新影响前台视频播放)。
            # 因此,虽然BBR可以显著减少排队延迟,抗丢包能力强,带宽利用率高,但由于其会增加耗电,且易导致网络速率波动,故安卓系统默认不使用
            # BBR拥塞算法,而是使用在吞吐量、稳定性、兼容性、能效之间取得最佳平衡的CUBIC算法。在开启BBR前,请考虑自己是否真的有使用BBR的必要。
            ################################################################################################################################
            echo "CONFIG_TCP_CONG_BBR=y" >> ./common/arch/arm64/configs/gki_defconfig
            #CUBIC:安卓的默认TCP拥塞控制算法,在吞吐量、稳定性、兼容性、能效之间取得最佳平衡,具有高兼容性与公平性、抗网络波动性强、低计算开销的特点,是绝大部分移动场景的优先选择
            echo "CONFIG_TCP_CONG_CUBIC=y" >> ./common/arch/arm64/configs/gki_defconfig
            #VEGAS:基于时延的拥塞控制算法之一,将回路响应时间(Round Trip Time,RTT)增加视为出现拥塞,增加时增大拥塞窗口,减小时减小拥塞窗口
            echo "CONFIG_TCP_CONG_VEGAS=y" >> ./common/arch/arm64/configs/gki_defconfig
            #New Vegas:Vegas 算法的改进版,优化了 RTT 测量和竞争公平性,可以更准确地检测拥塞,与 Reno/CUBIC 共存能力提升
            echo "CONFIG_TCP_CONG_NV=y" >> ./common/arch/arm64/configs/gki_defconfig
            #Westwood+:基于带宽估计(ACK 到达率)动态设置拥塞窗口和慢启动阈值;快速恢复,适合无线网络(区分拥塞丢包与无线丢包)
            echo "CONFIG_TCP_CONG_WESTWOOD=y" >> ./common/arch/arm64/configs/gki_defconfig
            #HTCP:一种基于损失的算法,使用 AIMD 来控制拥塞窗口,根据 RTT 动态调整增长因子,结合延迟和丢包信号,针对高延迟的高速网络进行优化
            echo "CONFIG_TCP_CONG_HTCP=y" >> ./common/arch/arm64/configs/gki_defconfig
            #brutal:一种通过主动探测 + 激进抢占最大化吞吐量的拥塞算法,无拥塞窗口上限,轻度丢包(<20%)不降窗,避免类似 BBR 的 ProbeRTT 阶段,
            #持续维持高发送速率,与 Reno/CUBIC 共存时,Brutal 可通过高频发包抢占 90%+ 带宽,适用于高丢包弱网环境(如公共 Wi-Fi、蜂窝网络)及
            #直播推流、云游戏上行链路等需优先保证吞吐量而非延迟敏感的场景,提升弱网吞吐性能,对抗运营商 QoS 限速。但由于TCP Brutal 仅在应用程序
            #对每个 TCP 连接设置带宽参数之后才能正常工作,绝大部分安卓应用都不支持该操作,故请勿将 TCP Brutal 设置成默认拥塞控制算法。
            echo "CONFIG_TCP_CONG_BRUTAL=y" >> ./common/arch/arm64/configs/gki_defconfig
            if [[ "${{ github.event.inputs.bbr_enable }}" == "default" ]]; then
              echo "正在将BBR设为默认拥塞控制算法..."
              echo "CONFIG_DEFAULT_TCP_CONG=bbr" >> ./common/arch/arm64/configs/gki_defconfig
            else
              echo "CONFIG_DEFAULT_TCP_CONG=cubic" >> ./common/arch/arm64/configs/gki_defconfig
            fi
          fi

      - name: 启用三星SSG IO调度器
        if: inputs.ssg_enable
        run: |
          echo "正在启用三星SSG IO调度器(一加12等极少数机型开启后可能不开机,若出现bug请关闭此项)…"
          cd kernel_workspace
          echo "CONFIG_MQ_IOSCHED_SSG=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_MQ_IOSCHED_SSG_CGROUP=y" >> ./common/arch/arm64/configs/gki_defconfig

      - name: 启用Re-Kernel支持
        if: inputs.rekernel_enable
        run: |
          echo "正在启用Re-Kernel支持(用于与Freezer,NoActive等软件配合使用,提升冻结后台能力)…"
          cd kernel_workspace
          echo "CONFIG_REKERNEL=y" >> ./common/arch/arm64/configs/gki_defconfig

      - name: 启用内核级基带保护
        if: inputs.baseband_guard
        run: |
          echo "正在启用启用内核级基带保护支持…"
          cd kernel_workspace
          echo "CONFIG_BBG=y" >> ./common/arch/arm64/configs/gki_defconfig
          cd ./common
          curl -sSL https://github.com/cctv18/Baseband-guard/raw/master/setup.sh | bash
          sed -i '/^config LSM$/,/^help$/{ /^[[:space:]]*default/ { /baseband_guard/! s/selinux/selinux,baseband_guard/ } }' security/Kconfig

      - name: 添加制作名称
        run: |
          cd kernel_workspace
          echo "替换内核版本后缀..."
          if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
            echo "当前内核版本后缀:${{ github.event.inputs.kernel_suffix }}"
            for f in ./common/scripts/setlocalversion; do
              sed -i "\$s|echo \"\\\$res\"|echo \"-${{ github.event.inputs.kernel_suffix }}\"|" "$f"
            done
          else
            echo "当前内核版本后缀:${{ env.KERNEL_NAME }}"
            for f in ./common/scripts/setlocalversion; do
              sed -i "\$s|echo \"\\\$res\"|echo \"-${{ env.KERNEL_NAME }}\"|" "$f"
            done
          fi
           
      - name: 构建内核
        run: |
          WORKDIR="$(pwd)"
          export PATH="/usr/lib/ccache:$PATH"
          export PATH="$WORKDIR/kernel_workspace/clang20/bin:$PATH"
          export PATH="$WORKDIR/kernel_workspace/build-tools/bin:$PATH"
          CLANG_DIR="$WORKDIR/kernel_workspace/clang20/bin"
          CLANG_VERSION="$($CLANG_DIR/clang --version | head -n 1)"
          LLD_VERSION="$($CLANG_DIR/ld.lld --version | head -n 1)"
          echo "编译器信息:"
          echo "Clang版本: $CLANG_VERSION"
          echo "LLD版本: $LLD_VERSION"
          pahole_version=$(pahole --version 2>/dev/null | head -n1); [ -z "$pahole_version" ] && echo "pahole版本:未安装" || echo "pahole版本:$pahole_version"
          
          export CCACHE_LOGFILE="${{ github.workspace }}/kernel_workspace/ccache.log"
          export CCACHE_COMPILERCHECK="none"
          export CCACHE_BASEDIR="${{ github.workspace }}"
          export CCACHE_NOHASHDIR="true"
          export CCACHE_NOHARDLINK="true"
          export CCACHE_DIR="${{ env.CCACHE_DIR }}"
          export CCACHE_MAXSIZE="3G"
          export CCACHE_IS_KERNEL_COMPILING="true"
          echo "sloppiness = file_stat_matches,include_file_ctime,include_file_mtime,pch_defines,file_macro,time_macros" >> "$CCACHE_DIR/ccache.conf"
          
          cd kernel_workspace/common
          wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/lib/libfakestat.so
          wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/lib/libfaketimeMT.so
          chmod 777 ./*.so
          export FAKESTAT="2025-05-25 12:00:00"
          export FAKETIME="@2025-05-25 13:00:00"
          echo "FAKESTAT=$FAKESTAT" >> $GITHUB_ENV
          echo "FAKETIME=$FAKETIME" >> $GITHUB_ENV
          SO_DIR=$(pwd)
          export PRELOAD_LIBS="$SO_DIR/libfakestat.so $SO_DIR/libfaketimeMT.so"
          #创建 CC (编译器) 包装器
          echo '#!/bin/bash' > cc-wrapper
          echo 'export LD_PRELOAD="'$PRELOAD_LIBS'"' >> cc-wrapper
          echo 'export FAKESTAT="'$FAKESTAT'"' >> cc-wrapper
          echo 'export FAKETIME="'$FAKETIME'"' >> cc-wrapper
          echo 'ccache clang "$@"' >> cc-wrapper
          #创建 LD (链接器) 包装器
          echo '#!/bin/bash' > ld-wrapper
          echo 'export LD_PRELOAD="'$PRELOAD_LIBS'"' >> ld-wrapper
          echo 'export FAKESTAT="'$FAKESTAT'"' >> ld-wrapper
          echo 'export FAKETIME="'$FAKETIME'"' >> ld-wrapper
          echo 'ld.lld "$@"' >> ld-wrapper
          
          # 测试时间劫持测试是否正常工作
          echo "--- [Wrapper Test] 正在创建通用的时间劫持测试脚本 ---"
          echo '#!/bin/bash' > test-wrapper.sh
          echo 'export LD_PRELOAD="'$PRELOAD_LIBS'"' >> test-wrapper.sh
          echo 'export FAKESTAT="'$FAKESTAT'"' >> test-wrapper.sh
          echo 'export FAKETIME="'$FAKETIME'"' >> test-wrapper.sh
          echo 'echo ">>> Wrapper 内部环境检查完毕."' >> test-wrapper.sh
          echo 'exec "$@"' >> test-wrapper.sh # 执行所有传入的参数
          chmod +x test-wrapper.sh
          echo "--- [Wrapper Test] 正在测试 (date) 命令 ---"
          ./test-wrapper.sh date
          echo "--- [Wrapper Test] 正在测试 (stat) 命令 ---"
          ./test-wrapper.sh stat ./Makefile
          echo "--- [Wrapper Test] 测试完毕 ---"
          chmod +x cc-wrapper ld-wrapper
          echo "--- 编译前环境时间: $(LD_PRELOAD=$PRELOAD_LIBS date) ---"
          echo "--- 编译前环境文件时间戳: ---"
          LD_PRELOAD=$PRELOAD_LIBS stat ./Makefile
          
          #在构建内核的同时清除不必要的.NET, Android NDK, Haskell, CodeQL运行库,清理空间且不阻塞后续步骤运行
          sudo rm -rf /usr/share/dotnet &
          sudo rm -rf /usr/local/lib/android &
          sudo rm -rf /opt/ghc &
          sudo rm -rf /opt/hostedtoolcache/CodeQL &
          make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" LD="ld.lld" HOSTLD=ld.lld O=out KCFLAGS+=-O2 KCFLAGS+=-Wno-error gki_defconfig &&
          make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="$(pwd)/cc-wrapper" LD="$(pwd)/ld-wrapper" HOSTLD=ld.lld O=out KCFLAGS+=-O2 KCFLAGS+=-Wno-error Image
          
          # 编译后时间劫持二次校验
          echo "--- 编译后环境时间: $(LD_PRELOAD=$PRELOAD_LIBS date) ---"
          echo "--- 编译后环境文件时间戳: ---"
          LD_PRELOAD=$PRELOAD_LIBS stat ./Makefile
          echo "内核编译完成!"
          echo "ccache状态:"
          ccache -s
          echo "编译后空间:"
          df -h

      - name: 保存新的 ccache 缓存
        if: inputs.ccache_update || steps.ccache-restore.outputs.cache-hit != 'true'
        uses: actions/cache/save@v5
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ${{ env.CCACHE_KEY }}-${{ runner.os }}-${{ github.ref_name }}
         
      - name: 应用KPM并修补内核
        run: |
          if [[ ${{ github.event.inputs.kpm_enable }} == 'builtin' && ( "${{ github.event.inputs.ksu_type }}" == "sukisu" || "${{ github.event.inputs.ksu_type }}" == "resukisu" ) ]]; then
            echo "正在应用KPM并修补内核..."
            cd kernel_workspace/common/out/arch/arm64/boot
            curl -LO https://github.com/SukiSU-Ultra/SukiSU_KernelPatch_patch/releases/latest/download/patch_linux
            chmod +x patch_linux
            ./patch_linux
            rm -f Image
            mv oImage Image
          fi
          if [[ ${{ github.event.inputs.kpm_enable }} == 'kpn' ]]; then
            echo "正在应用KP-N并修补内核..."
            cd kernel_workspace/common/out/arch/arm64/boot
            wget https://github.com/KernelSU-Next/KPatch-Next/releases/latest/download/kptools-linux
            wget https://github.com/KernelSU-Next/KPatch-Next/releases/latest/download/kpimg-linux
            chmod +x ./kptools-linux
            ./kptools-linux -p -i ./Image -k ./kpimg-linux -o ./oImage
            rm -f Image
            mv oImage Image
          fi
          
      - name: 克隆 AnyKernel3 并打包
        id: create_zip
        run: |
          cd kernel_workspace
          git clone https://github.com/cctv18/AnyKernel3 --depth=1
          rm -rf ./AnyKernel3/.git
          cd AnyKernel3
          cp ../common/out/arch/arm64/boot/Image ./Image
          if [[ ! -f ./Image ]]; then
            echo "未找到内核镜像文件,构建可能出错"
            exit 1
          fi
          if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then
            KSU_TYPENAME="SukiSU"
          elif [[ ${{ github.event.inputs.ksu_type }} == "resukisu" ]]; then
            KSU_TYPENAME="ReSukiSU"
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
            KSU_TYPENAME="KSUNext"
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
            KSU_TYPENAME="KSU"
          else
            KSU_TYPENAME="none"
          fi
          if [[ ${{ github.event.inputs.lz4kd_enable }} == 'true' ]]; then
            wget https://raw.githubusercontent.com/$GITHUB_REPOSITORY/refs/heads/$GITHUB_REF_NAME/zram.zip
          fi
          if [[ ${{ github.event.inputs.kpm_enable }} == 'kpn' ]]; then
            wget https://github.com/cctv18/KPatch-Next/releases/latest/download/kpn.zip
          fi
          if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
            AK3_NAME=AnyKernel3_${KSU_TYPENAME}_${{ env.KSUVER }}_${{ env.KERNEL_VERSION }}_${{ github.event.inputs.kernel_suffix }}.zip
          else
            AK3_NAME=AnyKernel3_${KSU_TYPENAME}_${{ env.KSUVER }}_${{ env.KERNEL_VERSION }}_${{ env.KERNEL_NAME }}.zip
          fi
          zip -r ../$AK3_NAME ./*
          echo "ak3name=$AK3_NAME" >> $GITHUB_OUTPUT
          
          #为AK3添加注释(调试信息)
          if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
            FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-${{ github.event.inputs.kernel_suffix }}
          else
            FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-${{ env.KERNEL_NAME }}
          fi
          TIME_NOW="$(TZ='Asia/Shanghai' date +'%Y-%m-%d %H:%M:%S')"
          echo "Author: $GITHUB_ACTOR" > ./ak3.log
          echo "Repo: $GITHUB_REPOSITORY" >> ./ak3.log
          echo "Branch: $GITHUB_REF_NAME" >> ./ak3.log
          echo "Run ID: $GITHUB_RUN_ID" >> ./ak3.log
          echo "Commit: $GITHUB_SHA" >> ./ak3.log
          echo "Time: $TIME_NOW" >> ./ak3.log
          echo "Kernel Ver: $FULL_VERSION" >> ./ak3.log
          echo "KSU Branch: ${KSU_TYPENAME}" >> ./ak3.log
          echo "KSU Ver: ${KSUVER}" >> ./ak3.log
          echo "susfs: ${{ github.event.inputs.susfs_enable }}" >> ./ak3.log
          echo "KPM: ${{ github.event.inputs.kpm_enable }}" >> ./ak3.log
          echo "LZ4: ${{ github.event.inputs.lz4_enable }}" >> ./ak3.log
          echo "LZ4KD: ${{ github.event.inputs.lz4kd_enable }}" >> ./ak3.log
          echo "IPset: ${{ github.event.inputs.better_net }}" >> ./ak3.log
          echo "BBR&Brutal: ${{ github.event.inputs.bbr_enable }}" >> ./ak3.log
          echo "SSG: ${{ github.event.inputs.ssg_enable }}" >> ./ak3.log
          echo "Re-Kernel: ${{ github.event.inputs.rekernel_enable }}" >> ./ak3.log
          echo "BBG: ${{ github.event.inputs.baseband_guard }}" >> ./ak3.log
          zip -z ../$AK3_NAME < ./ak3.log

      - name: 上传 Ccache 调试日志
        if: always() && inputs.ccache_debug
        uses: actions/upload-artifact@v7
        with:
          name: ccache-debug-log
          path: ${{ github.workspace }}/kernel_workspace/ccache.log
          archive: true

      - name: 上传 ZIP 工件
        uses: actions/upload-artifact@v7
        with:
          path: ${{ github.workspace }}/kernel_workspace/AnyKernel*.zip
          archive: false

  release:
    needs: build
    runs-on: ubuntu-latest
    permissions:
      contents: write
      packages: write
      actions: read
      
    steps:
      - name: 下载 ZIP 工件
        uses: actions/download-artifact@v8
        with:
          name: ${{ needs.build.outputs.ak3name }}
          path: ./release_zips
          skip-decompress: true

      - name: 设置环境变量
        run: |
          if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
            FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-${{ github.event.inputs.kernel_suffix }}
            echo "FULL_VERSION=$FULL_VERSION" >> $GITHUB_ENV
            export FULL_VERSION=$FULL_VERSION
          else
            FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-${{ env.KERNEL_NAME }}
            echo "FULL_VERSION=$FULL_VERSION" >> $GITHUB_ENV
            export FULL_VERSION=$FULL_VERSION
          fi
          TIME="$(TZ='Asia/Shanghai' date +'%y%m%d%H%M%S')"
          TIME_FORM="$(TZ='Asia/Shanghai' date +'%Y-%m-%d %H:%M:%S')"
          echo "TIME=$TIME" >> $GITHUB_ENV
          echo "TIME_FORM=$TIME_FORM" >> $GITHUB_ENV
          TAG_HEAD="OPPO-OPlus-Realme-build"
          echo "TAG_HEAD=$TAG_HEAD" >> $GITHUB_ENV
          if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then
            KSU_TYPENAME="SukiSU Ultra"
          elif [[ ${{ github.event.inputs.ksu_type }} == "resukisu" ]]; then
            KSU_TYPENAME="ReSukiSU"
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
            KSU_TYPENAME="KernelSU Next"
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
            KSU_TYPENAME="KernelSU (Official)"
          else
            KSU_TYPENAME="无内置KSU"
          fi
          echo "KSU_TYPENAME=$KSU_TYPENAME" >> $GITHUB_ENV
         
      - name: 创建发布
        id: create_release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          cat << 'EOF' > release_notes.md
          ### 📱 欧加真 ${{ env.KSU_TYPENAME }} MT6897 通用内核 | 构建信息
          - 内核版本号: ${{ env.FULL_VERSION }}
          - 编译时间: ${{ env.TIME_FORM }}
          - 机型:欧加真骁龙8Gen3通用 ${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }} 内核(基于一加平板 ${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }} 版官方OKI源码)
          - KSU分支:${{ env.KSU_TYPENAME }}
          - susfs支持:${{ github.event.inputs.susfs_enable }}
          - KPM支持 :${{ github.event.inputs.kpm_enable }}
          - LZ4支持:${{ github.event.inputs.lz4_enable }}
          - LZ4KD支持:${{ github.event.inputs.lz4kd_enable }}
          - 网络功能增强:${{ github.event.inputs.better_net }}
          - BBR/Brutal 等拥塞控制算法支持:${{ github.event.inputs.bbr_enable }}
          - 三星SSG IO调度器支持:${{ github.event.inputs.ssg_enable }}
          - Re-Kernel支持:${{ github.event.inputs.rekernel_enable }}
          - 内核级基带保护支持:${{ github.event.inputs.baseband_guard }}
          - ReSukiSU管理器下载:[ReSukiSU_CI](https://github.com/cctv18/ReSukiSU_CI/releases)
          - SukiSU Ultra管理器下载:[SukiSU-Ultra](https://github.com/SukiSU-Ultra/SukiSU-Ultra/releases)
          - KernelSU Next管理器下载:[KernelSU-Next](https://github.com/KernelSU-Next/KernelSU-Next/releases)
          - KSU原版管理器下载:[KernelSU](https://github.com/tiann/KernelSU/releases)
          
          ### ⏫️ 更新内容:
          - 更新${{ env.KSU_TYPENAME }}至最新版本(${{ needs.build.outputs.ksuver }})
          - (预留)
          
          ### 📋 安装方法 | Installation Guide
          1. 若你的手机已经安装了第三方Recovery(如TWRP),可下载对应机型的AnyKernel刷机包后进入Recovery模式,通过Recovery刷入刷机包后重启设备;
          2. 若你的手机之前已有 root 权限,可在手机上安装[HorizonKernelFlasher](https://github.com/libxzr/HorizonKernelFlasher/releases),在HorizonKernelFlasher中刷入AnyKernel刷机包并重启;
          3. 若你之前已刷入SukiSU Ultra内核,且SukiSU Ultra管理器已更新至最新版本,可在SukiSU Ultra管理器中直接刷入AnyKernel刷机包并重启;
          4. 刷入无lz4kd补丁版的内核前若刷入过lz4kd补丁版的内核,为避免出错,请先关闭zram模块;
          5. 由于KernelSU上游更新了元模块功能,最新版KSU管理器(包括除KernelSU Next以外的各分支)需要配合元模块(metamodule)才能正常挂载模块。目前的元模块包括[meta overlayfs](https://github.com/KernelSU-Modules-Repo/meta-overlayfs), [mountify](https://github.com/backslashxx/mountify), [meta magicmount](https://github.com/7a72/meta-magic_mount/), [meta magicmount rs](https://github.com/Tools-cx-app/meta-magic_mount/), [hybrid mount](https://github.com/YuzakiKokuban/meta-hybrid_mount)等。若你是第一次使用KSU或刚从旧版KSU管理器升级至新版,请先安装一个元模块,这样其他涉及系统挂载的模块才能正常运行;
          6. KernelPatch Next(即KPN)是一个独立于KSU的KPM实现,可以运行在任意KSU/面具环境中(不适用于Apatch),且不能与(Re)SukiSU内置的kpm功能共同使用,使用前请保证你的内核没有内置的kpm实现/修补。
          
          #### ※※※刷写内核有风险,为防止出现意外导致手机变砖,在刷入内核前请务必用[KernelFlasher](https://github.com/capntrips/KernelFlasher)等软件备份boot等关键启动分区!※※※
          EOF

          gh release create "${{ env.TAG_HEAD }}-${{ env.TIME }}" \
            --repo "${{ github.repository }}" \
            --title "${{ env.TAG_HEAD }}-${{ env.FULL_VERSION }}" \
            --notes-file release_notes.md \
            release_zips/AnyKernel3_*.zip


================================================
FILE: .github/workflows/fastbuild_6.1.134.yml
================================================
name: 6.1.134 (天玑特供)欧加真OKI内核快速构建

env:
  TZ: Asia/Shanghai
  ANDROID_VERSION: 'android14'
  KERNEL_VERSION: '6.1'
  SUB_VERSION: '134'
  KERNEL_NAME: 'android14-11-o-gca13bffobf09'
  CCACHE_KEY: ccache-ecsv2-6.1.134

on:
  workflow_dispatch:
    inputs:
      ksu_type:
        description: 'KernelSU分支(ReSukiSU/SukiSU Ultra/KernelSU Next/KSU(原版)/无内置KSU,默认ReSukiSU)'
        required: true
        type: choice
        default: 'resukisu'
        options:
          - 'resukisu'
          - 'sukisu'
          - 'ksunext'
          - 'ksu'
          - 'none'
      susfs_enable:
        description: '是否开启susfs(用于增强隐藏环境挂载功能; 可能轻微增加耗电,上游更新导致不稳定时或不需要可关闭)'
        required: true
        type: boolean
        default: 'true'
      kpm_enable:
        description: '是否开启kpm(builtin-使用(re)sukisu内置kpm, kpn-使用独立kpm实现(支持任意KSU/面具环境); 不需要可保持默认关闭)'
        required: true
        type: choice
        default: 'false'
        options:
          - 'false'
          - 'builtin'
          - 'kpn'
      lz4_enable:
        description: '是否安装 lz4 1.10.0+zstd 1.5.7 补丁'
        required: true
        type: boolean
        default: 'true'
      lz4kd_enable:
        description: '是否安装 LZ4KD 补丁(若已开启lz4+zstd补丁则可不开启)'
        required: true
        type: boolean
        default: 'false'
      bbr_enable:
        description: '是否启用bbr算法(优化上行数据,对手机日用无太大意义甚至可能负优化;false关闭,true仅加入算法,default设为默认)'
        required: true
        type: choice
        default: 'false'
        options:
          - 'false'
          - 'true'
          - 'default'
      better_net:
        description: '是否开启网络功能拓展配置(用于为ipset及需要iptables等高级网络功能内核支持的程序提供支持,天玑机型可能导致bug,建议关闭)'
        required: true
        type: boolean
        default: 'false'
      ssg_enable:
        description: '是否启用三星SSG IO调度器支持(提升IO读写性能; 在一加12上可能导致bug)'
        required: true
        type: boolean
        default: 'true'
      rekernel_enable:
        description: '是否启用Re-Kernel支持(与Freezer/NoActive等软件配合, 提升应用冻结能力)'
        required: true
        type: boolean
        default: 'false'
      baseband_guard:
        description: '是否开启内核级基带保护(阻止一切对非用户分区的写入,有效防止格机)'
        required: true
        type: boolean
        default: 'true'
      ccache_update:
        description: '更新ccache缓存(将本次编译生成的ccache缓存覆盖至仓库缓存,在更改编译配置、源码或需要刷新缓存时开启)'
        required: true
        type: boolean
        default: 'false'
      ccache_debug:
        description: '是否上传 Ccache调试日志(用于调试, 无需要不必开启)'
        required: true
        type: boolean
        default: 'false'
      kernel_suffix:
        description: '内核后缀(留空默认,开头别加连字符,勿加空格等影响指令运行的保留字符)'
        required: false
        type: string
        default: ''

jobs:
  build:
    runs-on: ubuntu-latest
    outputs:
      ksuver: ${{ steps.ksu_version.outputs.ksuver }}
      ak3name: ${{ steps.create_zip.outputs.ak3name }}
    permissions:
      actions: write
      contents: read
    steps:
      - name: 安装环境依赖+初始化源码仓库及llvm-Clang20工具链
        run: |
          rm -rf kernel_workspace
          mkdir kernel_workspace
          cd kernel_workspace
          echo "当前仓库:$GITHUB_REPOSITORY"
          echo "当前分支:$GITHUB_REF_NAME"
          
          sudo apt-mark hold firefox &&
          sudo apt-mark hold libc-bin &&
          sudo apt purge man-db &&
          sudo rm -rf /var/lib/man-db/auto-update &&
          sudo apt update &&
          sudo apt-get install -y --no-install-recommends binutils python-is-python3 libssl-dev libelf-dev &
          #旧版完整指令:(由于经过验证大部分指令已内置于GitHub Action环境中,故进行精简)
          #sudo apt-get install -y --no-install-recommends curl bison flex make binutils git perl gcc python3 python-is-python3 bc libssl-dev libelf-dev zip unzip ccache
          
          #使用最新版ccache-ECS(特化优化内核编译缓存,大幅提升二次不同配置编译速度)
          wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/lib/ccache-x86-64 -O ccache &&
          sudo cp -f ./ccache /usr/bin/ccache &&
          sudo chmod +x /usr/bin/ccache &&
          rm -f ./ccache &
          
          echo "正在克隆源码仓库..."
          aria2c -s16 -x16 -k1M https://github.com/cctv18/android_kernel_oneplus_mt6989/archive/refs/heads/oneplus/mt6989_b_16.0.0_ace5_race.zip -o common.zip && 
          unzip -q common.zip && 
          mv "android_kernel_oneplus_mt6989-oneplus-mt6989_b_16.0.0_ace5_race" common &&
          rm -rf common.zip &
          
          echo "正在克隆llvm-Clang20工具链..." &&
          mkdir -p clang20 &&
          aria2c -s16 -x16 -k1M https://github.com/cctv18/oneplus_sm8650_toolchain/releases/download/LLVM-Clang20-r547379/clang-r547379.zip -o clang.zip &&
          unzip -q clang.zip -d clang20 &&
          rm -rf clang.zip &
          
          echo "正在克隆构建工具..." &&
          aria2c -s16 -x16 -k1M https://github.com/cctv18/oneplus_sm8650_toolchain/releases/download/LLVM-Clang20-r547379/build-tools.zip -o build-tools.zip &&
          unzip -q build-tools.zip &&
          rm -rf build-tools.zip &
          
          wait
          echo "所有源码及llvm-Clang20工具链初始化完成!"
          echo "正在去除 ABI 保护 & 去除 dirty 后缀..."
          rm common/android/abi_gki_protected_exports_* || true
          for f in common/scripts/setlocalversion; do
            sed -i 's/ -dirty//g' "$f"
            sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' "$f"
          done

      - name: 配置ccache目录
        run: |
          echo "CCACHE_DIR=$HOME/.ccache_${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}" >> $GITHUB_ENV
          echo "CCACHE_MAXSIZE=3G" >> $GITHUB_ENV
          echo "当前磁盘空间:"
          df -h
          echo "当前构建内核版本:${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}"

      - name: 载入当前版本内核的 ccache缓存
        uses: actions/cache@v5
        id: ccache-restore
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ${{ env.CCACHE_KEY }}-${{ runner.os }}-${{ github.ref_name }}
          restore-keys: |
            ${{ env.CCACHE_KEY }}-${{ runner.os }}-
            ${{ env.CCACHE_KEY }}-

      - name: 拉取公共预置 ccache 缓存
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          echo "检查本地缓存状态..."
          if [ -d "${{ env.CCACHE_DIR }}" ] && [ "$(ls -A ${{ env.CCACHE_DIR }} 2>/dev/null)" ]; then
            echo "检测到本地已成功载入 ccache 缓存,跳过公共 ccache 拉取!"
            exit 0
          fi
          
          echo "未命中缓存,尝试拉取最新公共 ccache ..."
          mkdir -p ${{ env.CCACHE_DIR }}
          FILE_NAME="ccache-${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}.tar.zst"
          
          if gh release download -p "$FILE_NAME" -R cctv18/public_ccache; then
            echo "成功下载 $FILE_NAME,正在解压..."
            tar -I zstd -xf "$FILE_NAME" -C ${{ env.CCACHE_DIR }}
            echo "公共 ccache 恢复完成!"
          else
            echo "公共 ccache 中未找到对应的 ccache 文件,将进行全量全新编译..."
          fi

      - name: 清除旧 ccache 缓存
        if: inputs.ccache_update
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          echo "正在清除仓库中的旧 ccache 缓存..."
          if gh cache delete ${{ env.CCACHE_KEY }}-${{ runner.os }}-${{ github.ref_name }} -R ${{ github.repository }}; then
            echo "成功删除旧的 ccache 缓存!"
          else
            echo "旧缓存不存在或已被清理!"
          fi
      
      - name: 初始化并配置ccache
        run: |
          # 设置ccache环境变量
          export CCACHE_COMPILERCHECK="none"
          export CCACHE_BASEDIR="${{ github.workspace }}"
          export CCACHE_NOHASHDIR="true"
          export CCACHE_NOHARDLINK="true"
          export CCACHE_DIR="${{ env.CCACHE_DIR }}"
          export CCACHE_MAXSIZE="${{ env.CCACHE_MAXSIZE }}"
          
          # 确保ccache目录存在
          mkdir -p "$CCACHE_DIR"
          
          # 每次运行都重新配置缓存大小
          echo "配置ccache缓存大小为: $CCACHE_MAXSIZE"
          ccache -M "$CCACHE_MAXSIZE"
          ccache -o compression=true
          
          # 显示初始缓存状态
          echo "ccache初始状态:"
          ccache -s
          
          # 如果缓存恢复命中,显示详细信息
          if [ "${{ steps.ccache-restore.outputs.cache-hit }}" == 'true' ]; then
            echo "ccache缓存命中详情:"
            ccache -sv
          fi

      - name: 添加KernelSU
        id: ksu_version
        run: |
          # 进入内核工作目录
          cd kernel_workspace
          if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then
            echo "正在配置SukiSU Ultra..."
            curl -LSs "https://raw.githubusercontent.com/ShirkNeko/SukiSU-Ultra/refs/heads/main/kernel/setup.sh" | bash -s builtin
            cd ./KernelSU
            # 获取当前 Git 提交的短哈希 (8位)
            GIT_COMMIT_HASH=$(git rev-parse --short=8 HEAD)
            echo "当前提交哈希: $GIT_COMMIT_HASH"
            export KSU_VERSION=$KSU_VERSION
            # 尝试最多 3 次获取 KernelSU API 版本号
            for i in {1..3}; do
              # 从远程 Makefile 中提取 KSU_API_VERSION
              KSU_API_VERSION=$(curl -s "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/builtin/kernel/Makefile" | 
                # 查找第一个包含版本定义的行
                grep -m1 "KSU_VERSION_API :=" | 
                # 提取等号后的值
                awk -F'= ' '{print $2}' | 
                # 删除所有空白字符
                tr -d '[:space:]')
              # 如果成功获取到版本号则跳出循环,否则等待 1 秒后重试
              [ -n "$KSU_API_VERSION" ] && break || sleep 1
            done
            # 如果获取失败,使用默认版本号 3.1.7
            [ -z "$KSU_API_VERSION" ] && KSU_API_VERSION="3.1.7"
            # 将 API 版本号存储到 GitHub 环境变量
            echo "KSU_API_VERSION=$KSU_API_VERSION" >> $GITHUB_ENV
            # 创建版本定义模板&版本格式函数: 使用获取的提交哈希和固定后缀
            # KSU_VERSION_API: API 版本定义
            # KSU_VERSION_FULL: 完整版本定义
            VERSION_DEFINITIONS=$'define get_ksu_version_full\nv\\$1-'"$GIT_COMMIT_HASH"$'@cctv18\nendef\n\nKSU_VERSION_API := '"$KSU_API_VERSION"$'\nKSU_VERSION_FULL := v'"$KSU_API_VERSION"$'-'"$GIT_COMMIT_HASH"$'@cctv18'
            # 清理内核 Makefile 中的旧版本定义
            # 删除版本函数
            sed -i '/define get_ksu_version_full/,/endef/d' kernel/Makefile
            # 删除 API 版本定义
            sed -i '/KSU_VERSION_API :=/d' kernel/Makefile
            # 删除完整版本定义
            sed -i '/KSU_VERSION_FULL :=/d' kernel/Makefile
            # 在 REPO_OWNER 行后插入新版本定义
            awk -v def="$VERSION_DEFINITIONS" '
              # 当找到 REPO_OWNER 行时,插入版本定义并设置标记
              /REPO_OWNER :=/ {print; print def; inserted=1; next}
              # 打印所有行
              1
              # 如果未找到插入点,在文件末尾追加
              END {if (!inserted) print def}
            ' kernel/Makefile > kernel/Makefile.tmp && mv kernel/Makefile.tmp kernel/Makefile

            # 生成自定义版本号(基于提交计数), 失败时使用 114514
            KSU_VERSION=$(expr $(git rev-list --count main) + 37185 2>/dev/null || echo 114514)
            # 存储版本号到 GitHub 环境变量
            echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
            echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT

            # 验证修改结果
            grep -A10 "REPO_OWNER" kernel/Makefile  # 检查插入点后的内容
            grep "KSU_VERSION_FULL" kernel/Makefile # 确认版本定义存在
            echo "SukiSU版本号: v${KSU_API_VERSION}-${GIT_COMMIT_HASH}@cctv18"
          elif [[ ${{ github.event.inputs.ksu_type }} == "resukisu" ]]; then
            echo "正在配置ReSukiSU..."
            curl -LSs "https://raw.githubusercontent.com/ReSukiSU/ReSukiSU/refs/heads/main/kernel/setup.sh" | bash -s main
            echo 'CONFIG_KSU_FULL_NAME_FORMAT="%TAG_NAME%-%COMMIT_SHA%@cctv18"' >> ./common/arch/arm64/configs/gki_defconfig
            cd ./KernelSU
            # 生成自定义版本号(基于提交计数), 失败时使用 114514
            KSU_VERSION=$(expr $(git rev-list --count main) + 30700 2>/dev/null || echo 114514)
            # 存储版本号到 GitHub 环境变量
            echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
            echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
            echo "正在配置KernelSU Next..."
            curl -LSs "https://raw.githubusercontent.com/pershoot/KernelSU-Next/refs/heads/dev-susfs/kernel/setup.sh" | bash -s dev-susfs
            cd KernelSU-Next
            rm -rf .git
            KSU_VERSION=$(expr $(curl -sI "https://api.github.com/repos/pershoot/KernelSU-Next/commits?sha=dev&per_page=1" | grep -i "link:" | sed -n 's/.*page=\([0-9]*\)>; rel="last".*/\1/p') "+" 30000)
            echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
            echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
            sed -i "s/KSU_VERSION_FALLBACK := 1/KSU_VERSION_FALLBACK := $KSU_VERSION/g" kernel/Kbuild
            KSU_GIT_TAG=$(curl -sL "https://api.github.com/repos/KernelSU-Next/KernelSU-Next/tags" | grep -o '"name": *"[^"]*"' | head -n 1 | sed 's/"name": "//;s/"//')
            sed -i "s/KSU_VERSION_TAG_FALLBACK := v0.0.1/KSU_VERSION_TAG_FALLBACK := $KSU_GIT_TAG/g" kernel/Kbuild
            #为KernelSU Next添加WildKSU管理器支持
            cd ../common/drivers/kernelsu
            wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/other_patch/apk_sign.patch
            patch -p2 -N -F 3 < apk_sign.patch || true
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
            echo "正在配置原版 KernelSU (tiann/KernelSU)..."
            curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/refs/heads/main/kernel/setup.sh" | bash -s main
            cd ./KernelSU
            KSU_VERSION=$(expr $(curl -sI "https://api.github.com/repos/tiann/KernelSU/commits?sha=main&per_page=1" | grep -i "link:" | sed -n 's/.*page=\([0-9]*\)>; rel="last".*/\1/p') "+" 30000)
            echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
            echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
            sed -i "s/DKSU_VERSION=16/DKSU_VERSION=${KSU_VERSION}/" kernel/Kbuild
          else
            echo "已选择无内置KernelSU模式,跳过KernelSU配置..."
          fi

      - name: 应用 KernelSU & SUSFS 补丁
        if: inputs.susfs_enable
        run: |
          cd kernel_workspace
          if [[ ${{ github.event.inputs.ksu_type }} != "none" ]]; then
            echo "正在添加susfs补丁..."
            git clone --depth=1 https://github.com/cctv18/susfs4oki.git susfs4ksu -b oki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}
            wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/other_patch/69_hide_stuff.patch -O ./common/69_hide_stuff.patch
            cp ./susfs4ksu/kernel_patches/50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch ./common/
            cp ./susfs4ksu/kernel_patches/fs/* ./common/fs/
            cp ./susfs4ksu/kernel_patches/include/linux/* ./common/include/linux/
            cd ./common
            patch -p1 < 50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch || true
            patch -p1 -N -F 3 < 69_hide_stuff.patch || true
            cd ..
          else
            echo "已选择无内置KernelSU模式,跳过susfs配置..."
          fi
          if [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
            echo "正在为原版 KernelSU (tiann/KernelSU)添加补丁..."
            cp ./susfs4ksu/kernel_patches/KernelSU/10_enable_susfs_for_ksu.patch ./KernelSU/
            cd ./KernelSU
            patch -p1 < 10_enable_susfs_for_ksu.patch || true
          fi
          
      - name: 应用lz4 1.10.0 & zstd 1.5.7补丁
        if: inputs.lz4_enable
        run: |
          echo "正在添加lz4 1.10.0 & zstd 1.5.7补丁…"
          cd kernel_workspace
          git clone --depth=1 https://github.com/$GITHUB_REPOSITORY.git -b $GITHUB_REF_NAME $GITHUB_ACTOR
          cp ./$GITHUB_ACTOR/zram_patch/001-lz4.patch ./common/
          cp ./$GITHUB_ACTOR/zram_patch/lz4armv8.S ./common/lib
          cp ./$GITHUB_ACTOR/zram_patch/002-zstd.patch ./common/
          cd ./common
          git apply -p1 < 001-lz4.patch || true
          patch -p1 < 002-zstd.patch || true

      - name: 应用 lz4kd 补丁
        if: inputs.lz4kd_enable
        run: |
          echo "正在添加lz4kd补丁…"
          cd kernel_workspace
          if [ ! -d "SukiSU_patch" ]; then
            git clone --depth=1 https://github.com/ShirkNeko/SukiSU_patch.git
          fi
          cd common
          cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./include/linux/
          cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./lib
          cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./crypto
          cp ../SukiSU_patch/other/zram/zram_patch/${{ env.KERNEL_VERSION }}/lz4kd.patch ./
          patch -p1 -F 3 < lz4kd.patch || true
          
      - name: 添加SUSFS 配置项
        if: inputs.susfs_enable
        run: |
          cd kernel_workspace
          echo "CONFIG_KSU_SUSFS=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_HAS_MAGIC_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SUS_PATH=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SUS_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_AUTO_ADD_SUS_KSU_DEFAULT_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_AUTO_ADD_SUS_BIND_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SUS_KSTAT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_TRY_UMOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_AUTO_ADD_TRY_UMOUNT_FOR_BIND_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SPOOF_UNAME=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_ENABLE_LOG=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_OPEN_REDIRECT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SUS_MAP=y" >> ./common/arch/arm64/configs/gki_defconfig
          
      - name: 添加 KSU & 其他配置项
        run: |
          cd kernel_workspace
          echo "CONFIG_KSU=y" >> ./common/arch/arm64/configs/gki_defconfig
          if [[ ${{ github.event.inputs.kpm_enable }} == 'builtin' && ( "${{ github.event.inputs.ksu_type }}" == "sukisu" || "${{ github.event.inputs.ksu_type }}" == "resukisu" ) ]]; then
            echo "CONFIG_KPM=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          if [[ "${{ github.event.inputs.susfs_enable }}" == "false" ]]; then
            echo "CONFIG_KSU_SUSFS=n" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          #添加对 Mountify (backslashxx/mountify) 模块的支持
          echo "CONFIG_TMPFS_XATTR=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_TMPFS_POSIX_ACL=y" >> ./common/arch/arm64/configs/gki_defconfig
          if [[ ${{ github.event.inputs.lz4kd_enable }} == 'true' ]]; then
            echo "CONFIG_ZSMALLOC=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_LZ4HC=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_LZ4K=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_LZ4KD=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_842=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          # 开启O2编译优化配置
          echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> ./common/arch/arm64/configs/gki_defconfig
          #禁用 defconfig 检查
          sed -i 's/check_defconfig//' ./common/build.config.gki
          #跳过将uapi标准头安装到 usr/include 目录的不必要操作,节省编译时间
          echo "CONFIG_HEADERS_INSTALL=n" >> ./common/arch/arm64/configs/gki_defconfig
          
      - name: 启用网络功能增强优化配置
        if: inputs.better_net
        run: |
          cd kernel_workspace
          #启用  BPF 流解析器,实现高性能网络流量处理,增强网络监控和分析能力
          echo "CONFIG_BPF_STREAM_PARSER=y" >> ./common/arch/arm64/configs/gki_defconfig
          #开启增强 Netfilter 防火墙扩展模块,支持基于地址类型的匹配规则,启用 IP 集合支持,提高防火墙规则灵活性,支持更复杂的流量过滤策略
          echo "CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_NETFILTER_XT_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
          #启用 IP 集框架及其多种数据结构实现,提供高效的大规模 IP 地址管理,提高防火墙规则处理效率,减少内存占用
          echo "CONFIG_IP_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_MAX=65534" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_BITMAP_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_BITMAP_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_BITMAP_PORT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IPMARK=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IPPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IPPORTIP=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IPPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_MAC=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_NETPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_NET=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_NETNET=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_NETPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_HASH_NETIFACE=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP_SET_LIST_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
          #启用 IPv6 网络地址转换
          echo "CONFIG_IP6_NF_NAT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_IP6_NF_TARGET_MASQUERADE=y" >> ./common/arch/arm64/configs/gki_defconfig
          #由于部分机型的vintf兼容性检测规则,在开启CONFIG_IP6_NF_NAT后开机会出现"您的设备内部出现了问题。请联系您的设备制造商了解详情。"的提示,故添加一个配置修复补丁,在编译内核时隐藏CONFIG_IP6_NF_NAT=y但不影响对应功能编译
          cd common
          wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/other_patch/config.patch
          patch -p1 -F 3 < config.patch || true

      - name: 添加 BBR 等一系列拥塞控制算法
        run: |
          if [[ "${{ github.event.inputs.bbr_enable }}" != "false" ]]; then
            echo "正在添加BBR等拥塞控制算法..."
            cd kernel_workspace
            #开启TCP拥塞控制算法控制器(必需)
            echo "CONFIG_TCP_CONG_ADVANCED=y" >> ./common/arch/arm64/configs/gki_defconfig
            ################################################################################################################################
            # BBR:基于链路容量的代表拥塞控制算法,不再使用丢包、延时等信号去衡量拥塞是否发生,而是直接对网络建模来应对、避免真实的网络拥塞;
            # 具有高吞吐、低延迟、抗丢包的特点,但在手机上使用时由于持续探测带宽/RTT、高频计算与发包增加 CPU 和射频模块功耗,会增加耗电及发热;
            # 且移动基站缓冲区深度通常较小(~50ms),BBR 的带宽探测阶段(ProbeRTT)过度降窗可能导致吞吐量骤降,且网络切换(WiFi→5G)时需重新
            # 探测参数,反而增加延迟或导致速率振荡(短暂卡顿),且存在 RTT 不公平性,与基于丢包的流竞争时可能过于强势,在混合网络环境中
            #(如 BBR + CUBIC 共存),BBR 会抢占更多其他软件的带宽,降低其他应用的公平性(如后台软件更新影响前台视频播放)。
            # 因此,虽然BBR可以显著减少排队延迟,抗丢包能力强,带宽利用率高,但由于其会增加耗电,且易导致网络速率波动,故安卓系统默认不使用
            # BBR拥塞算法,而是使用在吞吐量、稳定性、兼容性、能效之间取得最佳平衡的CUBIC算法。在开启BBR前,请考虑自己是否真的有使用BBR的必要。
            ################################################################################################################################
            echo "CONFIG_TCP_CONG_BBR=y" >> ./common/arch/arm64/configs/gki_defconfig
            #CUBIC:安卓的默认TCP拥塞控制算法,在吞吐量、稳定性、兼容性、能效之间取得最佳平衡,具有高兼容性与公平性、抗网络波动性强、低计算开销的特点,是绝大部分移动场景的优先选择
            echo "CONFIG_TCP_CONG_CUBIC=y" >> ./common/arch/arm64/configs/gki_defconfig
            #VEGAS:基于时延的拥塞控制算法之一,将回路响应时间(Round Trip Time,RTT)增加视为出现拥塞,增加时增大拥塞窗口,减小时减小拥塞窗口
            echo "CONFIG_TCP_CONG_VEGAS=y" >> ./common/arch/arm64/configs/gki_defconfig
            #New Vegas:Vegas 算法的改进版,优化了 RTT 测量和竞争公平性,可以更准确地检测拥塞,与 Reno/CUBIC 共存能力提升
            echo "CONFIG_TCP_CONG_NV=y" >> ./common/arch/arm64/configs/gki_defconfig
            #Westwood+:基于带宽估计(ACK 到达率)动态设置拥塞窗口和慢启动阈值;快速恢复,适合无线网络(区分拥塞丢包与无线丢包)
            echo "CONFIG_TCP_CONG_WESTWOOD=y" >> ./common/arch/arm64/configs/gki_defconfig
            #HTCP:一种基于损失的算法,使用 AIMD 来控制拥塞窗口,根据 RTT 动态调整增长因子,结合延迟和丢包信号,针对高延迟的高速网络进行优化
            echo "CONFIG_TCP_CONG_HTCP=y" >> ./common/arch/arm64/configs/gki_defconfig
            #brutal:一种通过主动探测 + 激进抢占最大化吞吐量的拥塞算法,无拥塞窗口上限,轻度丢包(<20%)不降窗,避免类似 BBR 的 ProbeRTT 阶段,
            #持续维持高发送速率,与 Reno/CUBIC 共存时,Brutal 可通过高频发包抢占 90%+ 带宽,适用于高丢包弱网环境(如公共 Wi-Fi、蜂窝网络)及
            #直播推流、云游戏上行链路等需优先保证吞吐量而非延迟敏感的场景,提升弱网吞吐性能,对抗运营商 QoS 限速。但由于TCP Brutal 仅在应用程序
            #对每个 TCP 连接设置带宽参数之后才能正常工作,绝大部分安卓应用都不支持该操作,故请勿将 TCP Brutal 设置成默认拥塞控制算法。
            echo "CONFIG_TCP_CONG_BRUTAL=y" >> ./common/arch/arm64/configs/gki_defconfig
            if [[ "${{ github.event.inputs.bbr_enable }}" == "default" ]]; then
              echo "正在将BBR设为默认拥塞控制算法..."
              echo "CONFIG_DEFAULT_TCP_CONG=bbr" >> ./common/arch/arm64/configs/gki_defconfig
            else
              echo "CONFIG_DEFAULT_TCP_CONG=cubic" >> ./common/arch/arm64/configs/gki_defconfig
            fi
          fi

      - name: 启用三星SSG IO调度器
        if: inputs.ssg_enable
        run: |
          echo "正在启用三星SSG IO调度器(一加12等极少数机型开启后可能不开机,若出现bug请关闭此项)…"
          cd kernel_workspace
          echo "CONFIG_MQ_IOSCHED_SSG=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_MQ_IOSCHED_SSG_CGROUP=y" >> ./common/arch/arm64/configs/gki_defconfig

      - name: 启用Re-Kernel支持
        if: inputs.rekernel_enable
        run: |
          echo "正在启用Re-Kernel支持(用于与Freezer,NoActive等软件配合使用,提升冻结后台能力)…"
          cd kernel_workspace
          echo "CONFIG_REKERNEL=y" >> ./common/arch/arm64/configs/gki_defconfig

      - name: 启用内核级基带保护
        if: inputs.baseband_guard
        run: |
          echo "正在启用启用内核级基带保护支持…"
          cd kernel_workspace
          echo "CONFIG_BBG=y" >> ./common/arch/arm64/configs/gki_defconfig
          cd ./common
          curl -sSL https://github.com/cctv18/Baseband-guard/raw/master/setup.sh | bash
          sed -i '/^config LSM$/,/^help$/{ /^[[:space:]]*default/ { /baseband_guard/! s/selinux/selinux,baseband_guard/ } }' security/Kconfig

      - name: 添加制作名称
        run: |
          cd kernel_workspace
          echo "替换内核版本后缀..."
          if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
            echo "当前内核版本后缀:${{ github.event.inputs.kernel_suffix }}"
            for f in ./common/scripts/setlocalversion; do
              sed -i "\$s|echo \"\\\$res\"|echo \"-${{ github.event.inputs.kernel_suffix }}\"|" "$f"
            done
          else
            echo "当前内核版本后缀:${{ env.KERNEL_NAME }}"
            for f in ./common/scripts/setlocalversion; do
              sed -i "\$s|echo \"\\\$res\"|echo \"-${{ env.KERNEL_NAME }}\"|" "$f"
            done
          fi
           
      - name: 构建内核
        run: |
          WORKDIR="$(pwd)"
          export PATH="/usr/lib/ccache:$PATH"
          export PATH="$WORKDIR/kernel_workspace/clang20/bin:$PATH"
          export PATH="$WORKDIR/kernel_workspace/build-tools/bin:$PATH"
          CLANG_DIR="$WORKDIR/kernel_workspace/clang20/bin"
          CLANG_VERSION="$($CLANG_DIR/clang --version | head -n 1)"
          LLD_VERSION="$($CLANG_DIR/ld.lld --version | head -n 1)"
          echo "编译器信息:"
          echo "Clang版本: $CLANG_VERSION"
          echo "LLD版本: $LLD_VERSION"
          pahole_version=$(pahole --version 2>/dev/null | head -n1); [ -z "$pahole_version" ] && echo "pahole版本:未安装" || echo "pahole版本:$pahole_version"
          
          export CCACHE_LOGFILE="${{ github.workspace }}/kernel_workspace/ccache.log"
          export CCACHE_COMPILERCHECK="none"
          export CCACHE_BASEDIR="${{ github.workspace }}"
          export CCACHE_NOHASHDIR="true"
          export CCACHE_NOHARDLINK="true"
          export CCACHE_DIR="${{ env.CCACHE_DIR }}"
          export CCACHE_MAXSIZE="3G"
          export CCACHE_IS_KERNEL_COMPILING="true"
          echo "sloppiness = file_stat_matches,include_file_ctime,include_file_mtime,pch_defines,file_macro,time_macros" >> "$CCACHE_DIR/ccache.conf"
          
          cd kernel_workspace/common
          wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/lib/libfakestat.so
          wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/lib/libfaketimeMT.so
          chmod 777 ./*.so
          export FAKESTAT="2025-05-25 12:00:00"
          export FAKETIME="@2025-05-25 13:00:00"
          echo "FAKESTAT=$FAKESTAT" >> $GITHUB_ENV
          echo "FAKETIME=$FAKETIME" >> $GITHUB_ENV
          SO_DIR=$(pwd)
          export PRELOAD_LIBS="$SO_DIR/libfakestat.so $SO_DIR/libfaketimeMT.so"
          #创建 CC (编译器) 包装器
          echo '#!/bin/bash' > cc-wrapper
          echo 'export LD_PRELOAD="'$PRELOAD_LIBS'"' >> cc-wrapper
          echo 'export FAKESTAT="'$FAKESTAT'"' >> cc-wrapper
          echo 'export FAKETIME="'$FAKETIME'"' >> cc-wrapper
          echo 'ccache clang "$@"' >> cc-wrapper
          #创建 LD (链接器) 包装器
          echo '#!/bin/bash' > ld-wrapper
          echo 'export LD_PRELOAD="'$PRELOAD_LIBS'"' >> ld-wrapper
          echo 'export FAKESTAT="'$FAKESTAT'"' >> ld-wrapper
          echo 'export FAKETIME="'$FAKETIME'"' >> ld-wrapper
          echo 'ld.lld "$@"' >> ld-wrapper
          
          # 测试时间劫持测试是否正常工作
          echo "--- [Wrapper Test] 正在创建通用的时间劫持测试脚本 ---"
          echo '#!/bin/bash' > test-wrapper.sh
          echo 'export LD_PRELOAD="'$PRELOAD_LIBS'"' >> test-wrapper.sh
          echo 'export FAKESTAT="'$FAKESTAT'"' >> test-wrapper.sh
          echo 'export FAKETIME="'$FAKETIME'"' >> test-wrapper.sh
          echo 'echo ">>> Wrapper 内部环境检查完毕."' >> test-wrapper.sh
          echo 'exec "$@"' >> test-wrapper.sh # 执行所有传入的参数
          chmod +x test-wrapper.sh
          echo "--- [Wrapper Test] 正在测试 (date) 命令 ---"
          ./test-wrapper.sh date
          echo "--- [Wrapper Test] 正在测试 (stat) 命令 ---"
          ./test-wrapper.sh stat ./Makefile
          echo "--- [Wrapper Test] 测试完毕 ---"
          chmod +x cc-wrapper ld-wrapper
          echo "--- 编译前环境时间: $(LD_PRELOAD=$PRELOAD_LIBS date) ---"
          echo "--- 编译前环境文件时间戳: ---"
          LD_PRELOAD=$PRELOAD_LIBS stat ./Makefile
          
          #在构建内核的同时清除不必要的.NET, Android NDK, Haskell, CodeQL运行库,清理空间且不阻塞后续步骤运行
          sudo rm -rf /usr/share/dotnet &
          sudo rm -rf /usr/local/lib/android &
          sudo rm -rf /opt/ghc &
          sudo rm -rf /opt/hostedtoolcache/CodeQL &
          make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" LD="ld.lld" HOSTLD=ld.lld O=out KCFLAGS+=-O2 KCFLAGS+=-Wno-error gki_defconfig &&
          make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="$(pwd)/cc-wrapper" LD="$(pwd)/ld-wrapper" HOSTLD=ld.lld O=out KCFLAGS+=-O2 KCFLAGS+=-Wno-error Image
          
          # 编译后时间劫持二次校验
          echo "--- 编译后环境时间: $(LD_PRELOAD=$PRELOAD_LIBS date) ---"
          echo "--- 编译后环境文件时间戳: ---"
          LD_PRELOAD=$PRELOAD_LIBS stat ./Makefile
          echo "内核编译完成!"
          echo "ccache状态:"
          ccache -s
          echo "编译后空间:"
          df -h

      - name: 保存新的 ccache 缓存
        if: inputs.ccache_update || steps.ccache-restore.outputs.cache-hit != 'true'
        uses: actions/cache/save@v5
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ${{ env.CCACHE_KEY }}-${{ runner.os }}-${{ github.ref_name }}
         
      - name: 应用KPM并修补内核
        run: |
          if [[ ${{ github.event.inputs.kpm_enable }} == 'builtin' && ( "${{ github.event.inputs.ksu_type }}" == "sukisu" || "${{ github.event.inputs.ksu_type }}" == "resukisu" ) ]]; then
            echo "正在应用KPM并修补内核..."
            cd kernel_workspace/common/out/arch/arm64/boot
            curl -LO https://github.com/SukiSU-Ultra/SukiSU_KernelPatch_patch/releases/latest/download/patch_linux
            chmod +x patch_linux
            ./patch_linux
            rm -f Image
            mv oImage Image
          fi
          if [[ ${{ github.event.inputs.kpm_enable }} == 'kpn' ]]; then
            echo "正在应用KP-N并修补内核..."
            cd kernel_workspace/common/out/arch/arm64/boot
            wget https://github.com/KernelSU-Next/KPatch-Next/releases/latest/download/kptools-linux
            wget https://github.com/KernelSU-Next/KPatch-Next/releases/latest/download/kpimg-linux
            chmod +x ./kptools-linux
            ./kptools-linux -p -i ./Image -k ./kpimg-linux -o ./oImage
            rm -f Image
            mv oImage Image
          fi
          
      - name: 克隆 AnyKernel3 并打包
        id: create_zip
        run: |
          cd kernel_workspace
          git clone https://github.com/cctv18/AnyKernel3 --depth=1
          rm -rf ./AnyKernel3/.git
          cd AnyKernel3
          cp ../common/out/arch/arm64/boot/Image ./Image
          if [[ ! -f ./Image ]]; then
            echo "未找到内核镜像文件,构建可能出错"
            exit 1
          fi
          if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then
            KSU_TYPENAME="SukiSU"
          elif [[ ${{ github.event.inputs.ksu_type }} == "resukisu" ]]; then
            KSU_TYPENAME="ReSukiSU"
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
            KSU_TYPENAME="KSUNext"
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
            KSU_TYPENAME="KSU"
          else
            KSU_TYPENAME="none"
          fi
          if [[ ${{ github.event.inputs.lz4kd_enable }} == 'true' ]]; then
            wget https://raw.githubusercontent.com/$GITHUB_REPOSITORY/refs/heads/$GITHUB_REF_NAME/zram.zip
          fi
          if [[ ${{ github.event.inputs.kpm_enable }} == 'kpn' ]]; then
            wget https://github.com/cctv18/KPatch-Next/releases/latest/download/kpn.zip
          fi
          if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
            AK3_NAME=AnyKernel3_${KSU_TYPENAME}_${{ env.KSUVER }}_${{ env.KERNEL_VERSION }}_${{ github.event.inputs.kernel_suffix }}.zip
          else
            AK3_NAME=AnyKernel3_${KSU_TYPENAME}_${{ env.KSUVER }}_${{ env.KERNEL_VERSION }}_${{ env.KERNEL_NAME }}.zip
          fi
          zip -r ../$AK3_NAME ./*
          echo "ak3name=$AK3_NAME" >> $GITHUB_OUTPUT
          
          #为AK3添加注释(调试信息)
          if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
            FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-${{ github.event.inputs.kernel_suffix }}
          else
            FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-${{ env.KERNEL_NAME }}
          fi
          TIME_NOW="$(TZ='Asia/Shanghai' date +'%Y-%m-%d %H:%M:%S')"
          echo "Author: $GITHUB_ACTOR" > ./ak3.log
          echo "Repo: $GITHUB_REPOSITORY" >> ./ak3.log
          echo "Branch: $GITHUB_REF_NAME" >> ./ak3.log
          echo "Run ID: $GITHUB_RUN_ID" >> ./ak3.log
          echo "Commit: $GITHUB_SHA" >> ./ak3.log
          echo "Time: $TIME_NOW" >> ./ak3.log
          echo "Kernel Ver: $FULL_VERSION" >> ./ak3.log
          echo "KSU Branch: ${KSU_TYPENAME}" >> ./ak3.log
          echo "KSU Ver: ${KSUVER}" >> ./ak3.log
          echo "susfs: ${{ github.event.inputs.susfs_enable }}" >> ./ak3.log
          echo "KPM: ${{ github.event.inputs.kpm_enable }}" >> ./ak3.log
          echo "LZ4: ${{ github.event.inputs.lz4_enable }}" >> ./ak3.log
          echo "LZ4KD: ${{ github.event.inputs.lz4kd_enable }}" >> ./ak3.log
          echo "IPset: ${{ github.event.inputs.better_net }}" >> ./ak3.log
          echo "BBR&Brutal: ${{ github.event.inputs.bbr_enable }}" >> ./ak3.log
          echo "SSG: ${{ github.event.inputs.ssg_enable }}" >> ./ak3.log
          echo "Re-Kernel: ${{ github.event.inputs.rekernel_enable }}" >> ./ak3.log
          echo "BBG: ${{ github.event.inputs.baseband_guard }}" >> ./ak3.log
          zip -z ../$AK3_NAME < ./ak3.log

      - name: 上传 Ccache 调试日志
        if: always() && inputs.ccache_debug
        uses: actions/upload-artifact@v7
        with:
          name: ccache-debug-log
          path: ${{ github.workspace }}/kernel_workspace/ccache.log
          archive: true

      - name: 上传 ZIP 工件
        uses: actions/upload-artifact@v7
        with:
          path: ${{ github.workspace }}/kernel_workspace/AnyKernel*.zip
          archive: false

  release:
    needs: build
    runs-on: ubuntu-latest
    permissions:
      contents: write
      packages: write
      actions: read
      
    steps:
      - name: 下载 ZIP 工件
        uses: actions/download-artifact@v8
        with:
          name: ${{ needs.build.outputs.ak3name }}
          path: ./release_zips
          skip-decompress: true

      - name: 设置环境变量
        run: |
          if [[ -n "${{ github.event.inputs.kernel_suffix }}" ]]; then
            FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-${{ github.event.inputs.kernel_suffix }}
            echo "FULL_VERSION=$FULL_VERSION" >> $GITHUB_ENV
            export FULL_VERSION=$FULL_VERSION
          else
            FULL_VERSION=${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}-${{ env.KERNEL_NAME }}
            echo "FULL_VERSION=$FULL_VERSION" >> $GITHUB_ENV
            export FULL_VERSION=$FULL_VERSION
          fi
          TIME="$(TZ='Asia/Shanghai' date +'%y%m%d%H%M%S')"
          TIME_FORM="$(TZ='Asia/Shanghai' date +'%Y-%m-%d %H:%M:%S')"
          echo "TIME=$TIME" >> $GITHUB_ENV
          echo "TIME_FORM=$TIME_FORM" >> $GITHUB_ENV
          TAG_HEAD="OPPO-OPlus-Realme-build"
          echo "TAG_HEAD=$TAG_HEAD" >> $GITHUB_ENV
          if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then
            KSU_TYPENAME="SukiSU Ultra"
          elif [[ ${{ github.event.inputs.ksu_type }} == "resukisu" ]]; then
            KSU_TYPENAME="ReSukiSU"
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
            KSU_TYPENAME="KernelSU Next"
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
            KSU_TYPENAME="KernelSU (Official)"
          else
            KSU_TYPENAME="无内置KSU"
          fi
          echo "KSU_TYPENAME=$KSU_TYPENAME" >> $GITHUB_ENV
         
      - name: 创建发布
        id: create_release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          cat << 'EOF' > release_notes.md
          ### 📱 欧加真 ${{ env.KSU_TYPENAME }} MT6989 通用内核 | 构建信息
          - 内核版本号: ${{ env.FULL_VERSION }}
          - 编译时间: ${{ env.TIME_FORM }}
          - 机型:欧加真骁龙8Gen3通用 ${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }} 内核(基于一加Ace5竞速板 ${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }} 版官方OKI源码)
          - KSU分支:${{ env.KSU_TYPENAME }}
          - susfs支持:${{ github.event.inputs.susfs_enable }}
          - KPM支持 :${{ github.event.inputs.kpm_enable }}
          - LZ4支持:${{ github.event.inputs.lz4_enable }}
          - LZ4KD支持:${{ github.event.inputs.lz4kd_enable }}
          - 网络功能增强:${{ github.event.inputs.better_net }}
          - BBR/Brutal 等拥塞控制算法支持:${{ github.event.inputs.bbr_enable }}
          - 三星SSG IO调度器支持:${{ github.event.inputs.ssg_enable }}
          - Re-Kernel支持:${{ github.event.inputs.rekernel_enable }}
          - 内核级基带保护支持:${{ github.event.inputs.baseband_guard }}
          - ReSukiSU管理器下载:[ReSukiSU_CI](https://github.com/cctv18/ReSukiSU_CI/releases)
          - SukiSU Ultra管理器下载:[SukiSU-Ultra](https://github.com/SukiSU-Ultra/SukiSU-Ultra/releases)
          - KernelSU Next管理器下载:[KernelSU-Next](https://github.com/KernelSU-Next/KernelSU-Next/releases)
          - KSU原版管理器下载:[KernelSU](https://github.com/tiann/KernelSU/releases)
          
          ### ⏫️ 更新内容:
          - 更新${{ env.KSU_TYPENAME }}至最新版本(${{ needs.build.outputs.ksuver }})
          - (预留)
          
          ### 📋 安装方法 | Installation Guide
          1. 若你的手机已经安装了第三方Recovery(如TWRP),可下载对应机型的AnyKernel刷机包后进入Recovery模式,通过Recovery刷入刷机包后重启设备;
          2. 若你的手机之前已有 root 权限,可在手机上安装[HorizonKernelFlasher](https://github.com/libxzr/HorizonKernelFlasher/releases),在HorizonKernelFlasher中刷入AnyKernel刷机包并重启;
          3. 若你之前已刷入SukiSU Ultra内核,且SukiSU Ultra管理器已更新至最新版本,可在SukiSU Ultra管理器中直接刷入AnyKernel刷机包并重启;
          4. 刷入无lz4kd补丁版的内核前若刷入过lz4kd补丁版的内核,为避免出错,请先关闭zram模块;
          5. 由于KernelSU上游更新了元模块功能,最新版KSU管理器(包括除KernelSU Next以外的各分支)需要配合元模块(metamodule)才能正常挂载模块。目前的元模块包括[meta overlayfs](https://github.com/KernelSU-Modules-Repo/meta-overlayfs), [mountify](https://github.com/backslashxx/mountify), [meta magicmount](https://github.com/7a72/meta-magic_mount/), [meta magicmount rs](https://github.com/Tools-cx-app/meta-magic_mount/), [hybrid mount](https://github.com/YuzakiKokuban/meta-hybrid_mount)等。若你是第一次使用KSU或刚从旧版KSU管理器升级至新版,请先安装一个元模块,这样其他涉及系统挂载的模块才能正常运行;
          6. KernelPatch Next(即KPN)是一个独立于KSU的KPM实现,可以运行在任意KSU/面具环境中(不适用于Apatch),且不能与(Re)SukiSU内置的kpm功能共同使用,使用前请保证你的内核没有内置的kpm实现/修补。
          
          #### ※※※刷写内核有风险,为防止出现意外导致手机变砖,在刷入内核前请务必用[KernelFlasher](https://github.com/capntrips/KernelFlasher)等软件备份boot等关键启动分区!※※※
          EOF

          gh release create "${{ env.TAG_HEAD }}-${{ env.TIME }}" \
            --repo "${{ github.repository }}" \
            --title "${{ env.TAG_HEAD }}-${{ env.FULL_VERSION }}" \
            --notes-file release_notes.md \
            release_zips/AnyKernel3_*.zip


================================================
FILE: .github/workflows/fastbuild_6.1.141.yml
================================================
name: 6.1.141 欧加真OKI内核快速构建

env:
  TZ: Asia/Shanghai
  ANDROID_VERSION: 'android14'
  KERNEL_VERSION: '6.1'
  SUB_VERSION: '141'
  KERNEL_NAME: 'android14-11-o-gca13bffobf09'
  CCACHE_KEY: ccache-ecsv2-6.1.141

on:
  workflow_dispatch:
    inputs:
      ksu_type:
        description: 'KernelSU分支(ReSukiSU/SukiSU Ultra/KernelSU Next/KSU(原版)/无内置KSU,默认ReSukiSU)'
        required: true
        type: choice
        default: 'resukisu'
        options:
          - 'resukisu'
          - 'sukisu'
          - 'ksunext'
          - 'ksu'
          - 'none'
      susfs_enable:
        description: '是否开启susfs(用于增强隐藏环境挂载功能; 可能轻微增加耗电,上游更新导致不稳定时或不需要可关闭)'
        required: true
        type: boolean
        default: 'true'
      kpm_enable:
        description: '是否开启kpm(builtin-使用(re)sukisu内置kpm, kpn-使用独立kpm实现(支持任意KSU/面具环境); 不需要可保持默认关闭)'
        required: true
        type: choice
        default: 'false'
        options:
          - 'false'
          - 'builtin'
          - 'kpn'
      lz4_enable:
        description: '是否安装 lz4 1.10.0+zstd 1.5.7 补丁'
        required: true
        type: boolean
        default: 'true'
      lz4kd_enable:
        description: '是否安装 LZ4KD 补丁(若已开启lz4+zstd补丁则可不开启)'
        required: true
        type: boolean
        default: 'false'
      bbr_enable:
        description: '是否启用bbr算法(优化上行数据,对手机日用无太大意义甚至可能负优化;false关闭,true仅加入算法,default设为默认)'
        required: true
        type: choice
        default: 'false'
        options:
          - 'false'
          - 'true'
          - 'default'
      better_net:
        description: '是否开启网络功能拓展配置(用于为ipset及需要iptables等高级网络功能内核支持的程序提供支持)'
        required: true
        type: boolean
        default: 'false'
      ssg_enable:
        description: '是否启用三星SSG IO调度器支持(提升IO读写性能; 在一加12上可能导致bug)'
        required: true
        type: boolean
        default: 'true'
      rekernel_enable:
        description: '是否启用Re-Kernel支持(与Freezer/NoActive等软件配合, 提升应用冻结能力)'
        required: true
        type: boolean
        default: 'false'
      baseband_guard:
        description: '是否开启内核级基带保护(阻止一切对非用户分区的写入,有效防止格机)'
        required: true
        type: boolean
        default: 'true'
      ccache_update:
        description: '更新ccache缓存(将本次编译生成的ccache缓存覆盖至仓库缓存,在更改编译配置、源码或需要刷新缓存时开启)'
        required: true
        type: boolean
        default: 'false'
      ccache_debug:
        description: '是否上传 Ccache调试日志(用于调试, 无需要不必开启)'
        required: true
        type: boolean
        default: 'false'
      kernel_suffix:
        description: '内核后缀(留空默认,开头别加连字符,勿加空格等影响指令运行的保留字符)'
        required: false
        type: string
        default: ''

jobs:
  build:
    runs-on: ubuntu-latest
    outputs:
      ksuver: ${{ steps.ksu_version.outputs.ksuver }}
      ak3name: ${{ steps.create_zip.outputs.ak3name }}
    permissions:
      actions: write
      contents: read
    steps:
      - name: 安装环境依赖+初始化源码仓库及llvm-Clang20工具链
        run: |
          rm -rf kernel_workspace
          mkdir kernel_workspace
          cd kernel_workspace
          echo "当前仓库:$GITHUB_REPOSITORY"
          echo "当前分支:$GITHUB_REF_NAME"
          
          sudo apt-mark hold firefox &&
          sudo apt-mark hold libc-bin &&
          sudo apt purge man-db &&
          sudo rm -rf /var/lib/man-db/auto-update &&
          sudo apt update &&
          sudo apt-get install -y --no-install-recommends binutils python-is-python3 libssl-dev libelf-dev &
          #旧版完整指令:(由于经过验证大部分指令已内置于GitHub Action环境中,故进行精简)
          #sudo apt-get install -y --no-install-recommends curl bison flex make binutils git perl gcc python3 python-is-python3 bc libssl-dev libelf-dev zip unzip ccache
          
          #使用最新版ccache-ECS(特化优化内核编译缓存,大幅提升二次不同配置编译速度)
          wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/lib/ccache-x86-64 -O ccache &&
          sudo cp -f ./ccache /usr/bin/ccache &&
          sudo chmod +x /usr/bin/ccache &&
          rm -f ./ccache &
          
          echo "正在克隆源码仓库..."
          aria2c -s16 -x16 -k1M https://github.com/cctv18/android_kernel_common_oneplus_sm8650/archive/refs/heads/oneplus/sm8650_b_16.0.0_oneplus12_6.1.141.zip -o common.zip && 
          unzip -q common.zip && 
          mv "android_kernel_common_oneplus_sm8650-oneplus-sm8650_b_16.0.0_oneplus12_6.1.141" common &&
          rm -rf common.zip &
          
          echo "正在克隆llvm-Clang20工具链..." &&
          mkdir -p clang20 &&
          aria2c -s16 -x16 -k1M https://github.com/cctv18/oneplus_sm8650_toolchain/releases/download/LLVM-Clang20-r547379/clang-r547379.zip -o clang.zip &&
          unzip -q clang.zip -d clang20 &&
          rm -rf clang.zip &
          
          echo "正在克隆构建工具..." &&
          aria2c -s16 -x16 -k1M https://github.com/cctv18/oneplus_sm8650_toolchain/releases/download/LLVM-Clang20-r547379/build-tools.zip -o build-tools.zip &&
          unzip -q build-tools.zip &&
          rm -rf build-tools.zip &
          
          wait
          echo "所有源码及llvm-Clang20工具链初始化完成!"
          echo "正在去除 ABI 保护 & 去除 dirty 后缀..."
          rm common/android/abi_gki_protected_exports_* || true
          for f in common/scripts/setlocalversion; do
            sed -i 's/ -dirty//g' "$f"
            sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' "$f"
          done

      - name: 配置ccache目录
        run: |
          echo "CCACHE_DIR=$HOME/.ccache_${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}" >> $GITHUB_ENV
          echo "CCACHE_MAXSIZE=3G" >> $GITHUB_ENV
          echo "当前磁盘空间:"
          df -h
          echo "当前构建内核版本:${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}"

      - name: 载入当前版本内核的 ccache缓存
        uses: actions/cache@v5
        id: ccache-restore
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ${{ env.CCACHE_KEY }}-${{ runner.os }}-${{ github.ref_name }}
          restore-keys: |
            ${{ env.CCACHE_KEY }}-${{ runner.os }}-
            ${{ env.CCACHE_KEY }}-

      - name: 拉取公共预置 ccache 缓存
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          echo "检查本地缓存状态..."
          if [ -d "${{ env.CCACHE_DIR }}" ] && [ "$(ls -A ${{ env.CCACHE_DIR }} 2>/dev/null)" ]; then
            echo "检测到本地已成功载入 ccache 缓存,跳过公共 ccache 拉取!"
            exit 0
          fi
          
          echo "未命中缓存,尝试拉取最新公共 ccache ..."
          mkdir -p ${{ env.CCACHE_DIR }}
          FILE_NAME="ccache-${{ env.KERNEL_VERSION }}.${{ env.SUB_VERSION }}.tar.zst"
          
          if gh release download -p "$FILE_NAME" -R cctv18/public_ccache; then
            echo "成功下载 $FILE_NAME,正在解压..."
            tar -I zstd -xf "$FILE_NAME" -C ${{ env.CCACHE_DIR }}
            echo "公共 ccache 恢复完成!"
          else
            echo "公共 ccache 中未找到对应的 ccache 文件,将进行全量全新编译..."
          fi

      - name: 清除旧 ccache 缓存
        if: inputs.ccache_update
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          echo "正在清除仓库中的旧 ccache 缓存..."
          if gh cache delete ${{ env.CCACHE_KEY }}-${{ runner.os }}-${{ github.ref_name }} -R ${{ github.repository }}; then
            echo "成功删除旧的 ccache 缓存!"
          else
            echo "旧缓存不存在或已被清理!"
          fi
      
      - name: 初始化并配置ccache
        run: |
          # 设置ccache环境变量
          export CCACHE_COMPILERCHECK="none"
          export CCACHE_BASEDIR="${{ github.workspace }}"
          export CCACHE_NOHASHDIR="true"
          export CCACHE_NOHARDLINK="true"
          export CCACHE_DIR="${{ env.CCACHE_DIR }}"
          export CCACHE_MAXSIZE="${{ env.CCACHE_MAXSIZE }}"
          
          # 确保ccache目录存在
          mkdir -p "$CCACHE_DIR"
          
          # 每次运行都重新配置缓存大小
          echo "配置ccache缓存大小为: $CCACHE_MAXSIZE"
          ccache -M "$CCACHE_MAXSIZE"
          ccache -o compression=true
          
          # 显示初始缓存状态
          echo "ccache初始状态:"
          ccache -s
          
          # 如果缓存恢复命中,显示详细信息
          if [ "${{ steps.ccache-restore.outputs.cache-hit }}" == 'true' ]; then
            echo "ccache缓存命中详情:"
            ccache -sv
          fi

      - name: 添加KernelSU
        id: ksu_version
        run: |
          # 进入内核工作目录
          cd kernel_workspace
          if [[ ${{ github.event.inputs.ksu_type }} == "sukisu" ]]; then
            echo "正在配置SukiSU Ultra..."
            curl -LSs "https://raw.githubusercontent.com/ShirkNeko/SukiSU-Ultra/refs/heads/main/kernel/setup.sh" | bash -s builtin
            cd ./KernelSU
            # 获取当前 Git 提交的短哈希 (8位)
            GIT_COMMIT_HASH=$(git rev-parse --short=8 HEAD)
            echo "当前提交哈希: $GIT_COMMIT_HASH"
            export KSU_VERSION=$KSU_VERSION
            # 尝试最多 3 次获取 KernelSU API 版本号
            for i in {1..3}; do
              # 从远程 Makefile 中提取 KSU_API_VERSION
              KSU_API_VERSION=$(curl -s "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/builtin/kernel/Makefile" | 
                # 查找第一个包含版本定义的行
                grep -m1 "KSU_VERSION_API :=" | 
                # 提取等号后的值
                awk -F'= ' '{print $2}' | 
                # 删除所有空白字符
                tr -d '[:space:]')
              # 如果成功获取到版本号则跳出循环,否则等待 1 秒后重试
              [ -n "$KSU_API_VERSION" ] && break || sleep 1
            done
            # 如果获取失败,使用默认版本号 3.1.7
            [ -z "$KSU_API_VERSION" ] && KSU_API_VERSION="3.1.7"
            # 将 API 版本号存储到 GitHub 环境变量
            echo "KSU_API_VERSION=$KSU_API_VERSION" >> $GITHUB_ENV
            # 创建版本定义模板&版本格式函数: 使用获取的提交哈希和固定后缀
            # KSU_VERSION_API: API 版本定义
            # KSU_VERSION_FULL: 完整版本定义
            VERSION_DEFINITIONS=$'define get_ksu_version_full\nv\\$1-'"$GIT_COMMIT_HASH"$'@cctv18\nendef\n\nKSU_VERSION_API := '"$KSU_API_VERSION"$'\nKSU_VERSION_FULL := v'"$KSU_API_VERSION"$'-'"$GIT_COMMIT_HASH"$'@cctv18'
            # 清理内核 Makefile 中的旧版本定义
            # 删除版本函数
            sed -i '/define get_ksu_version_full/,/endef/d' kernel/Makefile
            # 删除 API 版本定义
            sed -i '/KSU_VERSION_API :=/d' kernel/Makefile
            # 删除完整版本定义
            sed -i '/KSU_VERSION_FULL :=/d' kernel/Makefile
            # 在 REPO_OWNER 行后插入新版本定义
            awk -v def="$VERSION_DEFINITIONS" '
              # 当找到 REPO_OWNER 行时,插入版本定义并设置标记
              /REPO_OWNER :=/ {print; print def; inserted=1; next}
              # 打印所有行
              1
              # 如果未找到插入点,在文件末尾追加
              END {if (!inserted) print def}
            ' kernel/Makefile > kernel/Makefile.tmp && mv kernel/Makefile.tmp kernel/Makefile

            # 生成自定义版本号(基于提交计数), 失败时使用 114514
            KSU_VERSION=$(expr $(git rev-list --count main) + 37185 2>/dev/null || echo 114514)
            # 存储版本号到 GitHub 环境变量
            echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
            echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT

            # 验证修改结果
            grep -A10 "REPO_OWNER" kernel/Makefile  # 检查插入点后的内容
            grep "KSU_VERSION_FULL" kernel/Makefile # 确认版本定义存在
            echo "SukiSU版本号: v${KSU_API_VERSION}-${GIT_COMMIT_HASH}@cctv18"
          elif [[ ${{ github.event.inputs.ksu_type }} == "resukisu" ]]; then
            echo "正在配置ReSukiSU..."
            curl -LSs "https://raw.githubusercontent.com/ReSukiSU/ReSukiSU/refs/heads/main/kernel/setup.sh" | bash -s main
            echo 'CONFIG_KSU_FULL_NAME_FORMAT="%TAG_NAME%-%COMMIT_SHA%@cctv18"' >> ./common/arch/arm64/configs/gki_defconfig
            cd ./KernelSU
            # 生成自定义版本号(基于提交计数), 失败时使用 114514
            KSU_VERSION=$(expr $(git rev-list --count main) + 30700 2>/dev/null || echo 114514)
            # 存储版本号到 GitHub 环境变量
            echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
            echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksunext" ]]; then
            echo "正在配置KernelSU Next..."
            curl -LSs "https://raw.githubusercontent.com/pershoot/KernelSU-Next/refs/heads/dev-susfs/kernel/setup.sh" | bash -s dev-susfs
            cd KernelSU-Next
            rm -rf .git
            KSU_VERSION=$(expr $(curl -sI "https://api.github.com/repos/pershoot/KernelSU-Next/commits?sha=dev&per_page=1" | grep -i "link:" | sed -n 's/.*page=\([0-9]*\)>; rel="last".*/\1/p') "+" 30000)
            echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
            echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
            sed -i "s/KSU_VERSION_FALLBACK := 1/KSU_VERSION_FALLBACK := $KSU_VERSION/g" kernel/Kbuild
            KSU_GIT_TAG=$(curl -sL "https://api.github.com/repos/KernelSU-Next/KernelSU-Next/tags" | grep -o '"name": *"[^"]*"' | head -n 1 | sed 's/"name": "//;s/"//')
            sed -i "s/KSU_VERSION_TAG_FALLBACK := v0.0.1/KSU_VERSION_TAG_FALLBACK := $KSU_GIT_TAG/g" kernel/Kbuild
            #为KernelSU Next添加WildKSU管理器支持
            cd ../common/drivers/kernelsu
            wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/other_patch/apk_sign.patch
            patch -p2 -N -F 3 < apk_sign.patch || true
          elif [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
            echo "正在配置原版 KernelSU (tiann/KernelSU)..."
            curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/refs/heads/main/kernel/setup.sh" | bash -s main
            cd ./KernelSU
            KSU_VERSION=$(expr $(curl -sI "https://api.github.com/repos/tiann/KernelSU/commits?sha=main&per_page=1" | grep -i "link:" | sed -n 's/.*page=\([0-9]*\)>; rel="last".*/\1/p') "+" 30000)
            echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
            echo "ksuver=$KSU_VERSION" >> $GITHUB_OUTPUT
            sed -i "s/DKSU_VERSION=16/DKSU_VERSION=${KSU_VERSION}/" kernel/Kbuild
          else
            echo "已选择无内置KernelSU模式,跳过KernelSU配置..."
          fi

      - name: 应用 KernelSU & SUSFS 补丁
        if: inputs.susfs_enable
        run: |
          cd kernel_workspace
          if [[ ${{ github.event.inputs.ksu_type }} != "none" ]]; then
            echo "正在添加susfs补丁..."
            git clone --depth=1 https://github.com/cctv18/susfs4oki.git susfs4ksu -b oki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}
            wget https://github.com/$GITHUB_REPOSITORY/raw/refs/heads/$GITHUB_REF_NAME/other_patch/69_hide_stuff.patch -O ./common/69_hide_stuff.patch
            cp ./susfs4ksu/kernel_patches/50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch ./common/
            cp ./susfs4ksu/kernel_patches/fs/* ./common/fs/
            cp ./susfs4ksu/kernel_patches/include/linux/* ./common/include/linux/
            cd ./common
            patch -p1 < 50_add_susfs_in_gki-${{ env.ANDROID_VERSION }}-${{ env.KERNEL_VERSION }}.patch || true
            patch -p1 -N -F 3 < 69_hide_stuff.patch || true
            cd ..
          else
            echo "已选择无内置KernelSU模式,跳过susfs配置..."
          fi
          if [[ ${{ github.event.inputs.ksu_type }} == "ksu" ]]; then
            echo "正在为原版 KernelSU (tiann/KernelSU)添加补丁..."
            cp ./susfs4ksu/kernel_patches/KernelSU/10_enable_susfs_for_ksu.patch ./KernelSU/
            cd ./KernelSU
            patch -p1 < 10_enable_susfs_for_ksu.patch || true
          fi
          
      - name: 应用lz4 1.10.0 & zstd 1.5.7补丁
        if: inputs.lz4_enable
        run: |
          echo "正在添加lz4 1.10.0 & zstd 1.5.7补丁…"
          cd kernel_workspace
          git clone --depth=1 https://github.com/$GITHUB_REPOSITORY.git -b $GITHUB_REF_NAME $GITHUB_ACTOR
          cp ./$GITHUB_ACTOR/zram_patch/001-lz4.patch ./common/
          cp ./$GITHUB_ACTOR/zram_patch/lz4armv8.S ./common/lib
          cp ./$GITHUB_ACTOR/zram_patch/002-zstd.patch ./common/
          cd ./common
          git apply -p1 < 001-lz4.patch || true
          patch -p1 < 002-zstd.patch || true

      - name: 应用 lz4kd 补丁
        if: inputs.lz4kd_enable
        run: |
          echo "正在添加lz4kd补丁…"
          cd kernel_workspace
          if [ ! -d "SukiSU_patch" ]; then
            git clone --depth=1 https://github.com/ShirkNeko/SukiSU_patch.git
          fi
          cd common
          cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./include/linux/
          cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./lib
          cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./crypto
          cp ../SukiSU_patch/other/zram/zram_patch/${{ env.KERNEL_VERSION }}/lz4kd.patch ./
          patch -p1 -F 3 < lz4kd.patch || true
          
      - name: 添加SUSFS 配置项
        if: inputs.susfs_enable
        run: |
          cd kernel_workspace
          echo "CONFIG_KSU_SUSFS=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_HAS_MAGIC_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SUS_PATH=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SUS_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_AUTO_ADD_SUS_KSU_DEFAULT_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_AUTO_ADD_SUS_BIND_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SUS_KSTAT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_TRY_UMOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_AUTO_ADD_TRY_UMOUNT_FOR_BIND_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SPOOF_UNAME=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_ENABLE_LOG=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_OPEN_REDIRECT=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_KSU_SUSFS_SUS_MAP=y" >> ./common/arch/arm64/configs/gki_defconfig
          
      - name: 添加 KSU & 其他配置项
        run: |
          cd kernel_workspace
          echo "CONFIG_KSU=y" >> ./common/arch/arm64/configs/gki_defconfig
          if [[ ${{ github.event.inputs.kpm_enable }} == 'builtin' && ( "${{ github.event.inputs.ksu_type }}" == "sukisu" || "${{ github.event.inputs.ksu_type }}" == "resukisu" ) ]]; then
            echo "CONFIG_KPM=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          if [[ "${{ github.event.inputs.susfs_enable }}" == "false" ]]; then
            echo "CONFIG_KSU_SUSFS=n" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          #添加对 Mountify (backslashxx/mountify) 模块的支持
          echo "CONFIG_TMPFS_XATTR=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_TMPFS_POSIX_ACL=y" >> ./common/arch/arm64/configs/gki_defconfig
          if [[ ${{ github.event.inputs.lz4kd_enable }} == 'true' ]]; then
            echo "CONFIG_ZSMALLOC=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_LZ4HC=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_LZ4K=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_LZ4KD=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_842=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          # 开启O2编译优化配置
          echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> ./common/arch/arm64/configs/gki_defconfig
          #禁用 defconfig 检查
          sed -i 's/check_defconfig//' ./common/build.config.gki
          #跳过将uapi标准头安装到 usr/include 目录的不必要操作,节省编译时间
          echo "CONFIG_HEADERS_INSTALL=n" >> ./common/arch/arm64/configs/gki_defconfig
          
      - name: 启用网络功能增强优化配置
        if: inputs.better_net
        run: |
          cd kernel_workspace
          #启用  BPF 流解析器,实现高性能网络流量处理,增强网络监控和分析能力
          echo "CONFIG_BPF_STREAM_PARSER=y" >> ./common/arch/arm64/configs/gki_defconfig
          #开启增强 Netfilter 防火墙扩展模块,支持基于地址类型的匹配规则,启用 IP 集合支持,提高防火墙规则灵活性,支持更复杂的流量过滤策略
          echo "CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y" >> ./common/arch/arm64/configs/gki_defconfig
          echo "CONFIG_NETFILTER_XT_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
          #启用 IP
Download .txt
gitextract_pmjp290u/

├── .github/
│   └── workflows/
│       ├── build-test.yml
│       ├── clean_workflow.yml
│       ├── cleaner.yml
│       ├── fastbuild_6.1.115.yml
│       ├── fastbuild_6.1.118.yml
│       ├── fastbuild_6.1.128.yml
│       ├── fastbuild_6.1.134.yml
│       ├── fastbuild_6.1.141.yml
│       ├── fastbuild_6.1.57.yml
│       └── fastbuild_6.1.75.yml
├── .old_yml/
│   ├── build_6.1.118.yml
│   ├── build_6.1.57.yml
│   └── build_6.1.75.yml
├── README.md
├── lib/
│   ├── ccache-arm64
│   └── ccache-x86-64
├── local/
│   ├── builder_6.1.115.sh
│   ├── builder_6.1.118.sh
│   ├── builder_6.1.128.sh
│   ├── builder_6.1.134.sh
│   ├── builder_6.1.141.sh
│   ├── builder_6.1.57.sh
│   └── builder_6.1.75.sh
├── other_patch/
│   ├── 69_hide_stuff.patch
│   ├── apk_sign.patch
│   └── config.patch
└── zram_patch/
    ├── 001-lz4-old.patch
    ├── 001-lz4.patch
    ├── 002-zstd.patch
    └── lz4armv8.S
Condensed preview — 30 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,633K chars).
[
  {
    "path": ".github/workflows/build-test.yml",
    "chars": 8904,
    "preview": "name: 发布测试\n\nenv:\n  TZ: Asia/Shanghai\n  ANDROID_VERSION: 'android14'\n  KERNEL_VERSION: '6.1'\n  SUB_VERSION: '118'\n  KERNE"
  },
  {
    "path": ".github/workflows/clean_workflow.yml",
    "chars": 3106,
    "preview": "name: 清理仓库工作流\n\non:\n  workflow_dispatch:\n    inputs:\n      clean_mode:\n        description: \"清理模式(amount--保留数量, date--保留天"
  },
  {
    "path": ".github/workflows/cleaner.yml",
    "chars": 1722,
    "preview": "name: 清理全部ccache缓存\n\non:\n  workflow_dispatch:\n    inputs:\n      confirm:\n        description: \"输入DELETE确认清理所有缓存\"\n        "
  },
  {
    "path": ".github/workflows/fastbuild_6.1.115.yml",
    "chars": 41273,
    "preview": "name: 6.1.115 (天玑特供)欧加真OKI内核快速构建\n\nenv:\n  TZ: Asia/Shanghai\n  ANDROID_VERSION: 'android14'\n  KERNEL_VERSION: '6.1'\n  SUB_"
  },
  {
    "path": ".github/workflows/fastbuild_6.1.118.yml",
    "chars": 41259,
    "preview": "name: 6.1.118 欧加真OKI内核快速构建\n\nenv:\n  TZ: Asia/Shanghai\n  ANDROID_VERSION: 'android14'\n  KERNEL_VERSION: '6.1'\n  SUB_VERSIO"
  },
  {
    "path": ".github/workflows/fastbuild_6.1.128.yml",
    "chars": 41272,
    "preview": "name: 6.1.128 (天玑特供)欧加真OKI内核快速构建\n\nenv:\n  TZ: Asia/Shanghai\n  ANDROID_VERSION: 'android14'\n  KERNEL_VERSION: '6.1'\n  SUB_"
  },
  {
    "path": ".github/workflows/fastbuild_6.1.134.yml",
    "chars": 41273,
    "preview": "name: 6.1.134 (天玑特供)欧加真OKI内核快速构建\n\nenv:\n  TZ: Asia/Shanghai\n  ANDROID_VERSION: 'android14'\n  KERNEL_VERSION: '6.1'\n  SUB_"
  },
  {
    "path": ".github/workflows/fastbuild_6.1.141.yml",
    "chars": 41275,
    "preview": "name: 6.1.141 欧加真OKI内核快速构建\n\nenv:\n  TZ: Asia/Shanghai\n  ANDROID_VERSION: 'android14'\n  KERNEL_VERSION: '6.1'\n  SUB_VERSIO"
  },
  {
    "path": ".github/workflows/fastbuild_6.1.57.yml",
    "chars": 41259,
    "preview": "name: 6.1.57 欧加真OKI内核快速构建\n\nenv:\n  TZ: Asia/Shanghai\n  ANDROID_VERSION: 'android14'\n  KERNEL_VERSION: '6.1'\n  SUB_VERSION"
  },
  {
    "path": ".github/workflows/fastbuild_6.1.75.yml",
    "chars": 41256,
    "preview": "name: 6.1.75 欧加真OKI内核快速构建\n\nenv:\n  TZ: Asia/Shanghai\n  ANDROID_VERSION: 'android14'\n  KERNEL_VERSION: '6.1'\n  SUB_VERSION"
  },
  {
    "path": ".old_yml/build_6.1.118.yml",
    "chars": 22044,
    "preview": "name: 欧加真 6.1.118 Android 15 通用OKI内核\n\nenv:\n  TZ: Asia/Shanghai\n  CPU: 'sm8650'\n  FEIL: 'oppo+oplus+realme'\n  ANDROID_VER"
  },
  {
    "path": ".old_yml/build_6.1.57.yml",
    "chars": 22033,
    "preview": "name: 欧加真 6.1.57 Android 14 通用OKI内核\n\nenv:\n  TZ: Asia/Shanghai\n  CPU: 'sm8650'\n  FEIL: 'oppo+oplus+realme'\n  ANDROID_VERS"
  },
  {
    "path": ".old_yml/build_6.1.75.yml",
    "chars": 22032,
    "preview": "name: 欧加真 6.1.75 Android 15 通用OKI内核\n\nenv:\n  TZ: Asia/Shanghai\n  CPU: 'sm8650'\n  FEIL: 'oppo+oplus+realme'\n  ANDROID_VERS"
  },
  {
    "path": "README.md",
    "chars": 5189,
    "preview": "# 欧加真 SM8650/MT6989/MT6897 系列通用6.1内核自动化编译脚本\n[![STAR](https://img.shields.io/github/stars/cctv18/oppo_oplus_realme_sm8650"
  },
  {
    "path": "local/builder_6.1.115.sh",
    "chars": 18291,
    "preview": "#!/bin/bash\nset -e\n\n# ===== 获取脚本目录 =====\nSCRIPT_DIR=\"$(cd \"$(dirname \"$0\")\" && pwd)\"\ncd \"$SCRIPT_DIR\"\n\n# ===== 设置自定义参数 ="
  },
  {
    "path": "local/builder_6.1.118.sh",
    "chars": 18273,
    "preview": "#!/bin/bash\nset -e\n\n# ===== 获取脚本目录 =====\nSCRIPT_DIR=\"$(cd \"$(dirname \"$0\")\" && pwd)\"\ncd \"$SCRIPT_DIR\"\n\n# ===== 设置自定义参数 ="
  },
  {
    "path": "local/builder_6.1.128.sh",
    "chars": 18293,
    "preview": "#!/bin/bash\nset -e\n\n# ===== 获取脚本目录 =====\nSCRIPT_DIR=\"$(cd \"$(dirname \"$0\")\" && pwd)\"\ncd \"$SCRIPT_DIR\"\n\n# ===== 设置自定义参数 ="
  },
  {
    "path": "local/builder_6.1.134.sh",
    "chars": 18291,
    "preview": "#!/bin/bash\nset -e\n\n# ===== 获取脚本目录 =====\nSCRIPT_DIR=\"$(cd \"$(dirname \"$0\")\" && pwd)\"\ncd \"$SCRIPT_DIR\"\n\n# ===== 设置自定义参数 ="
  },
  {
    "path": "local/builder_6.1.141.sh",
    "chars": 18281,
    "preview": "#!/bin/bash\nset -e\n\n# ===== 获取脚本目录 =====\nSCRIPT_DIR=\"$(cd \"$(dirname \"$0\")\" && pwd)\"\ncd \"$SCRIPT_DIR\"\n\n# ===== 设置自定义参数 ="
  },
  {
    "path": "local/builder_6.1.57.sh",
    "chars": 18284,
    "preview": "#!/bin/bash\nset -e\n\n# ===== 获取脚本目录 =====\nSCRIPT_DIR=\"$(cd \"$(dirname \"$0\")\" && pwd)\"\ncd \"$SCRIPT_DIR\"\n\n# ===== 设置自定义参数 ="
  },
  {
    "path": "local/builder_6.1.75.sh",
    "chars": 18272,
    "preview": "#!/bin/bash\nset -e\n\n# ===== 获取脚本目录 =====\nSCRIPT_DIR=\"$(cd \"$(dirname \"$0\")\" && pwd)\"\ncd \"$SCRIPT_DIR\"\n\n# ===== 设置自定义参数 ="
  },
  {
    "path": "other_patch/69_hide_stuff.patch",
    "chars": 2601,
    "preview": "--- a/fs/proc/task_mmu.c\t2024-12-17 11:21:16.646581300 -0500\n+++ b/fs/proc/task_mmu.c\t2024-12-17 11:35:36.873887048 -050"
  },
  {
    "path": "other_patch/apk_sign.patch",
    "chars": 768,
    "preview": "diff --git a/kernel/apk_sign.c b/kernel/apk_sign.c\nindex 3f2ae2d4..862e471b 100644\n--- a/kernel/apk_sign.c\t2026-01-05 21"
  },
  {
    "path": "other_patch/config.patch",
    "chars": 1217,
    "preview": "diff --git a/kernel/Makefile b/kernel/Makefile\nindex df02908..f654c9b 100644\n--- a/kernel/Makefile\n+++ b/kernel/Makefile"
  },
  {
    "path": "zram_patch/001-lz4-old.patch",
    "chars": 123362,
    "preview": "Subject: [PATCH] lz4: Update to version 1.9.4\n---\nIndex: include/linux/lz4.h\nIDEA additional info:\nSubsystem: com.intell"
  },
  {
    "path": "zram_patch/001-lz4.patch",
    "chars": 379987,
    "preview": "Subject: [PATCH] incfs: Use ARM64 v8 ASM to accelerate lz4 decompression\ncrypto: lz4: Use ARM64 v8 ASM to accelerate dec"
  },
  {
    "path": "zram_patch/002-zstd.patch",
    "chars": 1436011,
    "preview": "Subject: [PATCH] Changes\n---\nIndex: lib/zstd/compress/zstd_ldm_geartab.h\nIDEA additional info:\nSubsystem: com.intellij.o"
  },
  {
    "path": "zram_patch/lz4armv8.S",
    "chars": 8088,
    "preview": "/*\n * lz4armv8.S\n * LZ4 decompression optimization based on arm64 NEON instruction\n */\n\n#include <linux/linkage.h>\n#incl"
  }
]

// ... and 2 more files (download for full content)

About this extraction

This page contains the full source code of the cctv18/oppo_oplus_realme_sm8650 GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 30 files (2.3 MB), approximately 614.9k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!