Full Code of Xiaomichael/OnePlus-Actions for AI

Build 9fe3ed5d16cf cached
14 files
221.3 KB
71.2k tokens
6 symbols
1 requests
Download .txt
Showing preview only (245K chars total). Download the full file or copy to clipboard to get everything.
Repository: Xiaomichael/OnePlus-Actions
Branch: Build
Commit: 9fe3ed5d16cf
Files: 14
Total size: 221.3 KB

Directory structure:
gitextract_8shsx1ht/

├── .github/
│   └── workflows/
│       ├── Build Kernel Only.yml
│       ├── Build KernelSU Next.yml
│       ├── Build KernelSU.yml
│       ├── Build ReSukiSU.yml
│       ├── Build SukiSU Ultra.yml
│       ├── Clean_ccache.yml
│       └── Clean_workflows.yml
├── README.md
├── local/
│   ├── Build_KernelSU.sh
│   ├── Build_Next.sh
│   ├── Build_Only.sh
│   ├── Build_ReSukiSU.sh
│   └── Build_SukiSU.sh
└── script/
    └── buildbot.py

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

================================================
FILE: .github/workflows/Build Kernel Only.yml
================================================
name: Build Kernel Only
on:
  workflow_dispatch:
    inputs:
    
      CPU:
        description: "CPU分支"
        required: true
        type: choice
        options:
          - 'sm8750'
          - 'sm8735'
          - 'mt6991'
          - 'sm8650'
          - 'mt6989'
          - 'sm8635'
          - 'sm8550'
          - 'sm8450'
          - 'sm8475'
          - 'sm7675'
          - 'sm7635'
          - 'sm7550'
          - 'sm6375'
        default: 'sm8650'
        
      FEIL:
        description: "手机型号"
        required: true
        type: choice
        options:
          - 'oneplus_13_b'
          - 'oneplus_13s_b'
          - 'oneplus_13t_b'
          - 'oneplus_ace5_pro_b'
          - 'oneplus_ace_6'
          - 'oneplus_pad_2_pro_b'
          - 'oneplus_pad_3_b'
          - 'oneplus_ace5_ultra_b'
          - 'oneplus_turbo_6'
          - 'oneplus_12_b'
          - 'oneplus_ace3_pro_b'
          - 'oneplus_ace5_b'
          - 'oneplus_13r_b'
          - 'oneplus_pad2_b'
          - 'oneplus_pad_pro_b'
          - 'oneplus_ace5_race_b'
          - 'oneplus_nord_5_b'
          - 'oneplus_11_b'
          - 'oneplus_12r_b'
          - 'oneplus_ace2_pro_b'
          - 'oneplus_ace3_b'
          - 'oneplus_open_b'
          - 'oneplus_10t_v'
          - 'oneplus_11r_b'
          - 'oneplus_ace2_b'
          - 'oneplus_ace_pro_v'
          - 'oneplus_10_pro_b'
          - 'oneplus_ace_3v_b'
          - 'oneplus_turbo_6v'
          - 'oneplus_nord_4_b'
          - 'oneplus_nord_ce4_lite_5g'
          - 'oneplus_nord_ce4_b'
        default: 'oneplus_12_b'
        
      ANDROID_VERSION:
        description: "内核安卓KMI版本"
        required: true
        type: choice
        options:
          - 'android15'
          - 'android14'
          - 'android13'
          - 'android12'
        default: 'android14'
        
      KERNEL_VERSION:
        description: "内核版本"
        required: true
        type: choice
        options:
          - '6.6'
          - '6.1'
          - '5.15'
          - '5.10'
        default: '6.1'
       
      lz4kd:
        description: "是否启用lz4kd(6.1 关闭时使用 lz4 + zstd; 6.6 关闭时使用 lz4)"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'Off'

      bbg:
        description: "是否启用BBG基带保护"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'On'
       
      bbr:
        description: "是否启用BBR算法(对手机日用无太大意义甚至可能负优化)"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'Off'

      proxy:
        description: "是否添加代理性能优化(联发科芯片跑的时候请关闭否则出现恶性问题)"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'On'

      UNICODE_BYPASS:
        description: "是否添加Unicode零宽绕过修复补丁(高内核版本不推荐开启, 建议使用 https://t.me/real5ec1cff/271 无痛修复)"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'Off'
         
jobs:
  build:
    name: For ${{ github.event.inputs.FEIL }} lz4kd ${{ github.event.inputs.lz4kd }}
    runs-on: ubuntu-latest
    env:
      CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion"
      CCACHE_NOHASHDIR: "true"
      CCACHE_HARDLINK: "true"
      CCACHE_MAXSIZE: 8G
      
    steps:
      - name: "🚀 Maximize Build Space | 最大化构建空间"
        if: ${{ github.event.inputs.KERNEL_VERSION == '5.10' || github.event.inputs.KERNEL_VERSION == '5.15' }}
        uses: easimon/maximize-build-space@master
        with:
          root-reserve-mb: 8192
          temp-reserve-mb: 4096
          remove-dotnet: 'true'
          remove-android: 'true'
          remove-haskell: 'true'
          remove-codeql: 'true'

      - name: "⚙️ Setup Cache Env | 设置缓存环境"
        run: |
          echo "🔧 正在设置机型隔离缓存目录..."
          echo "CCACHE_DIR=$HOME/.ccache_${{ github.event.inputs.FEIL }}_Kernel" >> $GITHUB_ENV
          mkdir -p "$HOME/.ccache_${{ github.event.inputs.FEIL }}_Kernel"
          echo "✅ 缓存目录已设置: $HOME/.ccache_${{ github.event.inputs.FEIL }}_Kernel"

      - name: "🔐 Configure Git | 配置Git账户"
        run: |
          echo "🔧 正在配置Git用户信息..."
          git config --global user.name "build"
          git config --global user.email "2210077278@qq.com"
          echo "✅ Git配置完成"

      - name: "📦 Cache & Install Dependencies | 缓存 & 安装构建依赖"
        uses: awalsh128/cache-apt-pkgs-action@latest 
        with: 
          packages: python3 git curl ccache libelf-dev build-essential flex bison libssl-dev libncurses-dev liblz4-tool zlib1g-dev libxml2-utils rsync unzip gawk dos2unix
          execute_install_scripts: true

      - name: "💾 Restore ccache | 恢复ccache缓存"
        uses: actions/cache@v5
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ccache-${{ runner.os }}-${{ github.ref }}-${{ github.event.inputs.FEIL }}-Kernel
          restore-keys: |
            ccache-${{ runner.os }}-${{ github.event.inputs.FEIL }}-Kernel
            ccache-${{ runner.os }}-Kernel

      - name: "⚙️ Initialize ccache | 初始化ccache"
        run: |
          echo "🔧 正在初始化ccache..."
          INIT_FLAG="${{ env.CCACHE_DIR }}/.ccache_initialized"
          
          if command -v ccache >/dev/null 2>&1; then
            if [ ! -f "$INIT_FLAG" ]; then
              mkdir -p "${{ env.CCACHE_DIR }}"
              ccache -M ${{ env.CCACHE_MAXSIZE }}
              touch "$INIT_FLAG"
              echo "🆕 ccache初始化完成"
            else
              echo "ℹ️ ccache已存在,跳过初始化"
            fi
          else
            echo "⚠️ 未找到ccache命令,跳过初始化"
          fi
          # 显示缓存统计
          ccache -s
          echo "✅ ccache初始化流程完成"

      - name: "📥 Install Repo Tool | 安装Repo工具"
        run: |
          echo "⬇️ 正在下载repo工具..."
          curl -fsSL https://storage.googleapis.com/git-repo-downloads/repo > ~/repo
          chmod a+x ~/repo
          sudo mv ~/repo /usr/local/bin/repo
          echo "✅ repo工具安装完成"

      - name: "⬇️ Clone Kernel Source | 克隆内核源码"
        run: |
          echo "🌐 正在初始化内核仓库..."
          mkdir kernel_workspace && cd kernel_workspace
         
          repo init -u https://github.com/Xiaomichael/kernel_manifest.git -b refs/heads/oneplus/${{ github.event.inputs.CPU }} -m ${{ github.event.inputs.FEIL }}.xml --depth=1

          echo "🔄 同步代码库(使用$(nproc --all)线程)..."
          repo sync -c -j$(nproc --all) --no-tags --no-clone-bundle --force-sync
          
          rm kernel_platform/common/android/abi_gki_protected_exports_* || echo "No protected exports!"
          rm kernel_platform/msm-kernel/android/abi_gki_protected_exports_* || echo "No protected exports!"

          # Remove -dirty in kernel version
          sed -i 's/ -dirty//g' kernel_platform/common/scripts/setlocalversion
          sed -i 's/ -dirty//g' kernel_platform/msm-kernel/scripts/setlocalversion
          sed -i 's/ -dirty//g' kernel_platform/external/dtc/scripts/setlocalversion
          sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/common/scripts/setlocalversion
          sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/msm-kernel/scripts/setlocalversion
          sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/external/dtc/scripts/setlocalversion

          if [ "${{ github.event.inputs.KERNEL_VERSION }}" != "6.6" ]; then
            sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/common/scripts/setlocalversion            
            sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/msm-kernel/scripts/setlocalversion
            sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/external/dtc/scripts/setlocalversion
          else
            ESCAPED_SUFFIX=$(printf '%s\n' "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow" | sed 's:[\/&]:\\&:g')
            sudo sed -i "s/-4k/$ESCAPED_SUFFIX/g" kernel_platform/common/arch/arm64/configs/gki_defconfig
            sed -i 's/${scm_version}//' kernel_platform/common/scripts/setlocalversion
            sed -i 's/${scm_version}//' kernel_platform/msm-kernel/scripts/setlocalversion
          fi

          echo "✅ 内核配置完成"

      - name: "⚡ Setup Baseband-guard | 配置 Baseband-guard"
        if: ${{ github.event.inputs.bbg == 'On' }}
        run: |
          set -e
          cd kernel_workspace/kernel_platform/common
          curl -sSL https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh -o setup.sh
          bash setup.sh

      - name: "🔧 Setup ZRAM | 配置 ZRAM"
        run: |
          cd kernel_workspace
          echo "⬇️ 下载ZRAM补丁..."
          git clone https://github.com/Xiaomichael/kernel_patches.git
          git clone https://github.com/ShirkNeko/SukiSU_patch.git
          
          cd kernel_platform
          echo "📝 复制补丁文件..."
          cp ../kernel_patches/zram_patches/001-lz4.patch ./common/
          cp ../kernel_patches/zram_patches/lz4armv8.S ./common/lib
          cp ../kernel_patches/zram_patches/002-zstd.patch ./common/

          if [ "${{ github.event.inputs.UNICODE_BYPASS }}" = "On" ]; then
            if [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
              cp ../kernel_patches/common/unicode_bypass_fix_6.1+.patch ./common/unicode_bypass_fix.patch
            elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.15" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.10" ]; then
              cp ../kernel_patches/common/unicode_bypass_fix_6.1-.patch ./common/unicode_bypass_fix.patch
            fi
          fi
          
          if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
            # Copy lz4k from ShirkNeko
            cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./common/include/linux
            cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./common/lib
            cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./common/crypto
            cp -r ../SukiSU_patch/other/zram/lz4k_oplus ./common/lib/
          fi
          
          echo "🔧 应用补丁..."
          
          cd ./common
          
          if [ "${{ github.event.inputs.UNICODE_BYPASS }}" = "On" ]; then
            echo "📦 正在应用Unicode零宽绕过修复补丁..."
            patch -p1 < unicode_bypass_fix.patch
          fi

          if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
            echo "📦 应用lz4+zstd补丁..."
            git apply -p1 < 001-lz4.patch || true
            patch -p1 < 002-zstd.patch || true
          fi

          if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
            echo "📦 应用lz4补丁..."
            git apply -p1 < 001-lz4.patch || true
          fi
          
          if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
            echo "🚀 应用lz4kd补丁..."
            cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4kd.patch ./
            patch -p1 -F 3 < lz4kd.patch || true
            cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4k_oplus.patch ./
            patch -p1 -F 3 < lz4k_oplus.patch || true
          fi
          
          echo "✅ 所有补丁应用完成"

      - name: "⚙️ Apply SCHED Patch | 应用风驰补丁"
        if: ${{ github.event.inputs.KERNEL_VERSION == '6.6' }}
        run: |
          cd kernel_workspace/kernel_platform/common
          echo "⬇️ 正在拉取风驰补丁"          
          if [ "${{ github.event.inputs.FEIL }}" == "oneplus_ace5_ultra" ] || [ "${{ github.event.inputs.FEIL }}" = "oneplus_ace5_ultra_b" ]; then
              git clone https://github.com/Numbersf/SCHED_PATCH.git -b "mt6991"
          else
              git clone https://github.com/Numbersf/SCHED_PATCH.git -b "sm8750"
          fi
          cp ./SCHED_PATCH/fengchi_${{ github.event.inputs.FEIL }}.patch ./
          if [[ -f "fengchi_${{ github.event.inputs.FEIL }}.patch" ]]; then
            echo "⚙️ 开始应用风驰补丁"
            dos2unix "fengchi_${{ github.event.inputs.FEIL }}.patch"
            patch -p1 -F 3 < "fengchi_${{ github.event.inputs.FEIL }}.patch"
            echo "✅ 完美风驰补丁应用完成"
          else
            sed -i '1iobj-y += hmbird_patch.o' drivers/Makefile
            wget https://github.com/Numbersf/Action-Build/raw/SukiSU-Ultra/patches/hmbird_patch.patch
            echo "⚙️ 正在打OGKI转换GKI补丁"
            patch -p1 -F 3 < hmbird_patch.patch
            echo "✅ OGKI转换GKI_patch完成"
          fi

      - name: "⚙️ Configure Kernel Options | 配置内核选项"
        run: |
          echo "⚙️ 正在配置内核编译选项..."
          
          cd kernel_workspace/kernel_platform

          if [ "${{ github.event.inputs.bbg }}" == "On" ]; then
            echo "⚡ 启用BBG中..."
            echo 'CONFIG_BBG=y' >> ./common/arch/arm64/configs/gki_defconfig
            echo 'CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf,baseband_guard"' >> ./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.bbr }}" == "On" ]; then
            echo "🌐 启用BBR网络算法..."
            echo "CONFIG_TCP_CONG_ADVANCED=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_TCP_CONG_BBR=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_NET_SCH_FQ=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_TCP_CONG_BIC=n" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_TCP_CONG_WESTWOOD=n" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_TCP_CONG_HTCP=n" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          
          if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
            echo "📦 启用lz4kd压缩..."
            echo "CONFIG_CRYPTO_LZ4KD=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_LZ4K_OPLUS=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_ZRAM_WRITEBACK=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          
          if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.6" ]; then
            # Add O2 config
            echo "📦 为6.1&6.6加入O2优化..."
            echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi

          if [ "${{ github.event.inputs.proxy }}" == "On" ]; then
            # Add proxy config
            echo "📦 加入代理优化..."
            echo "CONFIG_BPF_STREAM_PARSER=y" >> ./common/arch/arm64/configs/gki_defconfig
            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
            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
            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
          fi
          
          if [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.10" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.15" ]; then
            echo "📦 正在为5.10系与5.15系配置lto中..."
            DEFCONFIG=./common/arch/arm64/configs/gki_defconfig
            sed -i 's/^CONFIG_LTO=n/CONFIG_LTO=y/' "$DEFCONFIG"
            sed -i 's/^CONFIG_LTO_CLANG_FULL=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
            sed -i 's/^CONFIG_LTO_CLANG_NONE=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
            grep -q '^CONFIG_LTO_CLANG_THIN=y' "$DEFCONFIG" || echo 'CONFIG_LTO_CLANG_THIN=y' >> "$DEFCONFIG"
          fi

          #跳过将uapi标准头安装到 usr/include 目录的不必要操作,节省编译时间
          echo "CONFIG_HEADERS_INSTALL=n" >> ./common/arch/arm64/configs/gki_defconfig

          # Remove check_defconfig
          sed -i 's/check_defconfig//' ./common/build.config.gki
          echo "✅ 内核配置更新完成"
          
      - name: "🔨 Build Kernel | 编译内核"
        run: |
          echo "🏗️ 开始内核编译..."
          export KBUILD_BUILD_USER="xiaoxiaow"
          export KBUILD_BUILD_HOST="xiaoxiaow_build"

          if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ]; then
            export KBUILD_BUILD_TIMESTAMP="Tue Mar 10 03:53:33 UTC 2026"
            export KBUILD_BUILD_VERSION=1
            export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH"
            export PATH="/usr/lib/ccache:$PATH"
            sudo apt install libelf-dev
            cd kernel_workspace/kernel_platform/common
            make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2 gki_defconfig all

          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.6" ]; then
            export PATH="/usr/lib/ccache:$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r510928/bin:$PATH" 
            export PATH="/usr/lib/ccache:$PATH"
            sudo apt install libelf-dev
            cd kernel_workspace/kernel_platform/common
            make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2  gki_defconfig all            
          
          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.15" ]; then
            export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r450784e/bin:$PATH"
            export PATH="/usr/lib/ccache:$PATH"
            sudo apt install libelf-dev
            cd kernel_workspace/kernel_platform/common
            make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
            
          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.10" ]; then
            export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts-master/clang/host/linux-x86/clang-r416183b/bin:$PATH"
            export PATH="/usr/lib/ccache:$PATH"
            sudo apt install libelf-dev
            cd kernel_workspace/kernel_platform/common
            make -j$(nproc --all) LLVM_IAS=1 LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
          fi
          
          # 显示ccache统计信息
          ccache -s
          echo "✅ 内核编译完成"
          
      - name: "📦 Package Kernel | 打包内核"
        run: |
          echo "📦 准备AnyKernel3打包环境..."
          git clone https://github.com/Xiaomichael/AnyKernel3 --depth=1
          rm -rf ./AnyKernel3/.git
          mkdir -p kernel_workspace/kernel_platform/out/Final-Image-Find/
          dir1=""
          dir2=""
          image_path=$(find "./kernel_workspace/kernel_platform/common/out/" -name "Image" | head -n 1)
          if [ -n "$image_path" ]; then
            dir1=$(dirname "$image_path")/
            echo "✅ 成功找到 Image 文件"
          fi
          if [ -n "$image_path" ] && [ -f "$image_path" ]; then
            echo "Image file finally located at: $image_path"
            cp "$image_path" ./AnyKernel3/Image
            cp "$image_path" kernel_workspace/kernel_platform/out/Final-Image-Find/Image
          fi

      - name: "🧠 Set Artifact Name | 设置产物名称"
        id: set_name
        run: |
          if [ "${{ github.event.inputs.lz4kd }}" = "On" ]; then
            echo "ARTIFACT_NAME=Anykernel3_${{ github.event.inputs.FEIL }}_lz4kd_Kernel_Only" >> $GITHUB_OUTPUT
          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
            echo "ARTIFACT_NAME=Anykernel3_${{ github.event.inputs.FEIL }}_lz4_zstd_Kernel_Only" >> $GITHUB_OUTPUT
          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
            echo "ARTIFACT_NAME=Anykernel3_${{ github.event.inputs.FEIL }}_lz4_Kernel_Only" >> $GITHUB_OUTPUT
          else
            echo "ARTIFACT_NAME=Anykernel3_${{ github.event.inputs.FEIL }}_Kernel_Only" >> $GITHUB_OUTPUT
          fi

      - name: "📤 Upload AnyKernel3 | 上传 AnyKernel3"
        uses: actions/upload-artifact@v7
        with:
          name: ${{ steps.set_name.outputs.ARTIFACT_NAME }}
          path: ./AnyKernel3/*
         
      - name: "📝 Find zram.ko & crypto_zstdn.ko | 查找 zram.ko & crypto_zstdn.ko"
        # if: ${{ github.event.inputs.lz4kd == 'On' }}
        run: |
          find -name zram.ko
          find -name crypto_zstdn.ko
          
      - name: "📤 Upload zram.ko | 上传 zram.ko"
        # if: ${{ github.event.inputs.lz4kd == 'On' }}
        uses: actions/upload-artifact@v7
        with:
          name: ${{ github.event.inputs.FEIL }}_zram.ko
          path: ./kernel_workspace/kernel_platform/common/out/drivers/block/zram/zram.ko


================================================
FILE: .github/workflows/Build KernelSU Next.yml
================================================
name: Build KernelSU Next
on:
  workflow_dispatch:
    inputs:
    
      CPU:
        description: "CPU分支"
        required: true
        type: choice
        options:
          - 'sm8750'
          - 'sm8735'
          - 'mt6991'
          - 'sm8650'
          - 'mt6989'
          - 'sm8635'
          - 'sm8550'
          - 'sm8450'
          - 'sm8475'
          - 'sm7675'
          - 'sm7635'
          - 'sm7550'
          - 'sm6375'
        default: 'sm8650'
        
      FEIL:
        description: "手机型号"
        required: true
        type: choice
        options:
          - 'oneplus_13_b'
          - 'oneplus_13s_b'
          - 'oneplus_13t_b'
          - 'oneplus_ace5_pro_b'
          - 'oneplus_ace_6'
          - 'oneplus_pad_2_pro_b'
          - 'oneplus_pad_3_b'
          - 'oneplus_ace5_ultra_b'
          - 'oneplus_turbo_6'
          - 'oneplus_12_b'
          - 'oneplus_ace3_pro_b'
          - 'oneplus_ace5_b'
          - 'oneplus_13r_b'
          - 'oneplus_pad2_b'
          - 'oneplus_pad_pro_b'
          - 'oneplus_ace5_race_b'
          - 'oneplus_nord_5_b'
          - 'oneplus_11_b'
          - 'oneplus_12r_b'
          - 'oneplus_ace2_pro_b'
          - 'oneplus_ace3_b'
          - 'oneplus_open_b'
          - 'oneplus_10t_v'
          - 'oneplus_11r_b'
          - 'oneplus_ace2_b'
          - 'oneplus_ace_pro_v'
          - 'oneplus_10_pro_b'
          - 'oneplus_ace_3v_b'
          - 'oneplus_turbo_6v'
          - 'oneplus_nord_4_b'
          - 'oneplus_nord_ce4_lite_5g'
          - 'oneplus_nord_ce4_b'
        default: 'oneplus_12_b'
        
      ANDROID_VERSION:
        description: "内核安卓KMI版本"
        required: true
        type: choice
        options:
          - 'android15'
          - 'android14'
          - 'android13'
          - 'android12'
        default: 'android14'
        
      KERNEL_VERSION:
        description: "内核版本"
        required: true
        type: choice
        options:
          - '6.6'
          - '6.1'
          - '5.15'
          - '5.10'
        default: '6.1'

      SUSFS:
        description: "是否启用SUSFS"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'Off'

      lz4kd:
        description: "是否启用lz4kd(6.1 关闭时使用 lz4 + zstd; 6.6 关闭时使用 lz4)"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'Off'

      bbg:
        description: "是否启用BBG基带保护"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'On'
       
      bbr:
        description: "是否启用BBR算法(对手机日用无太大意义甚至可能负优化)"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'Off'

      proxy:
        description: "是否添加代理性能优化(联发科芯片跑的时候请关闭否则出现恶性问题)"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'On'

      UNICODE_BYPASS:
        description: "是否添加Unicode零宽绕过修复补丁(高内核版本不推荐开启, 建议使用 https://t.me/real5ec1cff/271 无痛修复)"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'Off'
        
jobs:
  build:
    name: For ${{ github.event.inputs.FEIL }} lz4kd ${{ github.event.inputs.lz4kd }} SUSFS ${{ github.event.inputs.SUSFS }}
    runs-on: ubuntu-latest
    env:
      CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion"
      CCACHE_NOHASHDIR: "true"
      CCACHE_HARDLINK: "true"
      CCACHE_MAXSIZE: 8G
      
    steps:
      - name: "🚀 Maximize Build Space | 最大化构建空间"
        if: ${{ github.event.inputs.KERNEL_VERSION == '5.10' || github.event.inputs.KERNEL_VERSION == '5.15' }}
        uses: easimon/maximize-build-space@master
        with:
          root-reserve-mb: 8192
          temp-reserve-mb: 4096
          remove-dotnet: 'true'
          remove-android: 'true'
          remove-haskell: 'true'
          remove-codeql: 'true'

      - name: "⚙️ Setup Cache Env | 设置缓存环境"
        run: |
          echo "🔧 正在设置机型隔离缓存目录..."
          echo "CCACHE_DIR=$HOME/.ccache_${{ github.event.inputs.FEIL }}_Next" >> $GITHUB_ENV
          mkdir -p "$HOME/.ccache_${{ github.event.inputs.FEIL }}_Next"
          echo "✅ 缓存目录已设置: $HOME/.ccache_${{ github.event.inputs.FEIL }}_Next" 

      - name: "🔐 Configure Git | 配置Git账户"
        run: |
          echo "🔧 正在配置Git用户信息..."
          git config --global user.name "build"
          git config --global user.email "2210077278@qq.com"
          echo "✅ Git配置完成"

      - name: "📦 Cache & Install Dependencies | 缓存 & 安装构建依赖"
        uses: awalsh128/cache-apt-pkgs-action@latest 
        with: 
          packages: python3 git curl ccache libelf-dev build-essential flex bison libssl-dev libncurses-dev liblz4-tool zlib1g-dev libxml2-utils rsync unzip gawk dos2unix
          execute_install_scripts: true
         
      - name: "💾 Restore ccache (With SUSFS) | 恢复ccache缓存 (With SUSFS)"
        if: ${{ github.event.inputs.SUSFS == 'On' }}
        uses: actions/cache@v5
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ccache-${{ runner.os }}-${{ github.ref }}-${{ github.event.inputs.FEIL }}-Next-SUSFS
          restore-keys: |
            ccache-${{ runner.os }}-${{ github.event.inputs.FEIL }}-Next-SUSFS
            ccache-${{ runner.os }}-Next-SUSFS

      - name: "💾 Restore ccache (Without SUSFS) | 恢复ccache缓存 (Without SUSFS)"
        if: ${{ github.event.inputs.SUSFS == 'Off' }}
        uses: actions/cache@v5
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ccache-${{ runner.os }}-${{ github.ref }}-${{ github.event.inputs.FEIL }}-Next-NoSUSFS
          restore-keys: |
            ccache-${{ runner.os }}-${{ github.event.inputs.FEIL }}-Next-NoSUSFS
            ccache-${{ runner.os }}-Next-NoSUSFS

      - name: "⚙️ Initialize ccache | 初始化ccache"
        run: |
          echo "🔧 正在初始化ccache..."
          INIT_FLAG="${{ env.CCACHE_DIR }}/.ccache_initialized"
          
          if command -v ccache >/dev/null 2>&1; then
            if [ ! -f "$INIT_FLAG" ]; then
              mkdir -p "${{ env.CCACHE_DIR }}"
              ccache -M ${{ env.CCACHE_MAXSIZE }}
              touch "$INIT_FLAG"
              echo "🆕 ccache初始化完成"
            else
              echo "ℹ️ ccache已存在,跳过初始化"
            fi
          else
            echo "⚠️ 未找到ccache命令,跳过初始化"
          fi
          # 显示缓存统计
          ccache -s
          echo "✅ ccache初始化流程完成"

      - name: "📥 Install Repo Tool | 安装Repo工具"
        run: |
          echo "⬇️ 正在下载repo工具..."
          curl -fsSL https://storage.googleapis.com/git-repo-downloads/repo > ~/repo
          chmod a+x ~/repo
          sudo mv ~/repo /usr/local/bin/repo
          echo "✅ repo工具安装完成"

      - name: "⬇️ Clone Kernel Source | 克隆内核源码"
        run: |
          mkdir kernel_workspace && cd kernel_workspace

          echo "🌐 正在初始化内核仓库..."
          repo init -u https://github.com/Xiaomichael/kernel_manifest.git -b refs/heads/oneplus/${{ github.event.inputs.CPU }} -m ${{ github.event.inputs.FEIL }}.xml --depth=1

          echo "🔄 同步代码库(使用$(nproc --all)线程)..."
          repo sync -c -j$(nproc --all) --no-tags --no-clone-bundle --force-sync
          
          rm kernel_platform/common/android/abi_gki_protected_exports_* || echo "No protected exports!"
          rm kernel_platform/msm-kernel/android/abi_gki_protected_exports_* || echo "No protected exports!"
          
          # Remove -dirty in kernel version
          sed -i 's/ -dirty//g' kernel_platform/common/scripts/setlocalversion
          sed -i 's/ -dirty//g' kernel_platform/msm-kernel/scripts/setlocalversion
          sed -i 's/ -dirty//g' kernel_platform/external/dtc/scripts/setlocalversion
          sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/common/scripts/setlocalversion
          sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/msm-kernel/scripts/setlocalversion
          sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/external/dtc/scripts/setlocalversion

          if [ "${{ github.event.inputs.KERNEL_VERSION }}" != "6.6" ]; then
            sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/common/scripts/setlocalversion            
            sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/msm-kernel/scripts/setlocalversion
            sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/external/dtc/scripts/setlocalversion
          else
            ESCAPED_SUFFIX=$(printf '%s\n' "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow" | sed 's:[\/&]:\\&:g')
            sudo sed -i "s/-4k/$ESCAPED_SUFFIX/g" kernel_platform/common/arch/arm64/configs/gki_defconfig
            sed -i 's/${scm_version}//' kernel_platform/common/scripts/setlocalversion
            sed -i 's/${scm_version}//' kernel_platform/msm-kernel/scripts/setlocalversion
          fi

          echo "✅ 内核配置完成"
                
      - name: "⚡ Setup Baseband-guard | 配置 Baseband-guard"
        if: ${{ github.event.inputs.bbg == 'On'}}
        run: |
          set -e
          cd kernel_workspace/kernel_platform/common
          echo "🛠️ 正在设置BBG..."
          curl -sSL https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh -o setup.sh
          bash setup.sh
          
      - name: "⚡ Setup KernelSU Next | 配置 KernelSU Next"
        run: |
          cd kernel_workspace/kernel_platform
          # 下载并执行设置脚本
          echo "🛠️ 正在设置KernelSU Next..."
          curl -LSs "https://raw.githubusercontent.com/pershoot/KernelSU-Next/dev-susfs/kernel/setup.sh" | bash -s dev-susfs

          cd KernelSU-Next
          KSU_VERSION=$(expr $(curl -sI "https://api.github.com/repos/KernelSU-Next/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
          sed -i "s/DKSU_VERSION=11998/DKSU_VERSION=${KSU_VERSION}/" kernel/Makefile

          echo "✅ KernelSU Next 配置完成"
        
      - name: "🔧 Setup Patches | 配置补丁"
        run: |
          cd kernel_workspace

          echo "⬇️ 下载所需补丁..."
          if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then          
            git clone https://github.com/cctv18/susfs4oki.git -b oki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}
          fi
          git clone https://github.com/Xiaomichael/kernel_patches.git
          git clone https://github.com/ShirkNeko/SukiSU_patch.git

          cd kernel_platform
          echo "📝 复制补丁文件..."
          if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
            cp ../susfs4oki/kernel_patches/50_add_susfs_in_gki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}.patch ./common/
            cp ../susfs4oki/kernel_patches/fs/* ./common/fs/
            cp ../susfs4oki/kernel_patches/include/linux/* ./common/include/linux/
          else
            cp ../kernel_patches/sukisu/scope_min_manual_hooks_v1.9.patch ./common/
          fi

          cp ../kernel_patches/zram_patches/001-lz4.patch ./common/
          cp ../kernel_patches/zram_patches/lz4armv8.S ./common/lib
          cp ../kernel_patches/zram_patches/002-zstd.patch ./common/
          
          if [ "${{ github.event.inputs.UNICODE_BYPASS }}" = "On" ]; then
            if [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
              cp ../kernel_patches/common/unicode_bypass_fix_6.1+.patch ./common/unicode_bypass_fix.patch
            elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.15" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.10" ]; then
              cp ../kernel_patches/common/unicode_bypass_fix_6.1-.patch ./common/unicode_bypass_fix.patch
            fi
          fi

          if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
            # Copy lz4k from ShirkNeko
            cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./common/include/linux
            cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./common/lib
            cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./common/crypto
            cp -r ../SukiSU_patch/other/zram/lz4k_oplus ./common/lib/
          fi
          
          echo "🔧 应用补丁..."
          cd ./common

          if [ "${{ github.event.inputs.UNICODE_BYPASS }}" = "On" ]; then
            echo "📦 正在应用Unicode零宽绕过修复补丁..."
            patch -p1 < unicode_bypass_fix.patch
          fi
          
          if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
            echo "📦 应用lz4+zstd补丁..."
            git apply -p1 < 001-lz4.patch || true
            patch -p1 < 002-zstd.patch || true
          fi

          if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
            echo "📦 应用lz4补丁..."
            git apply -p1 < 001-lz4.patch || true
          fi
          
          if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
            echo "🚀 应用lz4kd补丁..."
            cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4kd.patch ./
            patch -p1 -F 3 < lz4kd.patch || true
            cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4k_oplus.patch ./
            patch -p1 -F 3 < lz4k_oplus.patch || true
          fi

          if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then 
            echo "📦 应用SUSFS补丁..."
            patch -p1 < 50_add_susfs_in_gki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}.patch || true
            cp ../../kernel_patches/69_hide_stuff.patch ./
            patch -p1 -F 3 < 69_hide_stuff.patch
          else
            echo "📦 应用MANUAL_HOOK补丁..."
            patch -p1 --fuzz=3 < scope_min_manual_hooks_v1.9.patch
          fi

          echo "✅ 所有补丁应用完成"

      - name: "⚙️ Apply SCHED Patch | 应用风驰补丁"
        if: ${{ github.event.inputs.KERNEL_VERSION == '6.6' }}
        run: |
          cd kernel_workspace/kernel_platform/common
          echo "⬇️ 正在拉取风驰补丁"
          if [ "${{ github.event.inputs.FEIL }}" == "oneplus_ace5_ultra" ] || [ "${{ github.event.inputs.FEIL }}" = "oneplus_ace5_ultra_b" ]; then
              git clone https://github.com/Numbersf/SCHED_PATCH.git -b "mt6991"
          else
              git clone https://github.com/Numbersf/SCHED_PATCH.git -b "sm8750"
          fi
          cp ./SCHED_PATCH/fengchi_${{ github.event.inputs.FEIL }}.patch ./
          if [[ -f "fengchi_${{ github.event.inputs.FEIL }}.patch" ]]; then
            echo "⚙️ 开始应用风驰补丁"
            dos2unix "fengchi_${{ github.event.inputs.FEIL }}.patch"
            patch -p1 -F 3 < "fengchi_${{ github.event.inputs.FEIL }}.patch"
            echo "✅ 完美风驰补丁应用完成"
          else
            sed -i '1iobj-y += hmbird_patch.o' drivers/Makefile
            wget https://github.com/Numbersf/Action-Build/raw/SukiSU-Ultra/patches/hmbird_patch.patch
            echo "⚙️ 正在打OGKI转换GKI补丁"
            patch -p1 -F 3 < hmbird_patch.patch
            echo "✅ OGKI转换GKI_patch完成"
          fi

      - name: "⚙️ Configure Kernel Options | 配置内核选项"
        run: |
          cd kernel_workspace/kernel_platform

          echo "⚙️ 正在配置内核编译选项..."

          # Add KSU configuration settings
          echo "📦 启用 KSU 支持..."
          echo "CONFIG_KSU=y" >> ./common/arch/arm64/configs/gki_defconfig  
            
          if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
            echo "📦 启用 SUSFS 功能..."
            echo "CONFIG_KSU_SUSFS=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_SUS_KSTAT=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
          else 
            echo "📦 启用 MANUAL_HOOK..."
            echo "CONFIG_KSU_SUSFS=n" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_KSU_MANUAL_HOOK=y" >> ./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.bbg }}" == "On" ]; then
            echo "⚡ 启用BBG中..."
            echo 'CONFIG_BBG=y' >> ./common/arch/arm64/configs/gki_defconfig
            echo 'CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf,baseband_guard"' >> ./common/arch/arm64/configs/gki_defconfig
          fi
          
          if [ "${{ github.event.inputs.bbr }}" == "On" ]; then
            echo "🌐 启用BBR网络算法..."
            echo "CONFIG_TCP_CONG_ADVANCED=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_TCP_CONG_BBR=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_NET_SCH_FQ=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_TCP_CONG_BIC=n" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_TCP_CONG_WESTWOOD=n" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_TCP_CONG_HTCP=n" >> ./common/arch/arm64/configs/gki_defconfig
          fi
        
          if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
            echo "📦 启用lz4kd压缩..."
            echo "CONFIG_CRYPTO_LZ4KD=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_LZ4K_OPLUS=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_ZRAM_WRITEBACK=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi

          if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.6" ]; then
            # Add O2 config
            echo "📦 为6.1&6.6加入O2优化..."
            echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          
          if [ "${{ github.event.inputs.proxy }}" == "On" ]; then
            # Add proxy config
            echo "CONFIG_BPF_STREAM_PARSER=y" >> ./common/arch/arm64/configs/gki_defconfig
            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
            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
            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
          fi
          
          if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.10" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.15" ]; then
            echo "📦 正在为5.10系与5.15系配置lto中...."
            DEFCONFIG=./common/arch/arm64/configs/gki_defconfig
            sed -i 's/^CONFIG_LTO=n/CONFIG_LTO=y/' "$DEFCONFIG"
            sed -i 's/^CONFIG_LTO_CLANG_FULL=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
            sed -i 's/^CONFIG_LTO_CLANG_NONE=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
            grep -q '^CONFIG_LTO_CLANG_THIN=y' "$DEFCONFIG" || echo 'CONFIG_LTO_CLANG_THIN=y' >> "$DEFCONFIG"
          fi

          #跳过将uapi标准头安装到 usr/include 目录的不必要操作,节省编译时间
          echo "CONFIG_HEADERS_INSTALL=n" >> ./common/arch/arm64/configs/gki_defconfig

          sed -i 's/check_defconfig//' ./common/build.config.gki
          echo "✅ 内核配置更新完成"
         
      - name: "🔨 Build Kernel | 编译内核"
        run: |
          echo "🏗️ 开始内核编译..."
          export KBUILD_BUILD_USER="xiaoxiaow"
          export KBUILD_BUILD_HOST="xiaoxiaow_build"

          if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ]; then
            export KBUILD_BUILD_TIMESTAMP="Tue Mar 10 03:53:33 UTC 2026"
            export KBUILD_BUILD_VERSION=1
            export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH"
            export PATH="/usr/lib/ccache:$PATH"
            sudo apt install libelf-dev
            cd kernel_workspace/kernel_platform/common
            make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2 gki_defconfig all

          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.6" ]; then
            export PATH="/usr/lib/ccache:$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r510928/bin:$PATH" 
            export PATH="/usr/lib/ccache:$PATH"
            sudo apt install libelf-dev
            cd kernel_workspace/kernel_platform/common
            make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2  gki_defconfig all

          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.15" ]; then
            export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r450784e/bin:$PATH"
            export PATH="/usr/lib/ccache:$PATH"
            sudo apt install libelf-dev
            cd kernel_workspace/kernel_platform/common
            make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
            
          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.10" ]; then
            export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts-master/clang/host/linux-x86/clang-r416183b/bin:$PATH"
            export PATH="/usr/lib/ccache:$PATH"
            sudo apt install libelf-dev
            cd kernel_workspace/kernel_platform/common
            make -j$(nproc --all) LLVM_IAS=1 LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
          fi
          
          # 显示ccache统计信息
          ccache -s
          echo "✅ 内核编译完成"
         
      - name: "📦 Package Kernel | 打包内核"
        run: |
          echo "📦 准备AnyKernel3打包环境..."
          git clone https://github.com/Xiaomichael/AnyKernel3 --depth=1
          rm -rf ./AnyKernel3/.git
          mkdir -p kernel_workspace/kernel_platform/out/Final-Image-Find/
          dir1=""
          dir2=""
          image_path=$(find "./kernel_workspace/kernel_platform/common/out/" -name "Image" | head -n 1)
          if [ -n "$image_path" ]; then
            dir1=$(dirname "$image_path")/
            echo "✅ 成功找到 Image 文件"
          fi
          if [ -n "$image_path" ] && [ -f "$image_path" ]; then
            echo "Image file finally located at: $image_path"
            cp "$image_path" ./AnyKernel3/Image
            cp "$image_path" kernel_workspace/kernel_platform/out/Final-Image-Find/Image
          fi

      - name: "🧠 Set Artifact Name | 设置产物名称"
        id: set_name
        run: |
          if [ "${{ github.event.inputs.lz4kd }}" = "On" ]; then
            BASE_NAME="${{ github.event.inputs.FEIL }}_KernelSU_Next_lz4kd_${{ env.KSUVER }}"
          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
            BASE_NAME="${{ github.event.inputs.FEIL }}_KernelSU_Next_lz4_zstd_${{ env.KSUVER }}"
          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
            BASE_NAME="${{ github.event.inputs.FEIL }}_KernelSU_Next_lz4_${{ env.KSUVER }}"
          else
            BASE_NAME="${{ github.event.inputs.FEIL }}_KernelSU_Next_${{ env.KSUVER }}"
          fi
          
          if [ "${{ github.event.inputs.SUSFS }}" = "On" ]; then
            FINAL_NAME="${BASE_NAME}_SUSFS"
          else
            FINAL_NAME="${BASE_NAME}"
          fi
          
          echo "ARTIFACT_NAME=${FINAL_NAME}" >> $GITHUB_OUTPUT
         
      - name: "📤 Upload AnyKernel3 | 上传 AnyKernel3"
        uses: actions/upload-artifact@v7
        with:
         name: ${{ steps.set_name.outputs.ARTIFACT_NAME }}
         path: ./AnyKernel3/*

      - name: "📝 Find zram.ko & crypto_zstdn.ko | 查找 zram.ko & crypto_zstdn.ko"
        run: |
          find -name zram.ko
          find -name crypto_zstdn.ko
          
      - name: "📤 Upload zram.ko | 上传 zram.ko"
        uses: actions/upload-artifact@v7
        with:
          name: ${{ github.event.inputs.FEIL }}_zram.ko
          path: ./kernel_workspace/kernel_platform/common/out/drivers/block/zram/zram.ko

      # - name: "🤖 Get bot script | 获取 bot 脚本"
        # uses: actions/checkout@v6
        # with:
          # path: bot

      # - name: "📤 Upload to telegram | 上传至Telegram群组"
        # run: |
          # if [ ! -z "${{ secrets.BOT_TOKEN }}" ]; then
            # echo "📤 正在上传到Telegram..."
            # cd AnyKernel3
            # zip -q -r "../${{ steps.set_name.outputs.ARTIFACT_NAME }}.zip" ./*
            # cd ..
            # pip3 install telethon
            # python3 ./bot/script/buildbot.py "./${{ steps.set_name.outputs.ARTIFACT_NAME }}.zip"
            # echo "✅ 文件已上传到Telegram"
          # fi
        # env:
          # CHATID: ${{secrets.CHATID}}
          # BOT_TOKEN: ${{secrets.BOT_TOKEN}}
          # MESSAGE_THREAD_ID: ${{secrets.MESSAGE_THREAD_ID}}
          # KernelVer: ${{ github.event.inputs.ANDROID_VERSION}}-${{ github.event.inputs.KERNEL_VERSION }}
          # DEVICE: ${{ github.event.inputs.FEIL }}
          # KPM: Not Support
          # LZ4KD: ${{ github.event.inputs.lz4kd }}
          # BBR: ${{ github.event.inputs.bbr }}
          # KSU_VAR: "NEXT"


================================================
FILE: .github/workflows/Build KernelSU.yml
================================================
name: Build KernelSU Official
on:
  workflow_dispatch:
    inputs:
    
      CPU:
        description: "CPU分支"
        required: true
        type: choice
        options:
          - 'sm8750'
          - 'sm8735'
          - 'mt6991'
          - 'sm8650'
          - 'mt6989'
          - 'sm8635'
          - 'sm8550'
          - 'sm8450'
          - 'sm8475'
          - 'sm7675'
          - 'sm7635'
          - 'sm7550'
          - 'sm6375'
        default: 'sm8650'
        
      FEIL:
        description: "手机型号"
        required: true
        type: choice
        options:
          - 'oneplus_13_b'
          - 'oneplus_13s_b'
          - 'oneplus_13t_b'
          - 'oneplus_ace5_pro_b'
          - 'oneplus_ace_6'
          - 'oneplus_pad_2_pro_b'
          - 'oneplus_pad_3_b'
          - 'oneplus_ace5_ultra_b'
          - 'oneplus_turbo_6'
          - 'oneplus_12_b'
          - 'oneplus_ace3_pro_b'
          - 'oneplus_ace5_b'
          - 'oneplus_13r_b'
          - 'oneplus_pad2_b'
          - 'oneplus_pad_pro_b'
          - 'oneplus_ace5_race_b'
          - 'oneplus_nord_5_b'
          - 'oneplus_11_b'
          - 'oneplus_12r_b'
          - 'oneplus_ace2_pro_b'
          - 'oneplus_ace3_b'
          - 'oneplus_open_b'
          - 'oneplus_10t_v'
          - 'oneplus_11r_b'
          - 'oneplus_ace2_b'
          - 'oneplus_ace_pro_v'
          - 'oneplus_10_pro_b'
          - 'oneplus_ace_3v_b'
          - 'oneplus_turbo_6v'
          - 'oneplus_nord_4_b'
          - 'oneplus_nord_ce4_lite_5g'
          - 'oneplus_nord_ce4_b'
        default: 'oneplus_12_b'
        
      ANDROID_VERSION:
        description: "内核安卓KMI版本"
        required: true
        type: choice
        options:
          - 'android15'
          - 'android14'
          - 'android13'
          - 'android12'
        default: 'android14'
        
      KERNEL_VERSION:
        description: "内核版本"
        required: true
        type: choice
        options:
          - '6.6'
          - '6.1'
          - '5.15'
          - '5.10'
        default: '6.1'

      SUSFS:
        description: "是否启用SUSFS"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'Off'

      lz4kd:
        description: "是否启用lz4kd(6.1 关闭时使用 lz4 + zstd; 6.6 关闭时使用 lz4)"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'Off'

      bbg:
        description: "是否启用BBG基带保护"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'On'
       
      bbr:
        description: "是否启用BBR算法(对手机日用无太大意义甚至可能负优化)"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'Off'

      proxy:
        description: "是否添加代理性能优化(联发科芯片跑的时候请关闭否则出现恶性问题)"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'On'

      UNICODE_BYPASS:
        description: "是否添加Unicode零宽绕过修复补丁(高内核版本不推荐开启, 建议使用 https://t.me/real5ec1cff/271 无痛修复)"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'Off'
        
jobs:
  build:
    name: For ${{ github.event.inputs.FEIL }} lz4kd ${{ github.event.inputs.lz4kd }} SUSFS ${{ github.event.inputs.SUSFS }}
    runs-on: ubuntu-latest
    env:
      CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion"
      CCACHE_NOHASHDIR: "true"
      CCACHE_HARDLINK: "true"
      CCACHE_MAXSIZE: 8G
      
    steps:
      - name: "🚀 Maximize Build Space | 最大化构建空间"
        if: ${{ github.event.inputs.KERNEL_VERSION == '5.10' || github.event.inputs.KERNEL_VERSION == '5.15' }}
        uses: easimon/maximize-build-space@master
        with:
          root-reserve-mb: 8192
          temp-reserve-mb: 4096
          remove-dotnet: 'true'
          remove-android: 'true'
          remove-haskell: 'true'
          remove-codeql: 'true'

      - name: "⚙️ Setup Cache Env | 设置缓存环境"
        run: |
          echo "🔧 正在设置机型隔离缓存目录..."
          echo "CCACHE_DIR=$HOME/.ccache_${{ github.event.inputs.FEIL }}_Official" >> $GITHUB_ENV
          mkdir -p "$HOME/.ccache_${{ github.event.inputs.FEIL }}_Official"
          echo "✅ 缓存目录已设置: $HOME/.ccache_${{ github.event.inputs.FEIL }}_Official" 

      - name: "🔐 Configure Git | 配置Git账户"
        run: |
          echo "🔧 正在配置Git用户信息..."
          git config --global user.name "build"
          git config --global user.email "2210077278@qq.com"
          echo "✅ Git配置完成"

      - name: "📦 Cache & Install Dependencies | 缓存 & 安装构建依赖"
        uses: awalsh128/cache-apt-pkgs-action@latest 
        with: 
          packages: python3 git curl ccache libelf-dev build-essential flex bison libssl-dev libncurses-dev liblz4-tool zlib1g-dev libxml2-utils rsync unzip gawk dos2unix
          execute_install_scripts: true
         
      - name: "💾 Restore ccache (With SUSFS) | 恢复ccache缓存 (With SUSFS)"
        if: ${{ github.event.inputs.SUSFS == 'On' }}
        uses: actions/cache@v5
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ccache-${{ runner.os }}-${{ github.ref }}-${{ github.event.inputs.FEIL }}-Official-SUSFS
          restore-keys: |
            ccache-${{ runner.os }}-${{ github.event.inputs.FEIL }}-Official-SUSFS
            ccache-${{ runner.os }}-Official-SUSFS

      - name: "💾 Restore ccache (Without SUSFS) | 恢复ccache缓存 (Without SUSFS)"
        if: ${{ github.event.inputs.SUSFS == 'Off' }}
        uses: actions/cache@v5
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ccache-${{ runner.os }}-${{ github.ref }}-${{ github.event.inputs.FEIL }}-Official-NoSUSFS
          restore-keys: |
            ccache-${{ runner.os }}-${{ github.event.inputs.FEIL }}-Official-NoSUSFS
            ccache-${{ runner.os }}-Official-NoSUSFS

      - name: "⚙️ Initialize ccache | 初始化ccache"
        run: |
          echo "🔧 正在初始化ccache..."
          INIT_FLAG="${{ env.CCACHE_DIR }}/.ccache_initialized"
          
          if command -v ccache >/dev/null 2>&1; then
            if [ ! -f "$INIT_FLAG" ]; then
              mkdir -p "${{ env.CCACHE_DIR }}"
              ccache -M ${{ env.CCACHE_MAXSIZE }}
              touch "$INIT_FLAG"
              echo "🆕 ccache初始化完成"
            else
              echo "ℹ️ ccache已存在,跳过初始化"
            fi
          else
            echo "⚠️ 未找到ccache命令,跳过初始化"
          fi
          # 显示缓存统计
          ccache -s
          echo "✅ ccache初始化流程完成"

      - name: "📥 Install Repo Tool | 安装Repo工具"
        run: |
          echo "⬇️ 正在下载repo工具..."
          curl -fsSL https://storage.googleapis.com/git-repo-downloads/repo > ~/repo
          chmod a+x ~/repo
          sudo mv ~/repo /usr/local/bin/repo
          echo "✅ repo工具安装完成"

      - name: "⬇️ Clone Kernel Source | 克隆内核源码"
        run: |
          mkdir kernel_workspace && cd kernel_workspace

          echo "🌐 正在初始化内核仓库..."
          repo init -u https://github.com/Xiaomichael/kernel_manifest.git -b refs/heads/oneplus/${{ github.event.inputs.CPU }} -m ${{ github.event.inputs.FEIL }}.xml --depth=1

          echo "🔄 同步代码库(使用$(nproc --all)线程)..."
          repo sync -c -j$(nproc --all) --no-tags --no-clone-bundle --force-sync
          
          rm kernel_platform/common/android/abi_gki_protected_exports_* || echo "No protected exports!"
          rm kernel_platform/msm-kernel/android/abi_gki_protected_exports_* || echo "No protected exports!"
          
          # Remove -dirty in kernel version
          sed -i 's/ -dirty//g' kernel_platform/common/scripts/setlocalversion
          sed -i 's/ -dirty//g' kernel_platform/msm-kernel/scripts/setlocalversion
          sed -i 's/ -dirty//g' kernel_platform/external/dtc/scripts/setlocalversion
          sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/common/scripts/setlocalversion
          sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/msm-kernel/scripts/setlocalversion
          sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/external/dtc/scripts/setlocalversion

          if [ "${{ github.event.inputs.KERNEL_VERSION }}" != "6.6" ]; then
            sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/common/scripts/setlocalversion            
            sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/msm-kernel/scripts/setlocalversion
            sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/external/dtc/scripts/setlocalversion
          else
            ESCAPED_SUFFIX=$(printf '%s\n' "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow" | sed 's:[\/&]:\\&:g')
            sudo sed -i "s/-4k/$ESCAPED_SUFFIX/g" kernel_platform/common/arch/arm64/configs/gki_defconfig
            sed -i 's/${scm_version}//' kernel_platform/common/scripts/setlocalversion
            sed -i 's/${scm_version}//' kernel_platform/msm-kernel/scripts/setlocalversion
          fi

          echo "✅ 内核配置完成"
                
      - name: "⚡ Setup Baseband-guard | 配置 Baseband-guard"
        if: ${{ github.event.inputs.bbg == 'On'}}
        run: |
          set -e
          cd kernel_workspace/kernel_platform/common
          echo "🛠️ 正在设置BBG..."
          curl -sSL https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh -o setup.sh
          bash setup.sh
          
      - name: "⚡ Setup KernelSU | 配置 KernelSU"
        run: |
          cd kernel_workspace/kernel_platform

          echo "🛠️ 正在设置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
          sed -i "s/DKSU_VERSION=16/DKSU_VERSION=${KSU_VERSION}/" kernel/Kbuild

          echo "✅ KernelSU 配置完成"
        
      - name: "🔧 Setup Patches | 配置补丁"
        run: |
          cd kernel_workspace

          echo "⬇️ 下载所需补丁..."
          if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
            git clone https://github.com/cctv18/susfs4oki.git -b oki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}
          fi
          git clone https://github.com/Xiaomichael/kernel_patches.git
          git clone https://github.com/ShirkNeko/SukiSU_patch.git

          cd kernel_platform
          echo "📝 复制补丁文件..."
          if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
            cp ../susfs4oki/kernel_patches/50_add_susfs_in_gki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}.patch ./common/
            cp ../susfs4oki/kernel_patches/fs/* ./common/fs/
            cp ../susfs4oki/kernel_patches/include/linux/* ./common/include/linux/
          fi

          cp ../kernel_patches/zram_patches/001-lz4.patch ./common/
          cp ../kernel_patches/zram_patches/lz4armv8.S ./common/lib
          cp ../kernel_patches/zram_patches/002-zstd.patch ./common/

          if [ "${{ github.event.inputs.UNICODE_BYPASS }}" = "On" ]; then
            if [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
              cp ../kernel_patches/common/unicode_bypass_fix_6.1+.patch ./common/unicode_bypass_fix.patch
            elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.15" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.10" ]; then
              cp ../kernel_patches/common/unicode_bypass_fix_6.1-.patch ./common/unicode_bypass_fix.patch
            fi
          fi

          if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
            # Copy lz4k from ShirkNeko
            cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./common/include/linux
            cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./common/lib
            cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./common/crypto
            cp -r ../SukiSU_patch/other/zram/lz4k_oplus ./common/lib/
          fi
          
          echo "🔧 应用补丁..."
          if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
            cd ./KernelSU
            patch -p1 < 10_enable_susfs_for_ksu.patch || true
          fi

          if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
            cd ../common
          elif [ "${{ github.event.inputs.SUSFS }}" == "Off" ]; then
            cd ./common
          fi

          if [ "${{ github.event.inputs.UNICODE_BYPASS }}" = "On" ]; then
            echo "📦 正在应用Unicode零宽绕过修复补丁..."
            patch -p1 < unicode_bypass_fix.patch
          fi
          
          if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
            echo "📦 应用lz4+zstd补丁..."
            git apply -p1 < 001-lz4.patch || true
            patch -p1 < 002-zstd.patch || true
          fi

          if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
            echo "📦 应用lz4补丁..."
            git apply -p1 < 001-lz4.patch || true
          fi
          
          if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
            echo "🚀 应用lz4kd补丁..."
            cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4kd.patch ./
            patch -p1 -F 3 < lz4kd.patch || true
            cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4k_oplus.patch ./
            patch -p1 -F 3 < lz4k_oplus.patch || true
          fi

          if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then           
            patch -p1 < 50_add_susfs_in_gki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}.patch || true
            cp ../../kernel_patches/69_hide_stuff.patch ./
            patch -p1 -F 3 < 69_hide_stuff.patch
          fi

          echo "✅ 所有补丁应用完成"

      - name: "⚙️ Apply SCHED Patch | 应用风驰补丁"
        if: ${{ github.event.inputs.KERNEL_VERSION == '6.6' }}
        run: |
          cd kernel_workspace/kernel_platform/common
          echo "⬇️ 正在拉取风驰补丁"
          if [ "${{ github.event.inputs.FEIL }}" == "oneplus_ace5_ultra" ] || [ "${{ github.event.inputs.FEIL }}" = "oneplus_ace5_ultra_b" ]; then
              git clone https://github.com/Numbersf/SCHED_PATCH.git -b "mt6991"
          else
              git clone https://github.com/Numbersf/SCHED_PATCH.git -b "sm8750"
          fi
          cp ./SCHED_PATCH/fengchi_${{ github.event.inputs.FEIL }}.patch ./
          if [[ -f "fengchi_${{ github.event.inputs.FEIL }}.patch" ]]; then
            echo "⚙️ 开始应用风驰补丁"
            dos2unix "fengchi_${{ github.event.inputs.FEIL }}.patch"
            patch -p1 -F 3 < "fengchi_${{ github.event.inputs.FEIL }}.patch"
            echo "✅ 完美风驰补丁应用完成"
          else
            sed -i '1iobj-y += hmbird_patch.o' drivers/Makefile
            wget https://github.com/Numbersf/Action-Build/raw/SukiSU-Ultra/patches/hmbird_patch.patch
            echo "⚙️ 正在打OGKI转换GKI补丁"
            patch -p1 -F 3 < hmbird_patch.patch
            echo "✅ OGKI转换GKI_patch完成"
          fi

      - name: "⚙️ Configure Kernel Options | 配置内核选项"
        run: |
          cd kernel_workspace/kernel_platform

          echo "⚙️ 正在配置内核编译选项..."

          # Add KSU configuration settings
          echo "📦 启用 KSU 支持..."
          echo "CONFIG_KSU=y" >> ./common/arch/arm64/configs/gki_defconfig

          if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
            # Add SUSFS configuration settings
            echo "CONFIG_KSU_SUSFS=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_SUS_KSTAT=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
          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.bbg }}" == "On" ]; then
            echo "⚡ 启用BBG中..."
            echo 'CONFIG_BBG=y' >> ./common/arch/arm64/configs/gki_defconfig
            echo 'CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf,baseband_guard"' >> ./common/arch/arm64/configs/gki_defconfig
          fi
          
          if [ "${{ github.event.inputs.bbr }}" == "On" ]; then
            echo "🌐 启用BBR网络算法..."
            echo "CONFIG_TCP_CONG_ADVANCED=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_TCP_CONG_BBR=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_NET_SCH_FQ=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_TCP_CONG_BIC=n" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_TCP_CONG_WESTWOOD=n" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_TCP_CONG_HTCP=n" >> ./common/arch/arm64/configs/gki_defconfig
          fi
        
          if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
            echo "📦 启用lz4kd压缩..."
            echo "CONFIG_CRYPTO_LZ4KD=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_LZ4K_OPLUS=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_ZRAM_WRITEBACK=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi

          if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.6" ]; then
            # Add O2 config
            echo "📦 为6.1&6.6加入O2优化..."
            echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          
          if [ "${{ github.event.inputs.proxy }}" == "On" ]; then
            # Add proxy config
            echo "CONFIG_BPF_STREAM_PARSER=y" >> ./common/arch/arm64/configs/gki_defconfig
            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
            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
            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
          fi
          
          if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.10" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.15" ]; then
            echo "📦 正在为5.10系与5.15系配置lto中...."
            DEFCONFIG=./common/arch/arm64/configs/gki_defconfig
            sed -i 's/^CONFIG_LTO=n/CONFIG_LTO=y/' "$DEFCONFIG"
            sed -i 's/^CONFIG_LTO_CLANG_FULL=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
            sed -i 's/^CONFIG_LTO_CLANG_NONE=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
            grep -q '^CONFIG_LTO_CLANG_THIN=y' "$DEFCONFIG" || echo 'CONFIG_LTO_CLANG_THIN=y' >> "$DEFCONFIG"
          fi

          #跳过将uapi标准头安装到 usr/include 目录的不必要操作,节省编译时间
          echo "CONFIG_HEADERS_INSTALL=n" >> ./common/arch/arm64/configs/gki_defconfig

          sed -i 's/check_defconfig//' ./common/build.config.gki
          echo "✅ 内核配置更新完成"
         
      - name: "🔨 Build Kernel | 编译内核"
        run: |
          echo "🏗️ 开始内核编译..."
          export KBUILD_BUILD_USER="xiaoxiaow"
          export KBUILD_BUILD_HOST="xiaoxiaow_build"

          if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ]; then
            export KBUILD_BUILD_TIMESTAMP="Tue Mar 10 03:53:33 UTC 2026"
            export KBUILD_BUILD_VERSION=1
            export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH"
            export PATH="/usr/lib/ccache:$PATH"
            sudo apt install libelf-dev
            cd kernel_workspace/kernel_platform/common
            make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2 gki_defconfig all

          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.6" ]; then
            export PATH="/usr/lib/ccache:$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r510928/bin:$PATH" 
            export PATH="/usr/lib/ccache:$PATH"
            sudo apt install libelf-dev
            cd kernel_workspace/kernel_platform/common
            make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2  gki_defconfig all

          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.15" ]; then
            export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r450784e/bin:$PATH"
            export PATH="/usr/lib/ccache:$PATH"
            sudo apt install libelf-dev
            cd kernel_workspace/kernel_platform/common
            make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
            
          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.10" ]; then
            export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts-master/clang/host/linux-x86/clang-r416183b/bin:$PATH"
            export PATH="/usr/lib/ccache:$PATH"
            sudo apt install libelf-dev
            cd kernel_workspace/kernel_platform/common
            make -j$(nproc --all) LLVM_IAS=1 LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
          fi
          
          # 显示ccache统计信息
          ccache -s
          echo "✅ 内核编译完成"
         
      - name: "📦 Package Kernel | 打包内核"
        run: |
          echo "📦 准备AnyKernel3打包环境..."
          git clone https://github.com/Xiaomichael/AnyKernel3 --depth=1
          rm -rf ./AnyKernel3/.git
          mkdir -p kernel_workspace/kernel_platform/out/Final-Image-Find/
          dir1=""
          dir2=""
          image_path=$(find "./kernel_workspace/kernel_platform/common/out/" -name "Image" | head -n 1)
          if [ -n "$image_path" ]; then
            dir1=$(dirname "$image_path")/
            echo "✅ 成功找到 Image 文件"
          fi
          if [ -n "$image_path" ] && [ -f "$image_path" ]; then
            echo "Image file finally located at: $image_path"
            cp "$image_path" ./AnyKernel3/Image
            cp "$image_path" kernel_workspace/kernel_platform/out/Final-Image-Find/Image
          fi
          
      - name: "🧠 Set Artifact Name | 设置产物名称"
        id: set_name
        run: |
          if [ "${{ github.event.inputs.lz4kd }}" = "On" ]; then
            BASE_NAME="${{ github.event.inputs.FEIL }}_KernelSU_lz4kd_${{ env.KSUVER }}"
          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
            BASE_NAME="${{ github.event.inputs.FEIL }}_KernelSU_lz4_zstd_${{ env.KSUVER }}"
          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
            BASE_NAME="${{ github.event.inputs.FEIL }}_KernelSU_lz4_${{ env.KSUVER }}"
          else
            BASE_NAME="${{ github.event.inputs.FEIL }}_KernelSU_${{ env.KSUVER }}"
          fi
          
          if [ "${{ github.event.inputs.SUSFS }}" = "On" ]; then
            FINAL_NAME="${BASE_NAME}_SUSFS"
          else
            FINAL_NAME="${BASE_NAME}"
          fi
          
          echo "ARTIFACT_NAME=${FINAL_NAME}" >> $GITHUB_OUTPUT

      - name: "📤 Upload AnyKernel3 | 上传 AnyKernel3"
        uses: actions/upload-artifact@v7
        with:
          name: ${{ steps.set_name.outputs.ARTIFACT_NAME }}
          path: ./AnyKernel3/*

      - name: "📝 Find zram.ko & crypto_zstdn.ko | 查找 zram.ko & crypto_zstdn.ko"
        # if: ${{ github.event.inputs.lz4kd == 'On' }}
        run: |
          find -name zram.ko
          find -name crypto_zstdn.ko
          
      - name: "📤 Upload zram.ko | 上传 zram.ko"
        # if: ${{ github.event.inputs.lz4kd == 'On' }}
        uses: actions/upload-artifact@v7
        with:
          name: ${{ github.event.inputs.FEIL }}_zram.ko
          path: ./kernel_workspace/kernel_platform/common/out/drivers/block/zram/zram.ko


================================================
FILE: .github/workflows/Build ReSukiSU.yml
================================================
name: Build ReSukiSU
on:
  workflow_dispatch:
    inputs:
    
      CPU:
        description: "CPU分支"
        required: true
        type: choice
        options:
          - 'sm8750'
          - 'sm8735'
          - 'mt6991'
          - 'sm8650'
          - 'mt6989'
          - 'sm8635'
          - 'sm8550'
          - 'sm8450'
          - 'sm8475'
          - 'sm7675'
          - 'sm7635'
          - 'sm7550'
          - 'sm6375'
        default: 'sm8650'
        
      FEIL:
        description: "手机型号"
        required: true
        type: choice
        options:
          - 'oneplus_13_b'
          - 'oneplus_13s_b'
          - 'oneplus_13t_b'
          - 'oneplus_ace5_pro_b'
          - 'oneplus_ace_6'
          - 'oneplus_pad_2_pro_b'
          - 'oneplus_pad_3_b'
          - 'oneplus_ace5_ultra_b'
          - 'oneplus_turbo_6'
          - 'oneplus_12_b'
          - 'oneplus_ace3_pro_b'
          - 'oneplus_ace5_b'
          - 'oneplus_13r_b'
          - 'oneplus_pad2_b'
          - 'oneplus_pad_pro_b'
          - 'oneplus_ace5_race_b'
          - 'oneplus_nord_5_b'
          - 'oneplus_11_b'
          - 'oneplus_12r_b'
          - 'oneplus_ace2_pro_b'
          - 'oneplus_ace3_b'
          - 'oneplus_open_b'
          - 'oneplus_10t_v'
          - 'oneplus_11r_b'
          - 'oneplus_ace2_b'
          - 'oneplus_ace_pro_v'
          - 'oneplus_10_pro_b'
          - 'oneplus_ace_3v_b'
          - 'oneplus_turbo_6v'
          - 'oneplus_nord_4_b'
          - 'oneplus_nord_ce4_lite_5g'
          - 'oneplus_nord_ce4_b'
        default: 'oneplus_12_b'
        
      ANDROID_VERSION:
        description: "内核安卓KMI版本"
        required: true
        type: choice
        options:
          - 'android15'
          - 'android14'
          - 'android13'
          - 'android12'
        default: 'android14'
        
      KERNEL_VERSION:
        description: "内核版本"
        required: true
        type: choice
        options:
          - '6.6'
          - '6.1'
          - '5.15'
          - '5.10'
        default: '6.1'

      SUSFS:
        description: "是否启用SUSFS"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'Off'

      KPM:
        description: "是否启用KPM"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'Off'
       
      lz4kd:
        description: "是否启用lz4kd(6.1 关闭时使用 lz4 + zstd; 6.6 关闭时使用 lz4)"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'Off'

      bbg:
        description: "是否启用BBG基带保护"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'On'
       
      bbr:
        description: "是否启用BBR算法(对手机日用无太大意义甚至可能负优化)"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'Off'

      proxy:
        description: "是否添加代理性能优化(联发科芯片跑的时候请关闭否则出现恶性问题)"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'On'

      UNICODE_BYPASS:
        description: "是否添加Unicode零宽绕过修复补丁(高内核版本不推荐开启, 建议使用 https://t.me/real5ec1cff/271 无痛修复)"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'Off'
         
jobs:
  build:
    name: For ${{ github.event.inputs.FEIL }} KPM ${{ github.event.inputs.KPM }} lz4kd ${{ github.event.inputs.lz4kd }} SUSFS ${{ github.event.inputs.SUSFS }}
    runs-on: ubuntu-latest
    env:
      CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion"
      CCACHE_NOHASHDIR: "true"
      CCACHE_HARDLINK: "true"
      CCACHE_MAXSIZE: 8G
      
    steps:
      - name: "🚀 Maximize Build Space | 最大化构建空间"
        if: ${{ github.event.inputs.KERNEL_VERSION == '5.10' || github.event.inputs.KERNEL_VERSION == '5.15' }}
        uses: easimon/maximize-build-space@master
        with:
          root-reserve-mb: 8192
          temp-reserve-mb: 4096
          remove-dotnet: 'true'
          remove-android: 'true'
          remove-haskell: 'true'
          remove-codeql: 'true'

      - name: "⚙️ Setup Cache Env | 设置缓存环境"
        run: |
          echo "🔧 正在设置机型隔离缓存目录..."
          echo "CCACHE_DIR=$HOME/.ccache_${{ github.event.inputs.FEIL }}_ReSukiSU" >> $GITHUB_ENV
          mkdir -p "$HOME/.ccache_${{ github.event.inputs.FEIL }}_ReSukiSU"
          echo "✅ 缓存目录已设置: $HOME/.ccache_${{ github.event.inputs.FEIL }}_ReSukiSU"

      - name: "🔐 Configure Git | 配置Git账户"
        run: |
          echo "🔧 正在配置Git用户信息..."
          git config --global user.name "build"
          git config --global user.email "2210077278@qq.com"
          echo "✅ Git配置完成"

      - name: "📦 Cache & Install Dependencies | 缓存 & 安装构建依赖"
        uses: awalsh128/cache-apt-pkgs-action@latest 
        with: 
          packages: python3 git curl ccache libelf-dev build-essential flex bison libssl-dev libncurses-dev liblz4-tool zlib1g-dev libxml2-utils rsync unzip gawk dos2unix
          execute_install_scripts: true

      - name: "💾 Restore ccache (With SUSFS) | 恢复ccache缓存 (With SUSFS)"
        if: ${{ github.event.inputs.SUSFS == 'On' }}
        uses: actions/cache@v5
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ccache-${{ runner.os }}-${{ github.ref }}-${{ github.event.inputs.FEIL }}-ReSukiSU-SUSFS
          restore-keys: |
            ccache-${{ runner.os }}-${{ github.event.inputs.FEIL }}-ReSukiSU-SUSFS
            ccache-${{ runner.os }}-ReSukiSU-SUSFS

      - name: "💾 Restore ccache (Without SUSFS) | 恢复ccache缓存 (Without SUSFS)"
        if: ${{ github.event.inputs.SUSFS == 'Off' }}
        uses: actions/cache@v5
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ccache-${{ runner.os }}-${{ github.ref }}-${{ github.event.inputs.FEIL }}-ReSukiSU-NoSUSFS
          restore-keys: |
            ccache-${{ runner.os }}-${{ github.event.inputs.FEIL }}-ReSukiSU-NoSUSFS
            ccache-${{ runner.os }}-ReSukiSU-NoSUSFS

      - name: "⚙️ Initialize ccache | 初始化ccache"
        run: |
          echo "🔧 正在初始化ccache..."
          INIT_FLAG="${{ env.CCACHE_DIR }}/.ccache_initialized"
          
          if command -v ccache >/dev/null 2>&1; then
            if [ ! -f "$INIT_FLAG" ]; then
              mkdir -p "${{ env.CCACHE_DIR }}"
              ccache -M ${{ env.CCACHE_MAXSIZE }}
              touch "$INIT_FLAG"
              echo "✅ ccache初始化完成"
            else
              echo "ℹ️ ccache已存在,跳过初始化"
            fi
          else
            echo "⚠️ 未找到ccache命令,跳过初始化"
          fi
          # 显示缓存统计
          ccache -s
          echo "✅ ccache初始化流程完成"

      - name: "📥 Install Repo Tool | 安装Repo工具"
        run: |
          echo "⬇️ 正在下载repo工具..."
          curl -fsSL https://storage.googleapis.com/git-repo-downloads/repo > ~/repo
          chmod a+x ~/repo
          sudo mv ~/repo /usr/local/bin/repo
          echo "✅ repo工具安装完成"

      - name: "⬇️ Clone Kernel Source | 克隆内核源码"
        run: |
          mkdir kernel_workspace && cd kernel_workspace

          echo "🌐 正在初始化内核仓库..."
          repo init -u https://github.com/Xiaomichael/kernel_manifest.git -b refs/heads/oneplus/${{ github.event.inputs.CPU }} -m ${{ github.event.inputs.FEIL }}.xml --depth=1

          echo "🔄 同步代码库(使用$(nproc --all)线程)..."
          repo sync -c -j$(nproc --all) --no-tags --no-clone-bundle --force-sync
 
          echo "✅ 内核源码克隆完成"
     
          rm kernel_platform/common/android/abi_gki_protected_exports_* || echo "No protected exports!"
          rm kernel_platform/msm-kernel/android/abi_gki_protected_exports_* || echo "No protected exports!"

          echo "🔧 正在配置内核版本信息..."
          # Remove -dirty in kernel version
          sed -i 's/ -dirty//g' kernel_platform/common/scripts/setlocalversion
          sed -i 's/ -dirty//g' kernel_platform/msm-kernel/scripts/setlocalversion
          sed -i 's/ -dirty//g' kernel_platform/external/dtc/scripts/setlocalversion
          sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/common/scripts/setlocalversion
          sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/msm-kernel/scripts/setlocalversion
          sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/external/dtc/scripts/setlocalversion
          
          if [ "${{ github.event.inputs.KERNEL_VERSION }}" != "6.6" ]; then
            sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/common/scripts/setlocalversion            
            sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/msm-kernel/scripts/setlocalversion
            sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/external/dtc/scripts/setlocalversion
          else
            ESCAPED_SUFFIX=$(printf '%s\n' "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow" | sed 's:[\/&]:\\&:g')
            sudo sed -i "s/-4k/$ESCAPED_SUFFIX/g" kernel_platform/common/arch/arm64/configs/gki_defconfig
            sed -i 's/${scm_version}//' kernel_platform/common/scripts/setlocalversion
            sed -i 's/${scm_version}//' kernel_platform/msm-kernel/scripts/setlocalversion
          fi

          echo "✅ 内核配置完成"

      - name: "⚡ Setup Baseband-guard | 配置 Baseband-guard"
        if: ${{ github.event.inputs.bbg == 'On' && github.event.inputs.KPM == 'Off' }}
        run: |
          set -e
          cd kernel_workspace/kernel_platform/common
          echo "🛠️ 正在设置BBG..."
          curl -sSL https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh -o setup.sh
          bash setup.sh     
              
      - name: "⚡ Setup ReSukiSU | 配置 ReSukiSU"
        run: |
          cd kernel_workspace/kernel_platform

          # 下载并执行设置脚本
          echo "🛠️ 正在设置ReSukiSU..."
          curl -LSs "https://raw.githubusercontent.com/ReSukiSU/ReSukiSU/main/kernel/setup.sh" | bash -s main

          cd KernelSU
          KSU_VERSION=$(expr $(/usr/bin/git rev-list --count main) "+" 30700)
          echo "KSUVER=$KSU_VERSION" >> $GITHUB_ENV
          
          echo "✅ ReSukiSU 配置完成"
          
      - name: "🔧 Setup Patches | 配置补丁"
        run: |
          cd kernel_workspace

          echo "⬇️ 克隆所需补丁..."
          if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then          
            git clone https://github.com/cctv18/susfs4oki.git -b oki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}
          fi
          git clone https://github.com/Xiaomichael/kernel_patches.git
          git clone https://github.com/ShirkNeko/SukiSU_patch.git
          
          cd kernel_platform
          echo "📝 复制补丁文件..."
          if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
            cp ../susfs4oki/kernel_patches/50_add_susfs_in_gki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}.patch ./common/
            cp ../susfs4oki/kernel_patches/fs/* ./common/fs/
            cp ../susfs4oki/kernel_patches/include/linux/* ./common/include/linux/
          else
            cp ../kernel_patches/sukisu/scope_min_manual_hooks_v1.9.patch ./common/
          fi
          cp ../kernel_patches/zram_patches/001-lz4.patch ./common/
          cp ../kernel_patches/zram_patches/lz4armv8.S ./common/lib
          cp ../kernel_patches/zram_patches/002-zstd.patch ./common/

          if [ "${{ github.event.inputs.UNICODE_BYPASS }}" = "On" ]; then
            if [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
              cp ../kernel_patches/common/unicode_bypass_fix_6.1+.patch ./common/unicode_bypass_fix.patch
            elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.15" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.10" ]; then
              cp ../kernel_patches/common/unicode_bypass_fix_6.1-.patch ./common/unicode_bypass_fix.patch
            fi
          fi

          if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
            # Copy lz4k from ShirkNeko
            cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./common/include/linux
            cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./common/lib
            cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./common/crypto
            cp -r ../SukiSU_patch/other/zram/lz4k_oplus ./common/lib/
          fi
          
          cd ./common

          if [ "${{ github.event.inputs.UNICODE_BYPASS }}" = "On" ]; then
            echo "📦 正在应用Unicode零宽绕过修复补丁..."
            patch -p1 < unicode_bypass_fix.patch
          fi

          if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
            echo "📦 应用lz4+zstd补丁..."
            git apply -p1 < 001-lz4.patch || true
            patch -p1 < 002-zstd.patch || true
          fi

          if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
            echo "📦 应用lz4补丁..."
            git apply -p1 < 001-lz4.patch || true
          fi
          
          if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
            echo "📦 应用lz4kd补丁..."
            cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4kd.patch ./
            patch -p1 -F 3 < lz4kd.patch || true
            cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4k_oplus.patch ./
            patch -p1 -F 3 < lz4k_oplus.patch || true
          fi

          if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
            echo "📦 应用SUSFS补丁..."
            patch -p1 < 50_add_susfs_in_gki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}.patch || true
          else
            echo "📦 应用MANUAL_HOOK补丁..."
            patch -p1 -F 3 < scope_min_manual_hooks_v1.9.patch
          fi

          echo "✅ 所有补丁应用完成"

      - name: "⚙️ Apply SCHED Patch | 应用风驰补丁"
        if: ${{ github.event.inputs.KERNEL_VERSION == '6.6' }}
        run: |
          cd kernel_workspace/kernel_platform/common

          echo "⬇️ 正在拉取风驰补丁"
          if [ "${{ github.event.inputs.FEIL }}" == "oneplus_ace5_ultra" ] || [ "${{ github.event.inputs.FEIL }}" = "oneplus_ace5_ultra_b" ]; then
              echo "⚠️ Ace5 Ultra 需要使用 mt6991 分支的补丁"
              git clone https://github.com/Numbersf/SCHED_PATCH.git -b "mt6991"
          else
              echo "⚙️ 使用 sm8750 分支的补丁"
              git clone https://github.com/Numbersf/SCHED_PATCH.git -b "sm8750"
          fi

          cp ./SCHED_PATCH/fengchi_${{ github.event.inputs.FEIL }}.patch ./

          if [[ -f "fengchi_${{ github.event.inputs.FEIL }}.patch" ]]; then
            echo "⚙️ 开始应用风驰补丁"
            dos2unix "fengchi_${{ github.event.inputs.FEIL }}.patch"
            patch -p1 -F 3 < "fengchi_${{ github.event.inputs.FEIL }}.patch"
            echo "✅ 完美风驰补丁应用完成"
          else
            sed -i '1iobj-y += hmbird_patch.o' drivers/Makefile
            wget https://github.com/Numbersf/Action-Build/raw/SukiSU-Ultra/patches/hmbird_patch.patch
            echo "⚙️ 正在打OGKI转换GKI补丁"
            patch -p1 -F 3 < hmbird_patch.patch
            echo "✅ OGKI转换GKI_patch完成"
          fi
          
      - name: "⚙️ Configure Kernel Options | 配置内核选项"
        run: |
          cd kernel_workspace/kernel_platform

          echo "⚙️ 正在配置内核编译选项..."
          
          echo "📦 启用 KSU 支持..."
          curl -L -o resukisu_setup.bin https://github.com/Xiaomichael/OnePlus-Actions/raw/Build/script/resukisu_setup.bin
          chmod +x resukisu_setup.bin
          ./resukisu_setup.bin
          rm -rf ./resukisu_setup.bin
          
          if [ "${{ github.event.inputs.KPM }}" == "On" ]; then
            echo "📦 启用 KPM..."
            echo "CONFIG_KPM=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          
          if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
            echo "📦 启用 SUSFS 功能..."
            echo "CONFIG_KSU_SUSFS=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_SUS_KSTAT=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
          else 
            echo "📦 启用 MANUAL_HOOK..."
            echo "CONFIG_KSU_SUSFS=n" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_KSU_MANUAL_HOOK=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi

          echo "📦 添加对 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.bbg }}" == "On" ] && [ "${{ github.event.inputs.KPM }}" == "Off" ]; then
            echo "⚡ 配置 BBG 中..."
            echo 'CONFIG_BBG=y' >> ./common/arch/arm64/configs/gki_defconfig
            echo 'CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf,baseband_guard"' >> ./common/arch/arm64/configs/gki_defconfig
          fi          
          
          if [ "${{ github.event.inputs.bbr }}" == "On" ]; then
            echo "🌐 启用 BBR 网络算法..."
            echo "CONFIG_TCP_CONG_ADVANCED=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_TCP_CONG_BBR=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_NET_SCH_FQ=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_TCP_CONG_BIC=n" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_TCP_CONG_WESTWOOD=n" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_TCP_CONG_HTCP=n" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          
          if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
            echo "📦 启用 lz4kd压缩..."
            echo "CONFIG_CRYPTO_LZ4KD=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_LZ4K_OPLUS=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_ZRAM_WRITEBACK=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          
          if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.6" ]; then
            # Add O2 config
            echo "📦 为6.1 / 6.6加入O2优化..."
            echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi

          if [ "${{ github.event.inputs.proxy }}" == "On" ]; then
            # Add proxy config
            echo "📦 加入代理优化..."
            echo "CONFIG_BPF_STREAM_PARSER=y" >> ./common/arch/arm64/configs/gki_defconfig
            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
            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
            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
          fi
          
          if [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.10" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.15" ]; then
            echo "📦 正在为5.10 / 5.15系配置lto中..."
            DEFCONFIG=./common/arch/arm64/configs/gki_defconfig
            sed -i 's/^CONFIG_LTO=n/CONFIG_LTO=y/' "$DEFCONFIG"
            sed -i 's/^CONFIG_LTO_CLANG_FULL=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
            sed -i 's/^CONFIG_LTO_CLANG_NONE=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
            grep -q '^CONFIG_LTO_CLANG_THIN=y' "$DEFCONFIG" || echo 'CONFIG_LTO_CLANG_THIN=y' >> "$DEFCONFIG"
          fi

          #跳过将uapi标准头安装到 usr/include 目录的不必要操作,节省编译时间
          echo "CONFIG_HEADERS_INSTALL=n" >> ./common/arch/arm64/configs/gki_defconfig

          # Remove check_defconfig
          sed -i 's/check_defconfig//' ./common/build.config.gki
          echo "✅ 内核配置更新完成"
          
      - name: "🔨 Build Kernel | 编译内核"
        run: |
          echo "🏗️ 开始内核编译..."
          export KBUILD_BUILD_USER="xiaoxiaow"
          export KBUILD_BUILD_HOST="xiaoxiaow_build"

          if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ]; then
            export KBUILD_BUILD_TIMESTAMP="Tue Mar 10 03:53:33 UTC 2026"
            export KBUILD_BUILD_VERSION=1
            export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH"
            export PATH="/usr/lib/ccache:$PATH"
            sudo apt install libelf-dev
            cd kernel_workspace/kernel_platform/common
            make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2 gki_defconfig all

          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.6" ]; then
            export PATH="/usr/lib/ccache:$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r510928/bin:$PATH" 
            export PATH="/usr/lib/ccache:$PATH"
            sudo apt install libelf-dev
            cd kernel_workspace/kernel_platform/common
            make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2  gki_defconfig all
            
          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.15" ]; then
            export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r450784e/bin:$PATH"
            export PATH="/usr/lib/ccache:$PATH"
            sudo apt install libelf-dev
            cd kernel_workspace/kernel_platform/common
            make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
            
          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.10" ]; then
            export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts-master/clang/host/linux-x86/clang-r416183b/bin:$PATH"
            export PATH="/usr/lib/ccache:$PATH"
            sudo apt install libelf-dev
            cd kernel_workspace/kernel_platform/common
            make -j$(nproc --all) LLVM_IAS=1 LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
          fi
          
          # 显示ccache统计信息
          ccache -s
          echo "✅ 内核编译完成"
          
      - name: "📦 Package Kernel | 打包内核"
        run: |
          echo "📦 准备AnyKernel3打包环境..."
          git clone https://github.com/Xiaomichael/AnyKernel3 --depth=1
          rm -rf ./AnyKernel3/.git
          mkdir -p kernel_workspace/kernel_platform/out/Final-Image-Find/
          dir1=""
          dir2=""
          image_path=$(find "./kernel_workspace/kernel_platform/common/out/" -name "Image" | head -n 1)
          if [ -n "$image_path" ]; then
            dir1=$(dirname "$image_path")/
            echo "✅ 成功找到 Image 文件"
          fi
          if [ -n "$image_path" ] && [ -f "$image_path" ]; then
            echo "Image file finally located at: $image_path"
            cp "$image_path" ./AnyKernel3/Image
            cp "$image_path" kernel_workspace/kernel_platform/out/Final-Image-Find/Image
          fi
         
      - name: "🧩 Patch Kernel Image (KPM) | KPM修补镜像"
        if: ${{ github.event.inputs.KPM == 'On' }}
        run: |
          echo "🔧 正在应用KPM补丁..."
          cd kernel_workspace/kernel_platform/out/Final-Image-Find
          curl -LO https://github.com/SukiSU-Ultra/SukiSU_KernelPatch_patch/releases/download/0.13.0/patch_linux
          chmod +x patch_linux
          ./patch_linux
          rm -f Image
          mv oImage Image
          cp Image $GITHUB_WORKSPACE/AnyKernel3/Image
          echo "✅ KPM补丁应用完成"

      - name: "🧠 Set Artifact Name | 设置产物名称"
        id: set_name
        run: |
          if [ "${{ github.event.inputs.lz4kd }}" = "On" ]; then
            BASE_NAME="${{ github.event.inputs.FEIL }}_ReSukiSU_lz4kd_${{ env.KSUVER }}"
          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
            BASE_NAME="${{ github.event.inputs.FEIL }}_ReSukiSU_lz4_zstd_${{ env.KSUVER }}"
          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
            BASE_NAME="${{ github.event.inputs.FEIL }}_ReSukiSU_lz4_${{ env.KSUVER }}"
          else
            BASE_NAME="${{ github.event.inputs.FEIL }}_ReSukiSU_${{ env.KSUVER }}"
          fi
          
          if [ "${{ github.event.inputs.SUSFS }}" = "On" ]; then
            FINAL_NAME="${BASE_NAME}_SUSFS"
          else
            FINAL_NAME="${BASE_NAME}"
          fi
          
          echo "ARTIFACT_NAME=${FINAL_NAME}" >> $GITHUB_OUTPUT

      - name: "📤 Upload AnyKernel3 | 上传 AnyKernel3"
        uses: actions/upload-artifact@v7
        with:
          name: ${{ steps.set_name.outputs.ARTIFACT_NAME }}
          path: ./AnyKernel3/*
         
      - name: "📝 Find zram.ko & crypto_zstdn.ko | 查找 zram.ko & crypto_zstdn.ko"
        run: |
          find -name zram.ko
          find -name crypto_zstdn.ko
          
      - name: "📤 Upload zram.ko | 上传 zram.ko"
        uses: actions/upload-artifact@v7
        with:
          name: ${{ github.event.inputs.FEIL }}_zram.ko
          path: ./kernel_workspace/kernel_platform/common/out/drivers/block/zram/zram.ko


================================================
FILE: .github/workflows/Build SukiSU Ultra.yml
================================================
name: Build SukiSU Ultra
on:
  workflow_dispatch:
    inputs:
    
      CPU:
        description: "CPU分支"
        required: true
        type: choice
        options:
          - 'sm8750'
          - 'sm8735'
          - 'mt6991'
          - 'sm8650'
          - 'mt6989'
          - 'sm8635'
          - 'sm8550'
          - 'sm8450'
          - 'sm8475'
          - 'sm7675'
          - 'sm7635'
          - 'sm7550'
          - 'sm6375'
        default: 'sm8650'
        
      FEIL:
        description: "手机型号"
        required: true
        type: choice
        options:
          - 'oneplus_13_b'
          - 'oneplus_13s_b'
          - 'oneplus_13t_b'
          - 'oneplus_ace5_pro_b'
          - 'oneplus_ace_6'
          - 'oneplus_pad_2_pro_b'
          - 'oneplus_pad_3_b'
          - 'oneplus_ace5_ultra_b'
          - 'oneplus_turbo_6'
          - 'oneplus_12_b'
          - 'oneplus_ace3_pro_b'
          - 'oneplus_ace5_b'
          - 'oneplus_13r_b'
          - 'oneplus_pad2_b'
          - 'oneplus_pad_pro_b'
          - 'oneplus_ace5_race_b'
          - 'oneplus_nord_5_b'
          - 'oneplus_11_b'
          - 'oneplus_12r_b'
          - 'oneplus_ace2_pro_b'
          - 'oneplus_ace3_b'
          - 'oneplus_open_b'
          - 'oneplus_10t_v'
          - 'oneplus_11r_b'
          - 'oneplus_ace2_b'
          - 'oneplus_ace_pro_v'
          - 'oneplus_10_pro_b'
          - 'oneplus_ace_3v_b'
          - 'oneplus_turbo_6v'
          - 'oneplus_nord_4_b'
          - 'oneplus_nord_ce4_lite_5g'
          - 'oneplus_nord_ce4_b'
        default: 'oneplus_12_b'
        
      ANDROID_VERSION:
        description: "内核安卓KMI版本"
        required: true
        type: choice
        options:
          - 'android15'
          - 'android14'
          - 'android13'
          - 'android12'
        default: 'android14'
        
      KERNEL_VERSION:
        description: "内核版本"
        required: true
        type: choice
        options:
          - '6.6'
          - '6.1'
          - '5.15'
          - '5.10'
        default: '6.1'

      SUSFS:
        description: "是否启用SUSFS"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'Off'

      KPM:
        description: "是否启用KPM"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'Off'
       
      lz4kd:
        description: "是否启用lz4kd(6.1 关闭时使用 lz4 + zstd; 6.6 关闭时使用 lz4)"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'Off'

      bbg:
        description: "是否启用BBG基带保护"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'On'
       
      bbr:
        description: "是否启用BBR算法(对手机日用无太大意义甚至可能负优化)"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'Off'

      proxy:
        description: "是否添加代理性能优化(联发科芯片跑的时候请关闭否则出现恶性问题)"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'On'

      UNICODE_BYPASS:
        description: "是否添加Unicode零宽绕过修复补丁(高内核版本不推荐开启, 建议使用 https://t.me/real5ec1cff/271 无痛修复)"
        required: true
        type: choice
        options:
          - 'On'
          - 'Off'
        default: 'Off'
         
jobs:
  build:
    name: For ${{ github.event.inputs.FEIL }} KPM ${{ github.event.inputs.KPM }} lz4kd ${{ github.event.inputs.lz4kd }} SUSFS ${{ github.event.inputs.SUSFS }}
    runs-on: ubuntu-latest
    env:
      CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion"
      CCACHE_NOHASHDIR: "true"
      CCACHE_HARDLINK: "true"
      CCACHE_MAXSIZE: 8G
      
    steps:
      - name: "🚀 Maximize Build Space | 最大化构建空间"
        if: ${{ github.event.inputs.KERNEL_VERSION == '5.10' || github.event.inputs.KERNEL_VERSION == '5.15' }}
        uses: easimon/maximize-build-space@master
        with:
          root-reserve-mb: 8192
          temp-reserve-mb: 4096
          remove-dotnet: 'true'
          remove-android: 'true'
          remove-haskell: 'true'
          remove-codeql: 'true'

      - name: "⚙️ Setup Cache Env | 设置缓存环境"
        run: |
          echo "🔧 正在设置机型隔离缓存目录..."
          echo "CCACHE_DIR=$HOME/.ccache_${{ github.event.inputs.FEIL }}_SukiSU" >> $GITHUB_ENV
          mkdir -p "$HOME/.ccache_${{ github.event.inputs.FEIL }}_SukiSU"
          echo "✅ 缓存目录已设置: $HOME/.ccache_${{ github.event.inputs.FEIL }}_SukiSU"

      - name: "🔐 Configure Git | 配置Git账户"
        run: |
          echo "🔧 正在配置Git用户信息..."
          git config --global user.name "build"
          git config --global user.email "2210077278@qq.com"
          echo "✅ Git配置完成"

      - name: "📦 Cache & Install Dependencies | 缓存 & 安装构建依赖"
        uses: awalsh128/cache-apt-pkgs-action@latest 
        with: 
          packages: python3 git curl ccache libelf-dev build-essential flex bison libssl-dev libncurses-dev liblz4-tool zlib1g-dev libxml2-utils rsync unzip gawk dos2unix
          execute_install_scripts: true

      - name: "💾 Restore ccache (With SUSFS) | 恢复ccache缓存 (With SUSFS)"
        if: ${{ github.event.inputs.SUSFS == 'On' }}
        uses: actions/cache@v5
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ccache-${{ runner.os }}-${{ github.ref }}-${{ github.event.inputs.FEIL }}-SukiSU-SUSFS
          restore-keys: |
            ccache-${{ runner.os }}-${{ github.event.inputs.FEIL }}-SukiSU-SUSFS
            ccache-${{ runner.os }}-SukiSU-SUSFS

      - name: "💾 Restore ccache (Without SUSFS) | 恢复ccache缓存 (Without SUSFS)"
        if: ${{ github.event.inputs.SUSFS == 'Off' }}
        uses: actions/cache@v5
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ccache-${{ runner.os }}-${{ github.ref }}-${{ github.event.inputs.FEIL }}-SukiSU-NoSUSFS
          restore-keys: |
            ccache-${{ runner.os }}-${{ github.event.inputs.FEIL }}-SukiSU-NoSUSFS
            ccache-${{ runner.os }}-SukiSU-NoSUSFS

      - name: "⚙️ Initialize ccache | 初始化ccache"
        run: |
          echo "🔧 正在初始化ccache..."
          INIT_FLAG="${{ env.CCACHE_DIR }}/.ccache_initialized"
          
          if command -v ccache >/dev/null 2>&1; then
            if [ ! -f "$INIT_FLAG" ]; then
              mkdir -p "${{ env.CCACHE_DIR }}"
              ccache -M ${{ env.CCACHE_MAXSIZE }}
              touch "$INIT_FLAG"
              echo "✅ ccache初始化完成"
            else
              echo "ℹ️ ccache已存在,跳过初始化"
            fi
          else
            echo "⚠️ 未找到ccache命令,跳过初始化"
          fi
          # 显示缓存统计
          ccache -s
          echo "✅ ccache初始化流程完成"

      - name: "📥 Install Repo Tool | 安装Repo工具"
        run: |
          echo "⬇️ 正在下载repo工具..."
          curl -fsSL https://storage.googleapis.com/git-repo-downloads/repo > ~/repo
          chmod a+x ~/repo
          sudo mv ~/repo /usr/local/bin/repo
          echo "✅ repo工具安装完成"

      - name: "⬇️ Clone Kernel Source | 克隆内核源码"
        run: |
          mkdir kernel_workspace && cd kernel_workspace

          echo "🌐 正在初始化内核仓库..."
          repo init -u https://github.com/Xiaomichael/kernel_manifest.git -b refs/heads/oneplus/${{ github.event.inputs.CPU }} -m ${{ github.event.inputs.FEIL }}.xml --depth=1

          echo "🔄 同步代码库(使用$(nproc --all)线程)..."
          repo sync -c -j$(nproc --all) --no-tags --no-clone-bundle --force-sync
 
          echo "✅ 内核源码克隆完成"
     
          rm kernel_platform/common/android/abi_gki_protected_exports_* || echo "No protected exports!"
          rm kernel_platform/msm-kernel/android/abi_gki_protected_exports_* || echo "No protected exports!"

          echo "🔧 正在配置内核版本信息..."
          # Remove -dirty in kernel version
          sed -i 's/ -dirty//g' kernel_platform/common/scripts/setlocalversion
          sed -i 's/ -dirty//g' kernel_platform/msm-kernel/scripts/setlocalversion
          sed -i 's/ -dirty//g' kernel_platform/external/dtc/scripts/setlocalversion
          sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/common/scripts/setlocalversion
          sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/msm-kernel/scripts/setlocalversion
          sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/external/dtc/scripts/setlocalversion
          
          if [ "${{ github.event.inputs.KERNEL_VERSION }}" != "6.6" ]; then
            sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/common/scripts/setlocalversion            
            sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/msm-kernel/scripts/setlocalversion
            sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/external/dtc/scripts/setlocalversion
          else
            ESCAPED_SUFFIX=$(printf '%s\n' "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow" | sed 's:[\/&]:\\&:g')
            sudo sed -i "s/-4k/$ESCAPED_SUFFIX/g" kernel_platform/common/arch/arm64/configs/gki_defconfig
            sed -i 's/${scm_version}//' kernel_platform/common/scripts/setlocalversion
            sed -i 's/${scm_version}//' kernel_platform/msm-kernel/scripts/setlocalversion
          fi

          echo "✅ 内核配置完成"

      - name: "⚡ Setup Baseband-guard | 配置 Baseband-guard"
        if: ${{ github.event.inputs.bbg == 'On' && github.event.inputs.KPM == 'Off' }}
        run: |
          set -e
          cd kernel_workspace/kernel_platform/common
          echo "🛠️ 正在设置BBG..."
          curl -sSL https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh -o setup.sh
          bash setup.sh     
              
      - name: "⚡ Setup SukiSU Ultra | 配置 SukiSU Ultra"
        run: |
          cd kernel_workspace/kernel_platform

          # 下载并执行设置脚本
          echo "🛠️ 正在设置SukiSU Ultra..."
          curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/builtin/kernel/setup.sh" | bash -s builtin
          
          cd KernelSU
          echo "⬇️ 下载SukiSU设置工具..."
          curl -L -o sukisu_setup.bin https://github.com/Xiaomichael/OnePlus-Actions/raw/Build/script/sukisu_setup.bin
          chmod +x sukisu_setup.bin
          
          ./sukisu_setup.bin
          rm -rf ./sukisu_setup.bin
          
          echo "✅ SukiSU Ultra配置完成"
          
      - name: "🔧 Setup Patches | 配置补丁"
        run: |
          cd kernel_workspace

          echo "⬇️ 克隆所需补丁..."
          if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then          
            git clone https://github.com/cctv18/susfs4oki.git -b oki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}
          fi
          git clone https://github.com/Xiaomichael/kernel_patches.git
          git clone https://github.com/ShirkNeko/SukiSU_patch.git
          
          cd kernel_platform
          echo "📝 复制补丁文件..."
          if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
            cp ../susfs4oki/kernel_patches/50_add_susfs_in_gki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}.patch ./common/
            cp ../susfs4oki/kernel_patches/fs/* ./common/fs/
            cp ../susfs4oki/kernel_patches/include/linux/* ./common/include/linux/
          else
            cp ../kernel_patches/sukisu/scope_min_manual_hooks_v1.6.patch ./common/
          fi
          cp ../kernel_patches/zram_patches/001-lz4.patch ./common/
          cp ../kernel_patches/zram_patches/lz4armv8.S ./common/lib
          cp ../kernel_patches/zram_patches/002-zstd.patch ./common/

          if [ "${{ github.event.inputs.UNICODE_BYPASS }}" = "On" ]; then
            if [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
              cp ../kernel_patches/common/unicode_bypass_fix_6.1+.patch ./common/unicode_bypass_fix.patch
            elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.15" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.10" ]; then
              cp ../kernel_patches/common/unicode_bypass_fix_6.1-.patch ./common/unicode_bypass_fix.patch
            fi
          fi
          
          if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
            # Copy lz4k from ShirkNeko
            cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./common/include/linux
            cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./common/lib
            cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./common/crypto
            cp -r ../SukiSU_patch/other/zram/lz4k_oplus ./common/lib/
          fi
          
          cd ./common

          if [ "${{ github.event.inputs.UNICODE_BYPASS }}" = "On" ]; then
            echo "📦 正在应用Unicode零宽绕过修复补丁..."
            patch -p1 < unicode_bypass_fix.patch
          fi

          if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
            echo "📦 应用lz4+zstd补丁..."
            git apply -p1 < 001-lz4.patch || true
            patch -p1 < 002-zstd.patch || true
          fi

          if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
            echo "📦 应用lz4补丁..."
            git apply -p1 < 001-lz4.patch || true
          fi
          
          if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
            echo "📦 应用lz4kd补丁..."
            cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4kd.patch ./
            patch -p1 -F 3 < lz4kd.patch || true
            cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4k_oplus.patch ./
            patch -p1 -F 3 < lz4k_oplus.patch || true
          fi

          if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
            echo "📦 应用SUSFS补丁..."
            patch -p1 < 50_add_susfs_in_gki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}.patch || true
          else
            echo "📦 应用MANUAL_HOOK补丁..."
            patch -p1 -F 3 < scope_min_manual_hooks_v1.6.patch
          fi

          echo "✅ 所有补丁应用完成"

      - name: "⚙️ Apply SCHED Patch | 应用风驰补丁"
        if: ${{ github.event.inputs.KERNEL_VERSION == '6.6' }}
        run: |
          cd kernel_workspace/kernel_platform/common

          echo "⬇️ 正在拉取风驰补丁"
          if [ "${{ github.event.inputs.FEIL }}" == "oneplus_ace5_ultra" ] || [ "${{ github.event.inputs.FEIL }}" = "oneplus_ace5_ultra_b" ]; then
              echo "⚠️ Ace5 Ultra 需要使用 mt6991 分支的补丁"
              git clone https://github.com/Numbersf/SCHED_PATCH.git -b "mt6991"
          else
              echo "⚙️ 使用 sm8750 分支的补丁"
              git clone https://github.com/Numbersf/SCHED_PATCH.git -b "sm8750"
          fi

          cp ./SCHED_PATCH/fengchi_${{ github.event.inputs.FEIL }}.patch ./

          if [[ -f "fengchi_${{ github.event.inputs.FEIL }}.patch" ]]; then
            echo "⚙️ 开始应用风驰补丁"
            dos2unix "fengchi_${{ github.event.inputs.FEIL }}.patch"
            patch -p1 -F 3 < "fengchi_${{ github.event.inputs.FEIL }}.patch"
            echo "✅ 完美风驰补丁应用完成"
          else
            sed -i '1iobj-y += hmbird_patch.o' drivers/Makefile
            wget https://github.com/Numbersf/Action-Build/raw/SukiSU-Ultra/patches/hmbird_patch.patch
            echo "⚙️ 正在打OGKI转换GKI补丁"
            patch -p1 -F 3 < hmbird_patch.patch
            echo "✅ OGKI转换GKI_patch完成"
          fi
          
      - name: "⚙️ Configure Kernel Options | 配置内核选项"
        run: |
          cd kernel_workspace/kernel_platform

          echo "⚙️ 正在配置内核编译选项..."
          
          echo "📦 启用 KSU 支持..."
          echo "CONFIG_KSU=y" >> ./common/arch/arm64/configs/gki_defconfig
          
          if [ "${{ github.event.inputs.KPM }}" == "On" ]; then
            echo "📦 启用 KPM..."
            echo "CONFIG_KPM=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          
          if [ "${{ github.event.inputs.SUSFS }}" == "On" ]; then
            echo "📦 启用 SUSFS 功能..."
            echo "CONFIG_KSU_SUSFS=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_SUS_KSTAT=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
          else 
            echo "📦 启用 MANUAL_HOOK..."
            echo "CONFIG_KSU_SUSFS=n" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_KSU_MANUAL_HOOK=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi

          echo "📦 添加对 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.bbg }}" == "On" ] && [ "${{ github.event.inputs.KPM }}" == "Off" ]; then
            echo "⚡ 配置 BBG 中..."
            echo 'CONFIG_BBG=y' >> ./common/arch/arm64/configs/gki_defconfig
            echo 'CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf,baseband_guard"' >> ./common/arch/arm64/configs/gki_defconfig
          fi          
          
          if [ "${{ github.event.inputs.bbr }}" == "On" ]; then
            echo "🌐 启用 BBR 网络算法..."
            echo "CONFIG_TCP_CONG_ADVANCED=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_TCP_CONG_BBR=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_NET_SCH_FQ=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_TCP_CONG_BIC=n" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_TCP_CONG_WESTWOOD=n" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_TCP_CONG_HTCP=n" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          
          if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
            echo "📦 启用 lz4kd压缩..."
            echo "CONFIG_CRYPTO_LZ4KD=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_CRYPTO_LZ4K_OPLUS=y" >> ./common/arch/arm64/configs/gki_defconfig
            echo "CONFIG_ZRAM_WRITEBACK=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi
          
          if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.6" ]; then
            # Add O2 config
            echo "📦 为6.1 / 6.6加入O2优化..."
            echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> ./common/arch/arm64/configs/gki_defconfig
          fi

          if [ "${{ github.event.inputs.proxy }}" == "On" ]; then
            # Add proxy config
            echo "📦 加入代理优化..."
            echo "CONFIG_BPF_STREAM_PARSER=y" >> ./common/arch/arm64/configs/gki_defconfig
            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
            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
            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
          fi
          
          if [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.10" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.15" ]; then
            echo "📦 正在为5.10 / 5.15系配置lto中..."
            DEFCONFIG=./common/arch/arm64/configs/gki_defconfig
            sed -i 's/^CONFIG_LTO=n/CONFIG_LTO=y/' "$DEFCONFIG"
            sed -i 's/^CONFIG_LTO_CLANG_FULL=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
            sed -i 's/^CONFIG_LTO_CLANG_NONE=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
            grep -q '^CONFIG_LTO_CLANG_THIN=y' "$DEFCONFIG" || echo 'CONFIG_LTO_CLANG_THIN=y' >> "$DEFCONFIG"
          fi

          #跳过将uapi标准头安装到 usr/include 目录的不必要操作,节省编译时间
          echo "CONFIG_HEADERS_INSTALL=n" >> ./common/arch/arm64/configs/gki_defconfig

          # Remove check_defconfig
          sed -i 's/check_defconfig//' ./common/build.config.gki
          echo "✅ 内核配置更新完成"
          
      - name: "🔨 Build Kernel | 编译内核"
        run: |
          echo "🏗️ 开始内核编译..."
          export KBUILD_BUILD_USER="xiaoxiaow"
          export KBUILD_BUILD_HOST="xiaoxiaow_build"

          if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ]; then
            export KBUILD_BUILD_TIMESTAMP="Tue Mar 10 03:53:33 UTC 2026"
            export KBUILD_BUILD_VERSION=1
            export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH"
            export PATH="/usr/lib/ccache:$PATH"
            sudo apt install libelf-dev
            cd kernel_workspace/kernel_platform/common
            make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2 gki_defconfig all

          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.6" ]; then
            export PATH="/usr/lib/ccache:$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r510928/bin:$PATH" 
            export PATH="/usr/lib/ccache:$PATH"
            sudo apt install libelf-dev
            cd kernel_workspace/kernel_platform/common
            make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2  gki_defconfig all
            
          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.15" ]; then
            export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r450784e/bin:$PATH"
            export PATH="/usr/lib/ccache:$PATH"
            sudo apt install libelf-dev
            cd kernel_workspace/kernel_platform/common
            make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
            
          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.10" ]; then
            export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts-master/clang/host/linux-x86/clang-r416183b/bin:$PATH"
            export PATH="/usr/lib/ccache:$PATH"
            sudo apt install libelf-dev
            cd kernel_workspace/kernel_platform/common
            make -j$(nproc --all) LLVM_IAS=1 LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
          fi
          
          # 显示ccache统计信息
          ccache -s
          echo "✅ 内核编译完成"
          
      - name: "📦 Package Kernel | 打包内核"
        run: |
          echo "📦 准备AnyKernel3打包环境..."
          git clone https://github.com/Xiaomichael/AnyKernel3 --depth=1
          rm -rf ./AnyKernel3/.git
          mkdir -p kernel_workspace/kernel_platform/out/Final-Image-Find/
          dir1=""
          dir2=""
          image_path=$(find "./kernel_workspace/kernel_platform/common/out/" -name "Image" | head -n 1)
          if [ -n "$image_path" ]; then
            dir1=$(dirname "$image_path")/
            echo "✅ 成功找到 Image 文件"
          fi
          if [ -n "$image_path" ] && [ -f "$image_path" ]; then
            echo "Image file finally located at: $image_path"
            cp "$image_path" ./AnyKernel3/Image
            cp "$image_path" kernel_workspace/kernel_platform/out/Final-Image-Find/Image
          fi
         
      - name: "🧩 Patch Kernel Image (KPM) | KPM修补镜像"
        if: ${{ github.event.inputs.KPM == 'On' }}
        run: |
          echo "🔧 正在应用KPM补丁..."
          cd kernel_workspace/kernel_platform/out/Final-Image-Find
          curl -LO https://github.com/SukiSU-Ultra/SukiSU_KernelPatch_patch/releases/download/0.13.0/patch_linux
          chmod +x patch_linux
          ./patch_linux
          rm -f Image
          mv oImage Image
          cp Image $GITHUB_WORKSPACE/AnyKernel3/Image
          echo "✅ KPM补丁应用完成"

      - name: "🧠 Set Artifact Name | 设置产物名称"
        id: set_name
        run: |
          if [ "${{ github.event.inputs.lz4kd }}" = "On" ]; then
            BASE_NAME="${{ github.event.inputs.FEIL }}_SukiSU_Ultra_lz4kd_${{ env.KSUVER }}"
          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
            BASE_NAME="${{ github.event.inputs.FEIL }}_SukiSU_Ultra_lz4_zstd_${{ env.KSUVER }}"
          elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.6" ]; then
            BASE_NAME="${{ github.event.inputs.FEIL }}_SukiSU_Ultra_lz4_${{ env.KSUVER }}"
          else
            BASE_NAME="${{ github.event.inputs.FEIL }}_SukiSU_Ultra_${{ env.KSUVER }}"
          fi
          
          if [ "${{ github.event.inputs.SUSFS }}" = "On" ]; then
            FINAL_NAME="${BASE_NAME}_SUSFS"
          else
            FINAL_NAME="${BASE_NAME}"
          fi
          
          echo "ARTIFACT_NAME=${FINAL_NAME}" >> $GITHUB_OUTPUT

      - name: "📤 Upload AnyKernel3 | 上传 AnyKernel3"
        uses: actions/upload-artifact@v7
        with:
          name: ${{ steps.set_name.outputs.ARTIFACT_NAME }}
          path: ./AnyKernel3/*
         
      - name: "📝 Find zram.ko & crypto_zstdn.ko | 查找 zram.ko & crypto_zstdn.ko"
        run: |
          find -name zram.ko
          find -name crypto_zstdn.ko
          
      - name: "📤 Upload zram.ko | 上传 zram.ko"
        uses: actions/upload-artifact@v7
        with:
          name: ${{ github.event.inputs.FEIL }}_zram.ko
          path: ./kernel_workspace/kernel_platform/common/out/drivers/block/zram/zram.ko

      # - name: "🤖 Get bot script | 获取 bot 脚本"
        # uses: actions/checkout@v6
        # with:
          # path: bot

      # - name: "📤 Upload to telegram | 上传至Telegram群组"
        # run: |
          # if [ ! -z "${{ secrets.BOT_TOKEN }}" ]; then
            # echo "📤 正在上传到Telegram..."
            # cd AnyKernel3
            # zip -q -r "../${{ steps.set_name.outputs.ARTIFACT_NAME }}.zip" ./*
            # cd ..
            # pip3 install telethon
            # python3 ./bot/script/buildbot.py "./${{ steps.set_name.outputs.ARTIFACT_NAME }}.zip"
            # echo "✅ 文件已上传到Telegram"
          # fi
        # env:
          # CHATID: ${{secrets.CHATID}}
          # BOT_TOKEN: ${{secrets.BOT_TOKEN}}
          # MESSAGE_THREAD_ID: ${{secrets.MESSAGE_THREAD_ID}}
          # KernelVer: ${{ github.event.inputs.ANDROID_VERSION}}-${{ github.event.inputs.KERNEL_VERSION }}
          # DEVICE: ${{ github.event.inputs.FEIL }}
          # KPM: ${{ github.event.inputs.KPM }}
          # LZ4KD: ${{ github.event.inputs.lz4kd }}
          # BBR: ${{ github.event.inputs.bbr }}
          # KSU_VAR: "SukiSU"


================================================
FILE: .github/workflows/Clean_ccache.yml
================================================
name: Clean Caches

on:
  workflow_dispatch:

jobs:
  clean-caches:
    runs-on: ubuntu-latest
    permissions:
      actions: write
    
    steps:     
      - 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/*
          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/Clean_workflows.yml
================================================
name: Clean Workflows

on:
  workflow_dispatch:
    inputs:
      workflow_name:
        type: choice
        description: '清理的工作流名称'
        required: true
        default: 'Build SukiSU Ultra'
        options:
          - Build SukiSU Ultra
          - Build KernelSU Next
          - Build Kernel Only
          - Build KernelSU Official
          - Build SukiSU Ultra (40129)
          - Build ReSukiSU
      count:
        description: '最多清理的运行次数'
        required: false
        default: '20'
      delete_failed:
        description: '是否删除失败的运行记录'
        required: false
        type: boolean
        default: true
      delete_success:
        description: '是否删除成功的运行记录'
        required: false
        type: boolean
        default: false
      delete_cancelled:
        description: '是否删除已取消的运行记录'
        required: false
        type: boolean
        default: true
      reverse_order:
        description: '是否从旧到新开始清理'
        required: false
        type: boolean
        default: true

permissions:
  actions: write

jobs:
  cleanup:
    runs-on: ubuntu-latest

    steps:
      - name: 安装 GitHub CLI 和 jq
        run: |
          sudo apt-get update
          sudo apt-get install -y gh jq

      - name: 认证 GitHub CLI
        run: echo "${{ secrets.GITHUB_TOKEN }}" | gh auth login --with-token

      - name: 清理指定工作流及本工作流运行记录
        env:
          REPO: ${{ github.repository }}
          COUNT: ${{ inputs.count }}
          DELETE_FAILED: ${{ inputs.delete_failed }}
          DELETE_SUCCESS: ${{ inputs.delete_success }}
          DELETE_CANCELLED: ${{ inputs.delete_cancelled }}
          REVERSE_ORDER: ${{ inputs.reverse_order }}
          WORKFLOW_NAME: ${{ inputs.workflow_name }}
          CURRENT_RUN_ID: ${{ github.run_id }}
        run: |
          set -e

          echo "当前仓库:$REPO"
          echo "查找工作流 \"$WORKFLOW_NAME\" 的 ID..."
          WORKFLOW_ID=$(gh api repos/$REPO/actions/workflows | jq -r ".workflows[] | select(.name == \"$WORKFLOW_NAME\") | .id")
          if [ -z "$WORKFLOW_ID" ]; then
            echo "未找到工作流 \"$WORKFLOW_NAME\",退出。"
            exit 1
          fi

          echo "开始分页获取所有运行记录..."
          PER_PAGE=100
          PAGE=1
          MATCHED_RUNS="[]"
          while true; do
            RESP=$(gh api "repos/$REPO/actions/workflows/$WORKFLOW_ID/runs?per_page=$PER_PAGE&page=$PAGE")
            RUNS=$(echo "$RESP" | jq '.workflow_runs')
            COUNT_THIS_PAGE=$(echo "$RUNS" | jq 'length')

            if [ "$COUNT_THIS_PAGE" -eq 0 ]; then
              break
            fi

            MATCHED_RUNS=$(jq -s 'add' <(echo "$MATCHED_RUNS") <(echo "$RUNS"))
            PAGE=$((PAGE + 1))
          done

          echo "共获取到 $(echo "$MATCHED_RUNS" | jq 'length') 条运行记录。"

          # 排序顺序:旧到新 or 新到旧
          if [[ "$REVERSE_ORDER" == "true" ]]; then
            SORTED_RUNS=$(echo "$MATCHED_RUNS" | jq 'sort_by(.run_started_at)')
          else
            SORTED_RUNS=$(echo "$MATCHED_RUNS" | jq 'sort_by(.run_started_at) | reverse')
          fi

          # 仅保留前 N 条
          TO_DELETE_RUNS=$(echo "$SORTED_RUNS" | jq ".[0:${COUNT}]")

          echo "$TO_DELETE_RUNS" | jq -c '.[]' | while read run; do
            ID=$(echo "$run" | jq -r '.id')
            STATUS=$(echo "$run" | jq -r '.conclusion')
            STATE=$(echo "$run" | jq -r '.status')

            if [[ "$STATE" == "in_progress" || "$STATE" == "queued" ]]; then
              echo "跳过运行 ID: $ID(状态为 $STATE)"
              continue
            fi

            if [[ "$STATUS" == "failure" && "$DELETE_FAILED" != "true" ]]; then continue; fi
            if [[ "$STATUS" == "success" && "$DELETE_SUCCESS" != "true" ]]; then continue; fi
            if [[ "$STATUS" == "cancelled" && "$DELETE_CANCELLED" != "true" ]]; then continue; fi

            echo "删除运行记录 ID: $ID (状态: $STATUS)"
            gh api -X DELETE "repos/$REPO/actions/runs/$ID" || echo "删除失败"
          done

          echo "清理本工作流运行记录..."
          SELF_WORKFLOW_ID=$(gh api repos/$REPO/actions/workflows | jq -r '.workflows[] | select(.name == "清理工作流运行记录") | .id')
          if [ -n "$SELF_WORKFLOW_ID" ]; then
            SELF_RUNS=$(gh api "repos/$REPO/actions/workflows/$SELF_WORKFLOW_ID/runs?per_page=50" | jq -c '.workflow_runs[]')

            echo "$SELF_RUNS" | while read run; do
              ID=$(echo "$run" | jq -r '.id')
              if [[ "$ID" == "$CURRENT_RUN_ID" ]]; then
                echo "跳过当前运行 ID: $ID"
                continue
              fi
              echo "删除本工作流运行记录 ID: $ID"
              gh api -X DELETE "repos/$REPO/actions/runs/$ID" || echo "删除失败"
            done
          fi

================================================
FILE: README.md
================================================
# ⭐⭐⭐ Star This Project ⭐⭐⭐

如果您觉得这个项目对您有帮助,请给我一个 ``Star`` 或 ``进行赞助``!您的支持是我持续改进的动力。❤❤❤

如果遇到问题欢迎提交``issue``!也随时欢迎``Pull Requests``!

[![Channel](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/gki_kernels_xiaoxiaow) [![Coolapk](https://img.shields.io/badge/Follow-Coolapk-3DDC84?style=flat-square&logo=android&logoColor=white)](https://www.coolapk.com/u/24701380)

<img width="250" height="250" alt="image" src="https://github.com/user-attachments/assets/55acad97-8fe6-4de7-b9ce-90da9552a212" />

## OnePlus 开源地址

[![OnePlus Repository](https://img.shields.io/badge/OnePlus-Repository-red)](https://github.com/Xiaomichael/kernel_manifest)

## 设备支持

支持欧加真内核版本 `5.10-6.6` 的设备,只要跑出来内核版本号一样(或大于的可以尝试一下)就可以用

内核版本为 `6.12` 的可以去这个 [专用仓库](https://github.com/Xiaomichael/oppo_oplus_realme_sm8850)

## KernelSU管理器支持

支持 ``ReSukiSU`` ``SukiSU Ultra`` ``KernelSU Next`` ``KernelSU Official``, 当然你也可以编译仅加入优化的 ``无 Root`` 内核

## 使用指南

### ① 分支选择

1. 点击 `Branches` 切换处理器分支
2. 选择适合您设备的配置 (Tips: 如果实在找不到代号名称去网上搜搜)

<img width="376" height="77" alt="{B57A09D0-EC2F-4B86-9821-9C6CAC6435CF}" src="https://github.com/user-attachments/assets/0f97b652-b1e4-484d-90c0-9e36bc15cdf0" />

### ② 配置文件说明

- `_b` 后缀:ColorOS/OxygenOS 16
- `_v` 后缀:ColorOS/OxygenOS 15
- `_u` 后缀:ColorOS/OxygenOS 14
- `_t` 后缀:ColorOS/OxygenOS 13

<img width="1122" height="257" alt="image" src="https://github.com/user-attachments/assets/24631b01-ec9d-4f77-a764-476cfe522537" />

### ③ 配置开关建议

- **SUSFS选项**:SUSFS在编译时已经改为可选,看你的需求进行开关。近期上游在拉💩💩💩, 建议关闭
- **KPM选项**:仅在 ``SukiSU Ultra`` ``ReSukiSU`` 支持开启,建议禁用以减少电量消耗,挂🐕去④
- **lz4kd**:
  - ``6.1系``内核:建议关闭该选项以获得更好的 `lz4 + zstd` 压缩方式
  - ``6.6系``内核:建议关闭该选项以获得更好的 `lz4` 压缩方式
  - ``5.10 - 5.15系``内核:建议保持开启
- **BBR算法**:对手机日用无太大意义甚至可能``负优化``,推荐关闭
- **BBG基带守护**: 推荐开启,看名字就知道是干啥的
- **⚠️代理优化**: 骁龙芯片可以开,联发科芯片 `千万不要开` ,否则出现恶性Bug!
- **是否添加Unicode零宽绕过修复补丁**: 仅推荐内核KMI版本为``android12-5.10``开启, ``5.15 - 6.12``可以使用 [这个 LSPosed 模块](https://t.me/real5ec1cff/271) 无痛修复

================================================
FILE: local/Build_KernelSU.sh
================================================
#!/bin/bash
#export all_proxy=socks5://192.168.x.x:x/
set -e

clear
echo "================================================"
echo "  KernelSU OnePlus Kernel Build Configuration   "
echo "================================================"
echo "  按回车键可直接使用 [方括号] 中的默认值"
echo ""

ask() {
    local prompt default reply
    prompt="$1"
    default="$2"
    
    read -p "$prompt [$default]: " reply
    echo "${reply:-$default}"
}

CPU=$(ask "请输入 CPU 分支 (例如: sm8750, sm8650, sm8550, sm8475)" "sm8650")
FEIL=$(ask "请输入手机型号 (例如: oneplus_13_b, oneplus_12_b, oneplus_11_b)" "oneplus_12_b")
ANDROID_VERSION=$(ask "请输入内核安卓 KMI 版本 (android15, android14, android13, android12)" "android14")
KERNEL_VERSION=$(ask "请输入内核版本 (6.6, 6.1, 5.15, 5.10)" "6.1")
SUSFS=$(ask "是否启用 SUSFS? (On/Off)" "Off")
lz4kd=$(ask "是否启用 lz4kd? (6.1 关闭时使用 lz4 + zstd; 6.6 关闭时使用 lz4) (On/Off)" "Off")
bbr=$(ask "是否启用 BBR 拥塞控制算法? (On/Off)" "Off")
bbg=$(ask "是否启用 Baseband-Guard 基带防护? (On/Off)" "On")
proxy=$(ask "是否添加代理性能优化? (如为联发科 CPU 必须选择 Off) (On/Off)" "On")
UNICODE_BYPASS=$(ask "是否添加Unicode零宽绕过修复补丁(高内核版本不推荐开启, 建议使用 https://t.me/real5ec1cff/271 无痛修复) (On/Off)" "Off")

clear
echo ""
echo "================================================="
echo "                   配置摘要"
echo "================================================="
echo "手机型号                 : $FEIL"
echo "CPU 分支                 : $CPU"
echo "安卓 KMI 版本            : $ANDROID_VERSION"
echo "内核版本                 : $KERNEL_VERSION"
echo "是否启用 SUSFS           : $SUSFS"
echo "是否启用 lz4kd           : $lz4kd"
echo "是否启用 BBR             : $bbr"
echo "是否启用 Baseband-Guard  : $bbg"
echo "是否启用代理优化          : $proxy"
echo "是否启用 Unicode 绕过修复 : $UNICODE_BYPASS"
echo "================================================="
read -p "按回车键开始构建流程..."
clear

echo "📦 正在准备构建工作空间..."
WORKSPACE=$PWD/build_workspace
sudo rm -rf "$WORKSPACE"
mkdir -p "$WORKSPACE"
cd "$WORKSPACE"

echo "📦 正在安装构建依赖..."
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \
  python3 git curl ccache libelf-dev \
  build-essential flex bison libssl-dev \
  libncurses-dev liblz4-tool zlib1g-dev \
  libxml2-utils rsync unzip python3-pip gawk dos2unix
clear
echo "✅ 必要构建依赖安装完成"

echo "⚙️ 正在配置 ccache 缓存..."
if [ "$SUSFS" == "On" ]; then
  export CCACHE_DIR="$HOME/.ccache_${FEIL}_Official_SUSFS"
else
  export CCACHE_DIR="$HOME/.ccache_${FEIL}_Official_NoSUSFS"
fi
export CCACHE_COMPILERCHECK="%compiler% -dumpmachine; %compiler% -dumpversion"
export CCACHE_NOHASHDIR="true"
export CCACHE_HARDLINK="true"
export CCACHE_MAXSIZE="20G"
export PATH="/usr/lib/ccache:$PATH"
mkdir -p "$CCACHE_DIR"
echo "✅ ccache 缓存目录: $CCACHE_DIR"
ccache -M "$CCACHE_MAXSIZE"
ccache -z

echo "🔐 正在配置 Git 用户信息..."
git config --global user.name "Local Builder"
git config --global user.email "builder@localhost"
echo "✅ Git 用户信息配置完成"

if ! command -v repo &> /dev/null; then
    echo "📥 未检测到 repo 工具,正在安装..."
    curl -fsSL https://storage.googleapis.com/git-repo-downloads/repo > ~/repo
    chmod a+x ~/repo
    sudo mv ~/repo /usr/local/bin/repo
    echo "✅ repo 工具安装完成"
else
    echo "ℹ️ 已检测到 repo 工具,跳过安装"
fi

echo "⬇️ 正在准备内核源码目录..."
sudo rm -rf kernel_workspace
mkdir -p kernel_workspace && cd kernel_workspace

echo "🌐 正在初始化 oneplus/${CPU} 分支、机型 ${FEIL} 的 manifest..."
repo init -u https://github.com/Xiaomichael/kernel_manifest.git -b refs/heads/oneplus/${CPU} -m ${FEIL}.xml --depth=1

echo "🔄 正在同步内核源码仓库 (使用 $(nproc --all) 线程)..."
repo sync -c -j$(nproc --all) --no-tags --no-clone-bundle --force-sync
echo "✅ 内核源码同步完成"

export adv=$ANDROID_VERSION
echo "🔧 正在清理并修改版本字符串..."
rm -f kernel_platform/common/android/abi_gki_protected_exports_* || echo "common 目录下无受保护导出表,无需删除"
rm -f kernel_platform/msm-kernel/android/abi_gki_protected_exports_* || echo "msm-kernel 目录下无受保护导出表,无需删除"

sed -i 's/ -dirty//g' kernel_platform/common/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/external/dtc/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/common/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/external/dtc/scripts/setlocalversion

if [ "$KERNEL_VERSION" != "6.6" ]; then
  sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/common/scripts/setlocalversion
  sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/msm-kernel/scripts/setlocalversion
  sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/external/dtc/scripts/setlocalversion
else
  ESCAPED_SUFFIX=$(printf '%s\n' "-${ANDROID_VERSION}-oki-xiaoxiaow" | sed 's:[\/&]:\\&:g')
  sed -i "s/-4k/${ESCAPED_SUFFIX}/g" kernel_platform/common/arch/arm64/configs/gki_defconfig
  sed -i 's/\${scm_version}//' kernel_platform/common/scripts/setlocalversion
  sed -i 's/\${scm_version}//' kernel_platform/msm-kernel/scripts/setlocalversion
fi

echo "✅ 内核仓库准备完毕并完成版本号清理"

if [ "$bbg" = "On" ]; then
    set -e
    cd kernel_platform/common
    echo "🛡️ 正在配置 Baseband-Guard 基带防护..."
    curl -sSL https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh -o setup.sh
    bash setup.sh
    cd ../..
    echo "✅ Baseband-Guard 配置完成"
fi

echo "⚡ 正在配置 KernelSU..."
cd kernel_platform

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
sed -i "s/DKSU_VERSION=16/DKSU_VERSION=${KSU_VERSION}/" kernel/Kbuild

echo "✅ KernelSU 版本信息配置完成"
cd ../..

echo "🔧 正在克隆所需补丁..."
if [ "$SUSFS" == "On" ]; then
  git clone https://github.com/cctv18/susfs4oki.git -b oki-${ANDROID_VERSION}-${KERNEL_VERSION}
fi
git clone https://github.com/Xiaomichael/kernel_patches.git
git clone https://github.com/ShirkNeko/SukiSU_patch.git

cd kernel_platform
echo "📝 正在复制补丁文件..."
  cp ../susfs4oki/kernel_patches/50_add_susfs_in_gki-${ANDROID_VERSION}-${KERNEL_VERSION}.patch ./common/
  cp ../susfs4oki/kernel_patches/fs/* ./common/fs/
  cp ../susfs4oki/kernel_patches/include/linux/* ./common/include/linux/
fi

cp ../kernel_patches/zram_patches/001-lz4.patch ./common/
cp ../kernel_patches/zram_patches/lz4armv8.S ./common/lib
cp ../kernel_patches/zram_patches/002-zstd.patch ./common/

if [ "$UNICODE_BYPASS" = "On" ]; then
  if [ "$KERNEL_VERSION" = "6.1" ] || [ "$KERNEL_VERSION" = "6.6" ]; then
    cp ../kernel_patches/common/unicode_bypass_fix_6.1+.patch ./common/unicode_bypass_fix.patch
  elif [ "$KERNEL_VERSION" = "5.15" ] || [ "$KERNEL_VERSION" = "5.10" ]; then
    cp ../kernel_patches/common/unicode_bypass_fix_6.1-.patch ./common/unicode_bypass_fix.patch
  fi
fi

if [ "$lz4kd" = "On" ]; then
  echo "🚀 正在复制 lz4kd 相关补丁..."
  cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./common/include/linux
  cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./common/lib
  cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./common/crypto
  cp -r ../SukiSU_patch/other/zram/lz4k_oplus ./common/lib/
fi

echo "🔧 正在应用补丁..."

if [ "$SUSFS" == "On" ]; then
  cd ./KernelSU
  patch -p1 < 10_enable_susfs_for_ksu.patch || true
fi

if [ "$SUSFS" == "On" ]; then
  cd ../common
  patch -p1 < 50_add_susfs_in_gki-${ANDROID_VERSION}-${KERNEL_VERSION}.patch || true
  cp ../../kernel_patches/69_hide_stuff.patch ./
  patch -p1 -F 3 < 69_hide_stuff.patch
elif [ "$SUSFS" == "Off" ]; then
  cd ./common
fi

if [ "$UNICODE_BYPASS" = "On" ]; then
  echo "📦 正在应用Unicode零宽绕过修复补丁..."
  patch -p1 < unicode_bypass_fix.patch
fi

if [ "$lz4kd" = "Off" ] && [ "$KERNEL_VERSION" = "6.1" ]; then
  echo "📦 正在为 6.1 应用 lz4 + zstd 补丁..."
  git apply -p1 < 001-lz4.patch || true
  patch -p1 < 002-zstd.patch || true
fi

if [ "$lz4kd" = "Off" ] && [ "$KERNEL_VERSION" = "6.6" ]; then
  echo "📦 正在为 6.6 应用 lz4 补丁..."
  git apply -p1 < 001-lz4.patch || true
fi

if [ "$lz4kd" = "On" ]; then
  echo "📦 正在应用 lz4kd / lz4k_oplus 补丁..."
  cp ../../SukiSU_patch/other/zram/zram_patch/${KERNEL_VERSION}/lz4kd.patch ./
  patch -p1 -F 3 < lz4kd.patch || true
  cp ../../SukiSU_patch/other/zram/zram_patch/${KERNEL_VERSION}/lz4k_oplus.patch ./
  patch -p1 -F 3 < lz4k_oplus.patch || true
fi
echo "✅ 所有补丁应用完成"
cd ../..

if [ "$KERNEL_VERSION" = "6.6" ]; then
  cd kernel_platform/common
  echo "⬇️ 正在拉取风驰补丁"
  if [ "$FEIL" = "oneplus_ace5_ultra" ] || [ "$FEIL" = "oneplus_ace5_ultra_b" ]; then
      echo "⚠️ Ace5 Ultra 需要使用 mt6991 分支的补丁"
      git clone https://github.com/Numbersf/SCHED_PATCH.git -b "mt6991"
  else
      echo "⚙️ 使用 sm8750 分支的补丁"
      git clone https://github.com/Numbersf/SCHED_PATCH.git -b "sm8750"
  fi

  cp ./SCHED_PATCH/fengchi_$FEIL.patch ./

  if [[ -f "fengchi_$FEIL.patch" ]]; then
    echo "⚙️ 开始应用风驰补丁"
    dos2unix "fengchi_$FEIL.patch"
    patch -p1 -F 3 < "fengchi_$FEIL.patch"
    echo "✅ 完美风驰补丁应用完成"
  else
    echo "⚠️ 该6.6机型暂不支持风驰补丁, 正在应用OGKI转GKI补丁"
    sed -i '1iobj-y += hmbird_patch.o' drivers/Makefile
    wget https://github.com/Numbersf/Action-Build/raw/SukiSU-Ultra/patches/hmbird_patch.patch
    echo "⚙️ 正在打OGKI转换GKI补丁"
    patch -p1 -F 3 < hmbird_patch.patch
    echo "✅ OGKI转换GKI_patch完成"
  fi
  cd ../..
fi

echo "⚙️ 正在配置内核编译选项..."
DEFCONFIG_PATH="$WORKSPACE/kernel_workspace/kernel_platform/common/arch/arm64/configs/gki_defconfig"

echo "CONFIG_KSU=y" >> "$DEFCONFIG_PATH"

#添加对 Mountify (backslashxx/mountify) 模块的支持
echo "CONFIG_TMPFS_XATTR=y" >> "$DEFCONFIG_PATH"
echo "CONFIG_TMPFS_POSIX_ACL=y" >> "$DEFCONFIG_PATH"

if [ "$SUSFS" == "On" ]; then
  echo "⚡ 配置 SUSFS 中..."
  cat <<EOT >> "$DEFCONFIG_PATH"
CONFIG_KSU_SUSFS=y
CONFIG_KSU_SUSFS_SUS_PATH=y
CONFIG_KSU_SUSFS_SUS_MOUNT=y
CONFIG_KSU_SUSFS_SUS_KSTAT=y
CONFIG_KSU_SUSFS_SPOOF_UNAME=y
CONFIG_KSU_SUSFS_ENABLE_LOG=y
CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS=y
CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG=y
CONFIG_KSU_SUSFS_OPEN_REDIRECT=y
CONFIG_KSU_SUSFS_SUS_MAP=y
EOT
else
  echo "CONFIG_KSU_SUSFS=n" >> "$DEFCONFIG_PATH"
fi

if [ "$bbg" = "On" ]; then
  echo "⚡ 配置 BBG 中..."
  cat <<EOT >> "$DEFCONFIG_PATH"
CONFIG_BBG=y
CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf,baseband_guard"
EOT
fi

if [ "$bbr" = "On" ]; then
  echo "🌐 启用 BBR 网络算法..."
  cat <<EOT >> "$DEFCONFIG_PATH"
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BBR=y
CONFIG_NET_SCH_FQ=y
CONFIG_TCP_CONG_BIC=n
CONFIG_TCP_CONG_WESTWOOD=n
CONFIG_TCP_CONG_HTCP=n
EOT
fi

if [ "$lz4kd" = "On" ]; then
  echo "📦 启用 lz4kd 与 写回支持..."
  cat <<EOT >> "$DEFCONFIG_PATH"
CONFIG_CRYPTO_LZ4KD=y
CONFIG_CRYPTO_LZ4K_OPLUS=y
CONFIG_ZRAM_WRITEBACK=y
EOT
fi

if [ "$KERNEL_VERSION" = "6.1" ] || [ "$KERNEL_VERSION" = "6.6" ]; then
  echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> "$DEFCONFIG_PATH"
fi

if [ "$proxy" = "On" ]; then
  echo "📦 添加代理相关网络优化选项..."
  cat <<EOT >> "$DEFCONFIG_PATH"
CONFIG_BPF_STREAM_PARSER=y
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
CONFIG_NETFILTER_XT_SET=y
CONFIG_IP_SET=y
CONFIG_IP_SET_MAX=65534
CONFIG_IP_SET_BITMAP_IP=y
CONFIG_IP_SET_BITMAP_IPMAC=y
CONFIG_IP_SET_BITMAP_PORT=y
CONFIG_IP_SET_HASH_IP=y
CONFIG_IP_SET_HASH_IPMARK=y
CONFIG_IP_SET_HASH_IPPORT=y
CONFIG_IP_SET_HASH_IPPORTIP=y
CONFIG_IP_SET_HASH_IPPORTNET=y
CONFIG_IP_SET_HASH_IPMAC=y
CONFIG_IP_SET_HASH_MAC=y
CONFIG_IP_SET_HASH_NETPORTNET=y
CONFIG_IP_SET_HASH_NET=y
CONFIG_IP_SET_HASH_NETNET=y
CONFIG_IP_SET_HASH_NETPORT=y
CONFIG_IP_SET_HASH_NETIFACE=y
CONFIG_IP_SET_LIST_SET=y
CONFIG_IP6_NF_NAT=y
CONFIG_IP6_NF_TARGET_MASQUERADE=y
EOT
fi

if [ "$KERNEL_VERSION" = "5.10" ] || [ "$KERNEL_VERSION" = "5.15" ]; then
  echo "📦 正在为 5.10 / 5.15 系配置 LTO..."
  sed -i 's/^CONFIG_LTO=n/CONFIG_LTO=y/' "$DEFCONFIG_PATH"
  sed -i 's/^CONFIG_LTO_CLANG_FULL=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG_PATH"
  sed -i 's/^CONFIG_LTO_CLANG_NONE=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG_PATH"
  grep -q '^CONFIG_LTO_CLANG_THIN=y' "$DEFCONFIG_PATH" || echo 'CONFIG_LTO_CLANG_THIN=y' >> "$DEFCONFIG_PATH"
fi

echo "CONFIG_HEADERS_INSTALL=n" >> "$DEFCONFIG_PATH"

sed -i 's/check_defconfig//' "$WORKSPACE/kernel_workspace/kernel_platform/common/build.config.gki"

echo "✅ defconfig 配置更新完成"
cd ../..

echo "🔨 开始内核编译..."
cd "$WORKSPACE/kernel_workspace/kernel_platform/common"

MAKE_CMD_COMMON="make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=\"ccache clang\" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all"

export KBUILD_BUILD_USER="xiaoxiaow"
export KBUILD_BUILD_HOST="xiaoxiaow_build"

if [ "$KERNEL_VERSION" = "6.1" ]; then
    export KBUILD_BUILD_TIMESTAMP="Tue Mar 10 03:53:33 UTC 2026"
    export KBUILD_BUILD_VERSION=1
    export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH"
    eval "$MAKE_CMD_COMMON KCFLAGS+=-O2"
elif [ "$KERNEL_VERSION" = "6.6" ]; then
    export KBUILD_BUILD_VERSION=1
    export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r510928/bin:$PATH"
    eval "$MAKE_CMD_COMMON KCFLAGS+=-O2"
elif [ "$KERNEL_VERSION" = "5.15" ]; then
    export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r450784e/bin:$PATH"
    eval "$MAKE_CMD_COMMON"
elif [ "$KERNEL_VERSION" = "5.10" ]; then
    export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts-master/clang/host/linux-x86/clang-r416183b/bin:$PATH"
    eval "make -j$(nproc --all) LLVM_IAS=1 LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=\"ccache clang\" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all"
else
    echo "❌ 不支持的内核版本: $KERNEL_VERSION" && exit 1
fi

echo "📊 当前 ccache 统计信息如下:"
ccache -s
echo "✅ 内核编译完成"
cd "$WORKSPACE"

echo "📦 正在获取 AnyKernel3 并准备打包..."
git clone https://github.com/Xiaomichael/AnyKernel3 --depth=1
rm -rf ./AnyKernel3/.git

IMAGE_PATH=$(find "$WORKSPACE/kernel_workspace/kernel_platform/common/out/" -name "Image" | head -n 1)
if [ -z "$IMAGE_PATH" ]; then echo "❌ 严重错误:编译完成后未找到 Kernel Image!" && exit 1; fi

echo "✅ 已找到 Kernel Image: $IMAGE_PATH"
cp "$IMAGE_PATH" ./AnyKernel3/Image

if [ "$lz4kd" = "On" ]; then
  ARTIFACT_NAME="${FEIL}_KernelSU_lz4kd_${KSUVER}"
elif [ "$KERNEL_VERSION" = "6.1" ]; then
  ARTIFACT_NAME="${FEIL}_KernelSU_lz4_zstd_${KSUVER}"
elif [ "$KERNEL_VERSION" = "6.6" ]; then
  ARTIFACT_NAME="${FEIL}_KernelSU_lz4_${KSUVER}"
else
  ARTIFACT_NAME="${FEIL}_KernelSU_${KSUVER}"
fi
if [ "$SUSFS" = "On" ]; then
  ARTIFACT_NAME="${ARTIFACT_NAME}_SUSFS"
fi

FINAL_ZIP_NAME="${ARTIFACT_NAME}.zip"

echo "📦 正在创建最终可刷入压缩包: ${FINAL_ZIP_NAME}..."
cd AnyKernel3 && zip -q -r9 "../${FINAL_ZIP_NAME}" ./* && cd ..

echo ""
echo "================================================="
echo "                  构建完成!"
echo "================================================="
echo "-> 可刷入内核压缩包路径: $WORKSPACE/${FINAL_ZIP_NAME}"

ZRAM_KO_PATH=$(find "$WORKSPACE/kernel_workspace/kernel_platform/common/out/" -name "zram.ko" | head -n 1)
if [ -n "$ZRAM_KO_PATH" ]; then
    cp "$ZRAM_KO_PATH" "$WORKSPACE/"
    echo "-> zram.ko 模块路径: $WORKSPACE/zram.ko"
fi

echo "================================================="
echo ""


================================================
FILE: local/Build_Next.sh
================================================
#!/bin/bash
#export all_proxy=socks5://192.168.x.x:x/
set -e

clear
echo "===================================================="
echo "  KernelSU Next OnePlus Kernel Build Configuration  "
echo "===================================================="
echo "  按回车键可直接使用 [方括号] 中的默认值"
echo ""

ask() {
    local prompt default reply
    prompt="$1"
    default="$2"
    
    read -p "$prompt [$default]: " reply
    echo "${reply:-$default}"
}

CPU=$(ask "请输入 CPU 分支 (例如: sm8750, sm8650, sm8550, sm8475)" "sm8650")
FEIL=$(ask "请输入手机型号 (例如: oneplus_13_b, oneplus_12_b, oneplus_11_b)" "oneplus_12_b")
ANDROID_VERSION=$(ask "请输入内核安卓 KMI 版本 (android15, android14, android13, android12)" "android14")
KERNEL_VERSION=$(ask "请输入内核版本 (6.6, 6.1, 5.15, 5.10)" "6.1")
SUSFS=$(ask "是否启用 SUSFS? (On/Off)" "Off")
lz4kd=$(ask "是否启用 lz4kd? (6.1 关闭时使用 lz4 + zstd; 6.6 关闭时使用 lz4) (On/Off)" "Off")
bbr=$(ask "是否启用 BBR 拥塞控制算法? (On/Off)" "Off")
bbg=$(ask "是否启用 Baseband-Guard 基带防护? (On/Off)" "On")
proxy=$(ask "是否添加代理性能优化? (如为联发科 CPU 必须选择 Off) (On/Off)" "On")
UNICODE_BYPASS=$(ask "是否添加Unicode零宽绕过修复补丁(高内核版本不推荐开启, 建议使用 https://t.me/real5ec1cff/271 无痛修复) (On/Off)" "Off")

clear
echo ""
echo "================================================="
echo "                   配置摘要"
echo "================================================="
echo "手机型号                 : $FEIL"
echo "CPU 分支                 : $CPU"
echo "安卓 KMI 版本            : $ANDROID_VERSION"
echo "内核版本                 : $KERNEL_VERSION"
echo "是否启用 SUSFS           : $SUSFS"
echo "是否启用 lz4kd           : $lz4kd"
echo "是否启用 BBR             : $bbr"
echo "是否启用 Baseband-Guard  : $bbg"
echo "是否启用代理优化          : $proxy"
echo "是否启用 Unicode 绕过修复 : $UNICODE_BYPASS"
echo "================================================="
read -p "按回车键开始构建流程..."
clear

echo "📦 正在准备构建工作空间..."
WORKSPACE=$PWD/build_workspace
sudo rm -rf "$WORKSPACE"
mkdir -p "$WORKSPACE"
cd "$WORKSPACE"

echo "📦 正在安装构建依赖..."
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \
  python3 git curl ccache libelf-dev \
  build-essential flex bison libssl-dev \
  libncurses-dev liblz4-tool zlib1g-dev \
  libxml2-utils rsync unzip python3-pip gawk dos2unix
clear
echo "✅ 必要构建依赖安装完成"

echo "⚙️ 正在配置 ccache 缓存..."
if [ "$SUSFS" == "On" ]; then
  export CCACHE_DIR="$HOME/.ccache_${FEIL}_Next_SUSFS"
else
  export CCACHE_DIR="$HOME/.ccache_${FEIL}_Next_NoSUSFS"
fi
export CCACHE_COMPILERCHECK="%compiler% -dumpmachine; %compiler% -dumpversion"
export CCACHE_NOHASHDIR="true"
export CCACHE_HARDLINK="true"
export CCACHE_MAXSIZE="20G"
export PATH="/usr/lib/ccache:$PATH"
mkdir -p "$CCACHE_DIR"
echo "✅ ccache 缓存目录: $CCACHE_DIR"
ccache -M "$CCACHE_MAXSIZE"
ccache -z

echo "🔐 正在配置 Git 用户信息..."
git config --global user.name "Local Builder"
git config --global user.email "builder@localhost"
echo "✅ Git 用户信息配置完成"

if ! command -v repo &> /dev/null; then
    echo "📥 未检测到 repo 工具,正在安装..."
    curl -fsSL https://storage.googleapis.com/git-repo-downloads/repo > ~/repo
    chmod a+x ~/repo
    sudo mv ~/repo /usr/local/bin/repo
    echo "✅ repo 工具安装完成"
else
    echo "ℹ️ 已检测到 repo 工具,跳过安装"
fi

echo "⬇️ 正在准备内核源码目录..."
sudo rm -rf kernel_workspace
mkdir -p kernel_workspace && cd kernel_workspace

echo "🌐 正在初始化 oneplus/${CPU} 分支、机型 ${FEIL} 的 manifest..."
repo init -u https://github.com/Xiaomichael/kernel_manifest.git -b refs/heads/oneplus/${CPU} -m ${FEIL}.xml --depth=1

echo "🔄 正在同步内核源码仓库 (使用 $(nproc --all) 线程)..."
repo sync -c -j$(nproc --all) --no-tags --no-clone-bundle --force-sync
echo "✅ 内核源码同步完成"

export adv=$ANDROID_VERSION
echo "🔧 正在清理并修改版本字符串..."
rm -f kernel_platform/common/android/abi_gki_protected_exports_* || echo "common 目录下无受保护导出表,无需删除"
rm -f kernel_platform/msm-kernel/android/abi_gki_protected_exports_* || echo "msm-kernel 目录下无受保护导出表,无需删除"

sed -i 's/ -dirty//g' kernel_platform/common/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/external/dtc/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/common/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/external/dtc/scripts/setlocalversion

if [ "$KERNEL_VERSION" != "6.6" ]; then
  sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/common/scripts/setlocalversion
  sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/msm-kernel/scripts/setlocalversion
  sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/external/dtc/scripts/setlocalversion
else
  ESCAPED_SUFFIX=$(printf '%s\n' "-${ANDROID_VERSION}-oki-xiaoxiaow" | sed 's:[\/&]:\\&:g')
  sed -i "s/-4k/${ESCAPED_SUFFIX}/g" kernel_platform/common/arch/arm64/configs/gki_defconfig
  sed -i 's/\${scm_version}//' kernel_platform/common/scripts/setlocalversion
  sed -i 's/\${scm_version}//' kernel_platform/msm-kernel/scripts/setlocalversion
fi

echo "✅ 内核仓库准备完毕并完成版本号清理"

if [ "$bbg" = "On" ]; then
    set -e
    cd kernel_platform/common
    echo "🛡️ 正在配置 Baseband-Guard 基带防护..."
    curl -sSL https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh -o setup.sh
    bash setup.sh
    cd ../..
    echo "✅ Baseband-Guard 配置完成"
fi

echo "⚡ 正在配置 KernelSU Next..."
cd kernel_platform
curl -LSs "https://raw.githubusercontent.com/pershoot/KernelSU-Next/dev-susfs/kernel/setup.sh" | bash -s dev-susfs

cd KernelSU-Next
KSU_VERSION=$(expr $(curl -sI "https://api.github.com/repos/KernelSU-Next/KernelSU-Next/commits?sha=dev&per_page=1" | grep -i "link:" | sed -n 's/.*page=\([0-9]*\)>; rel="last".*/\1/p') "+" 30000)
export KSUVER=$(expr $KSU_VERSION)
sed -i "s/DKSU_VERSION=11998/DKSU_VERSION=${KSU_VERSION}/" kernel/Makefile

echo "✅ KernelSU Next 版本信息配置完成."
cd ../..

echo "🔧 正在克隆所需补丁..."
if [ "$SUSFS" == "On" ]; then
  git clone https://github.com/cctv18/susfs4oki.git -b oki-${ANDROID_VERSION}-${KERNEL_VERSION}
fi
git clone https://github.com/Xiaomichael/kernel_patches.git
git clone https://github.com/ShirkNeko/SukiSU_patch.git

cd kernel_platform
echo "📝 正在复制补丁文件..."

if [ "$SUSFS" == "On" ]; then
  cp ../susfs4oki/kernel_patches/50_add_susfs_in_gki-${ANDROID_VERSION}-${KERNEL_VERSION}.patch ./common/
  cp ../susfs4oki/kernel_patches/fs/* ./common/fs/
  cp ../susfs4oki/kernel_patches/include/linux/* ./common/include/linux/
else
  cp ../kernel_patches/sukisu/scope_min_manual_hooks_v1.9.patch ./common/
fi

cp ../kernel_patches/zram_patches/001-lz4.patch ./common/
cp ../kernel_patches/zram_patches/lz4armv8.S ./common/lib
cp ../kernel_patches/zram_patches/002-zstd.patch ./common/

if [ "$UNICODE_BYPASS" = "On" ]; then
  if [ "$KERNEL_VERSION" = "6.1" ] || [ "$KERNEL_VERSION" = "6.6" ]; then
    cp ../kernel_patches/common/unicode_bypass_fix_6.1+.patch ./common/unicode_bypass_fix.patch
  elif [ "$KERNEL_VERSION" = "5.15" ] || [ "$KERNEL_VERSION" = "5.10" ]; then
    cp ../kernel_patches/common/unicode_bypass_fix_6.1-.patch ./common/unicode_bypass_fix.patch
  fi
fi

if [ "$lz4kd" = "On" ]; then
  echo "🚀 正在复制 lz4kd 相关补丁..."
  cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./common/include/linux
  cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./common/lib
  cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./common/crypto
  cp -r ../SukiSU_patch/other/zram/lz4k_oplus ./common/lib/
fi

echo "🔧 正在应用补丁..."
cd ./common

if [ "$UNICODE_BYPASS" = "On" ]; then
  echo "📦 正在应用Unicode零宽绕过修复补丁..."
  patch -p1 < unicode_bypass_fix.patch
fi

if [ "$lz4kd" = "Off" ] && [ "$KERNEL_VERSION" = "6.1" ]; then
  echo "📦 正在为 6.1 应用 lz4 + zstd 补丁..."
  git apply -p1 < 001-lz4.patch || true
  patch -p1 < 002-zstd.patch || true
fi

if [ "$lz4kd" = "Off" ] && [ "$KERNEL_VERSION" = "6.6" ]; then
  echo "📦 正在为 6.6 应用 lz4 补丁..."
  git apply -p1 < 001-lz4.patch || true
fi

if [ "$lz4kd" = "On" ]; then
  echo "📦 正在应用 lz4kd / lz4k_oplus 补丁..."
  cp ../../SukiSU_patch/other/zram/zram_patch/${KERNEL_VERSION}/lz4kd.patch ./
  patch -p1 -F 3 < lz4kd.patch || true
  cp ../../SukiSU_patch/other/zram/zram_patch/${KERNEL_VERSION}/lz4k_oplus.patch ./
  patch -p1 -F 3 < lz4k_oplus.patch || true
fi

if [ "$SUSFS" == "On" ]; then
  patch -p1 < 50_add_susfs_in_gki-${ANDROID_VERSION}-${KERNEL_VERSION}.patch || true
  cp ../../kernel_patches/69_hide_stuff.patch ./
  patch -p1 -F 3 < 69_hide_stuff.patch || true
else
  echo "📦 应用 MANUAL_HOOK 补丁..."
  patch -p1 --fuzz=3 < scope_min_manual_hooks_v1.9.patch
fi

echo "✅ 所有补丁应用完成"
cd ../..

if [ "$KERNEL_VERSION" = "6.6" ]; then
  cd kernel_platform/common
  echo "⬇️ 正在拉取风驰补丁"
  if [ "$FEIL" = "oneplus_ace5_ultra" ] || [ "$FEIL" = "oneplus_ace5_ultra_b" ]; then
      echo "⚠️ Ace5 Ultra 需要使用 mt6991 分支的补丁"
      git clone https://github.com/Numbersf/SCHED_PATCH.git -b "mt6991"
  else
      echo "⚙️ 使用 sm8750 分支的补丁"
      git clone https://github.com/Numbersf/SCHED_PATCH.git -b "sm8750"
  fi

  cp ./SCHED_PATCH/fengchi_$FEIL.patch ./

  if [[ -f "fengchi_$FEIL.patch" ]]; then
    echo "⚙️ 开始应用风驰补丁"
    dos2unix "fengchi_$FEIL.patch"
    patch -p1 -F 3 < "fengchi_$FEIL.patch"
    echo "✅ 完美风驰补丁应用完成"
  else
    echo "⚠️ 该6.6机型暂不支持风驰补丁, 正在应用OGKI转GKI补丁"
    sed -i '1iobj-y += hmbird_patch.o' drivers/Makefile
    wget https://github.com/Numbersf/Action-Build/raw/SukiSU-Ultra/patches/hmbird_patch.patch
    echo "⚙️ 正在打OGKI转换GKI补丁"
    patch -p1 -F 3 < hmbird_patch.patch
    echo "✅ OGKI转换GKI_patch完成"
  fi
  cd ../..
fi

echo "⚙️ 正在配置内核编译选项..."
DEFCONFIG_PATH="$WORKSPACE/kernel_workspace/kernel_platform/common/arch/arm64/configs/gki_defconfig"

echo "CONFIG_KSU=y" >> "$DEFCONFIG_PATH"

if [ "$SUSFS" = "On" ]; then
    echo "📦 启用 SUSFS 功能..."
    cat <<EOT >> "$DEFCONFIG_PATH"
CONFIG_KSU_SUSFS=y
CONFIG_KSU_SUSFS_SUS_PATH=y
CONFIG_KSU_SUSFS_SUS_MOUNT=y
CONFIG_KSU_SUSFS_SUS_KSTAT=y
CONFIG_KSU_SUSFS_SPOOF_UNAME=y
CONFIG_KSU_SUSFS_ENABLE_LOG=y
CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS=y
CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG=y
CONFIG_KSU_SUSFS_OPEN_REDIRECT=y
CONFIG_KSU_SUSFS_SUS_MAP=y
EOT
else
    echo "📦 启用 MANUAL_HOOK..."
    cat <<EOT >> "$DEFCONFIG_PATH"
CONFIG_KSU_SUSFS=n
CONFIG_KSU_MANUAL_HOOK=y
EOT
fi

#添加对 Mountify (backslashxx/mountify) 模块的支持
echo "CONFIG_TMPFS_XATTR=y" >> "$DEFCONFIG_PATH"
echo "CONFIG_TMPFS_POSIX_ACL=y" >> "$DEFCONFIG_PATH"

if [ "$bbg" = "On" ]; then
  echo "⚡ 配置 BBG 中..."
  cat <<EOT >> "$DEFCONFIG_PATH"
CONFIG_BBG=y
CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf,baseband_guard"
EOT
fi

if [ "$bbr" = "On" ]; then
  echo "🌐 启用 BBR 网络算法..."
  cat <<EOT >> "$DEFCONFIG_PATH"
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BBR=y
CONFIG_NET_SCH_FQ=y
CONFIG_TCP_CONG_BIC=n
CONFIG_TCP_CONG_WESTWOOD=n
CONFIG_TCP_CONG_HTCP=n
EOT
fi

if [ "$lz4kd" = "On" ]; then
  echo "📦 启用 lz4kd 与 写回支持..."
  cat <<EOT >> "$DEFCONFIG_PATH"
CONFIG_CRYPTO_LZ4KD=y
CONFIG_CRYPTO_LZ4K_OPLUS=y
CONFIG_ZRAM_WRITEBACK=y
EOT
fi

if [ "$KERNEL_VERSION" = "6.1" ] || [ "$KERNEL_VERSION" = "6.6" ]; then
  echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> "$DEFCONFIG_PATH"
fi

if [ "$proxy" = "On" ]; then
  echo "📦 添加代理相关网络优化选项..."
  cat <<EOT >> "$DEFCONFIG_PATH"
CONFIG_BPF_STREAM_PARSER=y
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
CONFIG_NETFILTER_XT_SET=y
CONFIG_IP_SET=y
CONFIG_IP_SET_MAX=65534
CONFIG_IP_SET_BITMAP_IP=y
CONFIG_IP_SET_BITMAP_IPMAC=y
CONFIG_IP_SET_BITMAP_PORT=y
CONFIG_IP_SET_HASH_IP=y
CONFIG_IP_SET_HASH_IPMARK=y
CONFIG_IP_SET_HASH_IPPORT=y
CONFIG_IP_SET_HASH_IPPORTIP=y
CONFIG_IP_SET_HASH_IPPORTNET=y
CONFIG_IP_SET_HASH_IPMAC=y
CONFIG_IP_SET_HASH_MAC=y
CONFIG_IP_SET_HASH_NETPORTNET=y
CONFIG_IP_SET_HASH_NET=y
CONFIG_IP_SET_HASH_NETNET=y
CONFIG_IP_SET_HASH_NETPORT=y
CONFIG_IP_SET_HASH_NETIFACE=y
CONFIG_IP_SET_LIST_SET=y
CONFIG_IP6_NF_NAT=y
CONFIG_IP6_NF_TARGET_MASQUERADE=y
EOT
fi

if [ "$KERNEL_VERSION" = "5.10" ] || [ "$KERNEL_VERSION" = "5.15" ]; then
  echo "📦 正在为 5.10 / 5.15 系配置 LTO..."
  sed -i 's/^CONFIG_LTO=n/CONFIG_LTO=y/' "$DEFCONFIG_PATH"
  sed -i 's/^CONFIG_LTO_CLANG_FULL=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG_PATH"
  sed -i 's/^CONFIG_LTO_CLANG_NONE=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG_PATH"
  grep -q '^CONFIG_LTO_CLANG_THIN=y' "$DEFCONFIG_PATH" || echo 'CONFIG_LTO_CLANG_THIN=y' >> "$DEFCONFIG_PATH"
fi

echo "CONFIG_HEADERS_INSTALL=n" >> "$DEFCONFIG_PATH"

sed -i 's/check_defconfig//' "$WORKSPACE/kernel_workspace/kernel_platform/common/build.config.gki"

echo "✅ defconfig 配置更新完成"
cd ../..

echo "🔨 开始内核编译..."
cd "$WORKSPACE/kernel_workspace/kernel_platform/common"

MAKE_CMD_COMMON="make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=\"ccache clang\" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all"

export KBUILD_BUILD_USER="xiaoxiaow"
export KBUILD_BUILD_HOST="xiaoxiaow_build"

if [ "$KERNEL_VERSION" = "6.1" ]; then
    export KBUILD_BUILD_TIMESTAMP="Tue Mar 10 03:53:33 UTC 2026"
    export KBUILD_BUILD_VERSION=1
    export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH"
    eval "$MAKE_CMD_COMMON KCFLAGS+=-O2"
elif [ "$KERNEL_VERSION" = "6.6" ]; then
    export KBUILD_BUILD_VERSION=1
    export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r510928/bin:$PATH"
    eval "$MAKE_CMD_COMMON KCFLAGS+=-O2"
elif [ "$KERNEL_VERSION" = "5.15" ]; then
    export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r450784e/bin:$PATH"
    eval "$MAKE_CMD_COMMON"
elif [ "$KERNEL_VERSION" = "5.10" ]; then
    export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts-master/clang/host/linux-x86/clang-r416183b/bin:$PATH"
    eval "make -j$(nproc --all) LLVM_IAS=1 LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=\"ccache clang\" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all"
else
    echo "❌ 不支持的内核版本: $KERNEL_VERSION" && exit 1
fi

echo "📊 当前 ccache 统计信息如下:"
ccache -s
echo "✅ 内核编译完成"
cd "$WORKSPACE"

echo "📦 正在获取 AnyKernel3 并准备打包..."
git clone https://github.com/Xiaomichael/AnyKernel3 --depth=1
rm -rf ./AnyKernel3/.git

IMAGE_PATH=$(find "$WORKSPACE/kernel_workspace/kernel_platform/common/out/" -name "Image" | head -n 1)
if [ -z "$IMAGE_PATH" ]; then echo "❌ 严重错误:编译完成后未找到 Kernel Image!" && exit 1; fi

echo "✅ 已找到 Kernel Image: $IMAGE_PATH"
cp "$IMAGE_PATH" ./AnyKernel3/Image

if [ "$lz4kd" = "On" ]; then
  ARTIFACT_NAME="${FEIL}_KernelSU_Next_lz4kd_${KSUVER}"
elif [ "$KERNEL_VERSION" = "6.1" ]; then
  ARTIFACT_NAME="${FEIL}_KernelSU_Next_lz4_zstd_${KSUVER}"
elif [ "$KERNEL_VERSION" = "6.6" ]; then
  ARTIFACT_NAME="${FEIL}_KernelSU_Next_lz4_${KSUVER}"
else
  ARTIFACT_NAME="${FEIL}_KernelSU_Next_${KSUVER}"
fi
if [ "$SUSFS" = "On" ]; then
  ARTIFACT_NAME="${ARTIFACT_NAME}_SUSFS"
fi

FINAL_ZIP_NAME="${ARTIFACT_NAME}.zip"

echo "📦 正在创建最终可刷入压缩包: ${FINAL_ZIP_NAME}..."
cd AnyKernel3 && zip -q -r9 "../${FINAL_ZIP_NAME}" ./* && cd ..

echo ""
echo "================================================="
echo "                  构建完成!"
echo "================================================="
echo "-> 可刷入内核压缩包路径: $WORKSPACE/${FINAL_ZIP_NAME}"

ZRAM_KO_PATH=$(find "$WORKSPACE/kernel_workspace/kernel_platform/common/out/" -name "zram.ko" | head -n 1)
if [ -n "$ZRAM_KO_PATH" ]; then
    cp "$ZRAM_KO_PATH" "$WORKSPACE/"
    echo "-> zram.ko 模块路径: $WORKSPACE/zram.ko"
fi

echo "================================================="
echo ""


================================================
FILE: local/Build_Only.sh
================================================
#!/bin/bash
#export all_proxy=socks5://192.168.x.x:x/
set -e

clear
echo "============================================="
echo "     OnePlus Kernel Build Configuration      "
echo "============================================="
echo "  按回车键可直接使用 [方括号] 中的默认值"
echo ""

ask() {
    local prompt default reply
    prompt="$1"
    default="$2"
    
    read -p "$prompt [$default]: " reply
    echo "${reply:-$default}"
}

CPU=$(ask "请输入 CPU 分支 (例如: sm8750, sm8650, sm8550, sm8475)" "sm8650")
FEIL=$(ask "请输入手机型号 (例如: oneplus_13_b, oneplus_12_b, oneplus_11_b)" "oneplus_12_b")
ANDROID_VERSION=$(ask "请输入内核安卓 KMI 版本 (android15, android14, android13, android12)" "android14")
KERNEL_VERSION=$(ask "请输入内核版本 (6.6, 6.1, 5.15, 5.10)" "6.1")
lz4kd=$(ask "是否启用 lz4kd? (6.1 关闭时使用 lz4 + zstd; 6.6 关闭时使用 lz4) (On/Off)" "Off")
bbr=$(ask "是否启用 BBR 拥塞控制算法? (On/Off)" "Off")
bbg=$(ask "是否启用 Baseband-Guard 基带防护? (On/Off)" "On")
proxy=$(ask "是否添加代理性能优化? (如为联发科 CPU 必须选择 Off) (On/Off)" "On")
UNICODE_BYPASS=$(ask "是否添加Unicode零宽绕过修复补丁(高内核版本不推荐开启, 建议使用 https://t.me/real5ec1cff/271 无痛修复) (On/Off)" "Off")

clear
echo ""
echo "================================================="
echo "                   配置摘要"
echo "================================================="
echo "手机型号                 : $FEIL"
echo "CPU 分支                 : $CPU"
echo "安卓 KMI 版本            : $ANDROID_VERSION"
echo "内核版本                 : $KERNEL_VERSION"
echo "是否启用 lz4kd           : $lz4kd"
echo "是否启用 BBR             : $bbr"
echo "是否启用 Baseband-Guard  : $bbg"
echo "是否启用代理优化          : $proxy"
echo "是否启用 Unicode 绕过修复 : $UNICODE_BYPASS"
echo "================================================="
read -p "按回车键开始构建流程..."
clear

echo "📦 正在准备构建工作空间..."
WORKSPACE=$PWD/build_workspace
sudo rm -rf "$WORKSPACE"
mkdir -p "$WORKSPACE"
cd "$WORKSPACE"

echo "📦 正在安装构建依赖..."
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \
  python3 git curl ccache libelf-dev \
  build-essential flex bison libssl-dev \
  libncurses-dev liblz4-tool zlib1g-dev \
  libxml2-utils rsync unzip python3-pip gawk dos2unix
clear
echo "✅ 必要构建依赖安装完成"

echo "⚙️ 正在配置 ccache 缓存..."
export CCACHE_DIR="$HOME/.ccache_${FEIL}_Kernel"
export CCACHE_COMPILERCHECK="%compiler% -dumpmachine; %compiler% -dumpversion"
export CCACHE_NOHASHDIR="true"
export CCACHE_HARDLINK="true"
export CCACHE_MAXSIZE="20G"
export PATH="/usr/lib/ccache:$PATH"
mkdir -p "$CCACHE_DIR"
echo "✅ ccache 缓存目录: $CCACHE_DIR"
ccache -M "$CCACHE_MAXSIZE"
ccache -z

echo "🔐 正在配置 Git 用户信息..."
git config --global user.name "Local Builder"
git config --global user.email "builder@localhost"
echo "✅ Git 用户信息配置完成"

if ! command -v repo &> /dev/null; then
    echo "📥 未检测到 repo 工具,正在安装..."
    curl -fsSL https://storage.googleapis.com/git-repo-downloads/repo > ~/repo
    chmod a+x ~/repo
    sudo mv ~/repo /usr/local/bin/repo
    echo "✅ repo 工具安装完成"
else
    echo "ℹ️ 已检测到 repo 工具,跳过安装"
fi

echo "⬇️ 正在准备内核源码目录..."
sudo rm -rf kernel_workspace
mkdir -p kernel_workspace && cd kernel_workspace

echo "🌐 正在初始化 oneplus/${CPU} 分支、机型 ${FEIL} 的 manifest..."
repo init -u https://github.com/Xiaomichael/kernel_manifest.git -b refs/heads/oneplus/${CPU} -m ${FEIL}.xml --depth=1

echo "🔄 正在同步内核源码仓库 (使用 $(nproc --all) 线程)..."
repo sync -c -j$(nproc --all) --no-tags --no-clone-bundle --force-sync
echo "✅ 内核源码同步完成"

export adv=$ANDROID_VERSION
echo "🔧 正在清理并修改版本字符串..."
rm -f kernel_platform/common/android/abi_gki_protected_exports_* || echo "common 目录下无受保护导出表,无需删除"
rm -f kernel_platform/msm-kernel/android/abi_gki_protected_exports_* || echo "msm-kernel 目录下无受保护导出表,无需删除"

sed -i 's/ -dirty//g' kernel_platform/common/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/external/dtc/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/common/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/external/dtc/scripts/setlocalversion

if [ "$KERNEL_VERSION" != "6.6" ]; then
  sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/common/scripts/setlocalversion
  sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/msm-kernel/scripts/setlocalversion
  sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/external/dtc/scripts/setlocalversion
else
  ESCAPED_SUFFIX=$(printf '%s\n' "-${ANDROID_VERSION}-oki-xiaoxiaow" | sed 's:[\/&]:\\&:g')
  sed -i "s/-4k/${ESCAPED_SUFFIX}/g" kernel_platform/common/arch/arm64/configs/gki_defconfig
  sed -i 's/\${scm_version}//' kernel_platform/common/scripts/setlocalversion
  sed -i 's/\${scm_version}//' kernel_platform/msm-kernel/scripts/setlocalversion
fi

echo "✅ 内核仓库准备完毕并完成版本号清理"

if [ "$bbg" = "On" ]; then
    set -e
    cd kernel_platform/common
    echo "🛡️ 正在配置 Baseband-Guard 基带防护..."
    curl -sSL https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh -o setup.sh
    bash setup.sh
    cd ../..
    echo "✅ Baseband-Guard 配置完成"
fi

echo "📝 正在复制补丁文件..."
git clone https://github.com/Xiaomichael/kernel_patches.git
git clone https://github.com/ShirkNeko/SukiSU_patch.git

cd kernel_platform
cp ../kernel_patches/zram_patches/001-lz4.patch ./common/
cp ../kernel_patches/zram_patches/lz4armv8.S ./common/lib
cp ../kernel_patches/zram_patches/002-zstd.patch ./common/

if [ "$UNICODE_BYPASS" = "On" ]; then
  if [ "$KERNEL_VERSION" = "6.1" ] || [ "$KERNEL_VERSION" = "6.6" ]; then
    cp ../kernel_patches/common/unicode_bypass_fix_6.1+.patch ./common/unicode_bypass_fix.patch
  elif [ "$KERNEL_VERSION" = "5.15" ] || [ "$KERNEL_VERSION" = "5.10" ]; then
    cp ../kernel_patches/common/unicode_bypass_fix_6.1-.patch ./common/unicode_bypass_fix.patch
  fi
fi

if [ "$lz4kd" = "On" ]; then
  echo "🚀 正在复制 lz4kd 相关补丁..."
  cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./common/include/linux
  cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./common/lib
  cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./common/crypto
  cp -r ../SukiSU_patch/other/zram/lz4k_oplus ./common/lib/
fi

echo "🔧 正在应用补丁..."
cd ./common

if [ "$UNICODE_BYPASS" = "On" ]; then
  echo "📦 正在应用Unicode零宽绕过修复补丁..."
  patch -p1 < unicode_bypass_fix.patch
fi

if [ "$lz4kd" = "Off" ] && [ "$KERNEL_VERSION" = "6.1" ]; then
  echo "📦 正在为 6.1 应用 lz4 + zstd 补丁..."
  git apply -p1 < 001-lz4.patch || true
  patch -p1 < 002-zstd.patch || true
fi

if [ "$lz4kd" = "Off" ] && [ "$KERNEL_VERSION" = "6.6" ]; then
  echo "📦 正在为 6.6 应用 lz4 补丁..."
  git apply -p1 < 001-lz4.patch || true
fi

if [ "$lz4kd" = "On" ]; then
  echo "📦 正在应用 lz4kd / lz4k_oplus 补丁..."
  cp ../../SukiSU_patch/other/zram/zram_patch/${KERNEL_VERSION}/lz4kd.patch ./
  patch -p1 -F 3 < lz4kd.patch || true
  cp ../../SukiSU_patch/other/zram/zram_patch/${KERNEL_VERSION}/lz4k_oplus.patch ./
  patch -p1 -F 3 < lz4k_oplus.patch || true
fi
echo "✅ 所有补丁应用完成"
cd ../..

if [ "$KERNEL_VERSION" = "6.6" ]; then
  cd kernel_platform/common
  echo "⬇️ 正在拉取风驰补丁"
  if [ "$FEIL" = "oneplus_ace5_ultra" ] || [ "$FEIL" = "oneplus_ace5_ultra_b" ]; then
      echo "⚠️ Ace5 Ultra 需要使用 mt6991 分支的补丁"
      git clone https://github.com/Numbersf/SCHED_PATCH.git -b "mt6991"
  else
      echo "⚙️ 使用 sm8750 分支的补丁"
      git clone https://github.com/Numbersf/SCHED_PATCH.git -b "sm8750"
  fi

  cp ./SCHED_PATCH/fengchi_$FEIL.patch ./

  if [[ -f "fengchi_$FEIL.patch" ]]; then
    echo "⚙️ 开始应用风驰补丁"
    dos2unix "fengchi_$FEIL.patch"
    patch -p1 -F 3 < "fengchi_$FEIL.patch"
    echo "✅ 完美风驰补丁应用完成"
  else
    echo "⚠️ 该6.6机型暂不支持风驰补丁, 正在应用OGKI转GKI补丁"
    sed -i '1iobj-y += hmbird_patch.o' drivers/Makefile
    wget https://github.com/Numbersf/Action-Build/raw/SukiSU-Ultra/patches/hmbird_patch.patch
    echo "⚙️ 正在打OGKI转换GKI补丁"
    patch -p1 -F 3 < hmbird_patch.patch
    echo "✅ OGKI转换GKI_patch完成"
  fi
  cd ../..
fi

echo "⚙️ 正在配置内核编译选项..."
DEFCONFIG_PATH="$WORKSPACE/kernel_workspace/kernel_platform/common/arch/arm64/configs/gki_defconfig"

if [ "$bbg" = "On" ]; then
  echo "⚡ 配置 BBG 中..."
  cat <<EOT >> "$DEFCONFIG_PATH"
CONFIG_BBG=y
CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf,baseband_guard"
EOT
fi

# 为 Mountify (backslashxx/mountify) 模块开启必要选项
echo "CONFIG_TMPFS_XATTR=y" >> "$DEFCONFIG_PATH"
echo "CONFIG_TMPFS_POSIX_ACL=y" >> "$DEFCONFIG_PATH"

if [ "$bbr" = "On" ]; then
  echo "🌐 启用 BBR 网络算法..."
  cat <<EOT >> "$DEFCONFIG_PATH"
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BBR=y
CONFIG_NET_SCH_FQ=y
CONFIG_TCP_CONG_BIC=n
CONFIG_TCP_CONG_WESTWOOD=n
CONFIG_TCP_CONG_HTCP=n
EOT
fi

if [ "$lz4kd" = "On" ]; then
  echo "📦 启用 lz4kd 与 写回支持..."
  cat <<EOT >> "$DEFCONFIG_PATH"
CONFIG_CRYPTO_LZ4KD=y
CONFIG_CRYPTO_LZ4K_OPLUS=y
CONFIG_ZRAM_WRITEBACK=y
EOT
fi

if [ "$KERNEL_VERSION" = "6.1" ] || [ "$KERNEL_VERSION" = "6.6" ]; then
  echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> "$DEFCONFIG_PATH"
fi

if [ "$proxy" = "On" ]; then
  echo "📦 添加代理相关网络优化选项..."
  cat <<EOT >> "$DEFCONFIG_PATH"
CONFIG_BPF_STREAM_PARSER=y
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
CONFIG_NETFILTER_XT_SET=y
CONFIG_IP_SET=y
CONFIG_IP_SET_MAX=65534
CONFIG_IP_SET_BITMAP_IP=y
CONFIG_IP_SET_BITMAP_IPMAC=y
CONFIG_IP_SET_BITMAP_PORT=y
CONFIG_IP_SET_HASH_IP=y
CONFIG_IP_SET_HASH_IPMARK=y
CONFIG_IP_SET_HASH_IPPORT=y
CONFIG_IP_SET_HASH_IPPORTIP=y
CONFIG_IP_SET_HASH_IPPORTNET=y
CONFIG_IP_SET_HASH_IPMAC=y
CONFIG_IP_SET_HASH_MAC=y
CONFIG_IP_SET_HASH_NETPORTNET=y
CONFIG_IP_SET_HASH_NET=y
CONFIG_IP_SET_HASH_NETNET=y
CONFIG_IP_SET_HASH_NETPORT=y
CONFIG_IP_SET_HASH_NETIFACE=y
CONFIG_IP_SET_LIST_SET=y
CONFIG_IP6_NF_NAT=y
CONFIG_IP6_NF_TARGET_MASQUERADE=y
EOT
fi

if [ "$KERNEL_VERSION" = "5.10" ] || [ "$KERNEL_VERSION" = "5.15" ]; then
  echo "📦 正在为 5.10 / 5.15 系配置 LTO..."
  sed -i 's/^CONFIG_LTO=n/CONFIG_LTO=y/' "$DEFCONFIG_PATH"
  sed -i 's/^CONFIG_LTO_CLANG_FULL=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG_PATH"
  sed -i 's/^CONFIG_LTO_CLANG_NONE=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG_PATH"
  grep -q '^CONFIG_LTO_CLANG_THIN=y' "$DEFCONFIG_PATH" || echo 'CONFIG_LTO_CLANG_THIN=y' >> "$DEFCONFIG_PATH"
fi

echo "CONFIG_HEADERS_INSTALL=n" >> "$DEFCONFIG_PATH"

sed -i 's/check_defconfig//' "$WORKSPACE/kernel_workspace/kernel_platform/common/build.config.gki"

echo "✅ defconfig 配置更新完成"
cd ../..

echo "🔨 开始内核编译..."
cd "$WORKSPACE/kernel_workspace/kernel_platform/common"

MAKE_CMD_COMMON="make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=\"ccache clang\" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all"

export KBUILD_BUILD_USER="xiaoxiaow"
export KBUILD_BUILD_HOST="xiaoxiaow_build"

if [ "$KERNEL_VERSION" = "6.1" ]; then
    export KBUILD_BUILD_TIMESTAMP="Tue Mar 10 03:53:33 UTC 2026"
    export KBUILD_BUILD_VERSION=1
    export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH"
    eval "$MAKE_CMD_COMMON KCFLAGS+=-O2"
elif [ "$KERNEL_VERSION" = "6.6" ]; then
    export KBUILD_BUILD_VERSION=1
    export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r510928/bin:$PATH"
    eval "$MAKE_CMD_COMMON KCFLAGS+=-O2"
elif [ "$KERNEL_VERSION" = "5.15" ]; then
    export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r450784e/bin:$PATH"
    eval "$MAKE_CMD_COMMON"
elif [ "$KERNEL_VERSION" = "5.10" ]; then
    export PATH="$WORKSPACE/kernel_workspace/kernel_platform/prebuilts-master/clang/host/linux-x86/clang-r416183b/bin:$PATH"
    eval "make -j$(nproc --all) LLVM_IAS=1 LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=\"ccache clang\" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all"
else
    echo "❌ 不支持的内核版本: $KERNEL_VERSION" && exit 1
fi

echo "📊 当前 ccache 统计信息如下:"
ccache -s
echo "✅ 内核编译完成"
cd "$WORKSPACE"

echo "📦 正在获取 AnyKernel3 并准备打包..."
git clone https://github.com/Xiaomichael/AnyKernel3 --depth=1
rm -rf ./AnyKernel3/.git

IMAGE_PATH=$(find "$WORKSPACE/kernel_workspace/kernel_platform/common/out/" -name "Image" | head -n 1)
if [ -z "$IMAGE_PATH" ]; then echo "❌ 严重错误:编译完成后未找到 Kernel Image!" && exit 1; fi

echo "✅ 已找到 Kernel Image: $IMAGE_PATH"
cp "$IMAGE_PATH" ./AnyKernel3/Image

if [ "$lz4kd" = "On" ]; then
  ARTIFACT_NAME="Anykernel3_${FEIL}_lz4kd_Kernel_Only"
elif [ "$KERNEL_VERSION" = "6.1" ]; then
  ARTIFACT_NAME="Anykernel3_${FEIL}_lz4_zstd_Kernel_Only"
elif [ "$KERNEL_VERSION" = "6.6" ]; then
  ARTIFACT_NAME="Anykernel3_${FEIL}_lz4_Kernel_Only"
else
  ARTIFACT_NAME="Anykernel3_${FEIL}_Kernel_Only"
fi
FINAL_ZIP_NAME="${ARTIFACT_NAME}.zip"

echo "📦 正在创建最终可刷入压缩包: ${FINAL_ZIP_NAME}..."
cd AnyKernel3 && zip -q -r9 "../${FINAL_ZIP_NAME}" ./* && cd ..

echo ""
echo "================================================="
echo "                  构建完成!"
echo "================================================="
echo "-> 可刷入内核压缩包路径: $WORKSPACE/${FINAL_ZIP_NAME}"

ZRAM_KO_PATH=$(find "$WORKSPACE/kernel_workspace/kernel_platform/common/out/" -name "zram.ko" | head -n 1)
if [ -n "$ZRAM_KO_PATH" ]; then
    cp "$ZRAM_KO_PATH" "$WORKSPACE/"
    echo "-> zram.ko 模块路径: $WORKSPACE/zram.ko"
fi

echo "================================================="
echo ""


================================================
FILE: local/Build_ReSukiSU.sh
================================================
#!/bin/bash
#export all_proxy=socks5://192.168.x.x:x/
set -e

clear
echo "==============================================="
echo "  ReSukiSU OnePlus Kernel Build Configuration  "
echo "==============================================="
echo "  按回车键可直接使用 [方括号] 中的默认值"
echo ""

ask() {
    local prompt default reply
    prompt="$1"
    default="$2"
    
    read -p "$prompt [$default]: " reply
    echo "${reply:-$default}"
}

CPU=$(ask "请输入 CPU 分支 (例如: sm8750, sm8650, sm8550, sm8475)" "sm8650")
FEIL=$(ask "请输入手机型号 (例如: oneplus_13_b, oneplus_12_b, oneplus_11_b)" "oneplus_12_b")
ANDROID_VERSION=$(ask "请输入内核安卓 KMI 版本 (android15, android14, android13, android12)" "android14")
KERNEL_VERSION=$(ask "请输入内核版本 (6.6, 6.1, 5.15, 5.10)" "6.1")
SUSFS=$(ask "是否启用 SUSFS? (On/Off)" "Off")
KPM=$(ask "是否启用 KPM (Kernel Patch Manager)? (On/Off)" "Off")
lz4kd=$(ask "是否启用 lz4kd? (6.1 关闭时使用 lz4 + zstd; 6.6 关闭时使用 lz4) (On/Off)" "Off")
bbr=$(ask "是否启用 BBR 拥塞控制算法? (On/Off)" "Off")
bbg=$(ask "是否启用 Baseband-Guard 基带防护? (On/Off)" "On")
proxy=$(ask "是否添加代理性能优化? (如为联发科 CPU 必须选择 Off) (On/Off)" "On")
UNICODE_BYPASS=$(ask "是否添加Unicode零宽绕过修复补丁(高内核版本不推荐开启, 建议使用 https://t.me/real5ec1cff/271 无痛修复) (On/Off)" "Off")

clear
echo ""
echo "================================================="
echo "                   配置摘要"
echo "================================================="
echo "手机型号                 : $FEIL"
echo "CPU 分支                 : $CPU"
echo "安卓 KMI 版本            : $ANDROID_VERSION"
echo "内核版本                 : $KERNEL_VERSION"
echo "是否启用 SUSFS           : $SUSFS"
echo "是否启用 KPM             : $KPM"
echo "是否启用 lz4kd           : $lz4kd"
echo "是否启用 BBR             : $bbr"
echo "是否启用 Baseband-Guard  : $bbg"
echo "是否启用代理优化          : $proxy"
echo "是否启用 Unicode 绕过修复 : $UNICODE_BYPASS"
echo "================================================="
read -p "按回车键开始构建流程..."
clear

echo "📦 正在准备构建工作空间..."
WORKSPACE=$PWD/build_workspace
sudo rm -rf "$WORKSPACE"
mkdir -p "$WORKSPACE"
cd "$WORKSPACE"

echo "📦 正在安装构建依赖..."
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \
  python3 git curl ccache libelf-dev \
  build-essential flex bison libssl-dev \
  libncurses-dev liblz4-tool zlib1g-dev \
  libxml2-utils rsync unzip python3-pip gawk dos2unix
clear
echo "✅ 必要构建依赖安装完成"

echo "⚙️ 正在配置 ccache 缓存..."
if [ "$SUSFS" == "On" ]; then
  export CCACHE_DIR="$HOME/.ccache_${FEIL}_ReSukiSU_SUSFS"
else
  export CCACHE_DIR="$HOME/.ccache_${FEIL}_ReSukiSU_NoSUSFS"
fi
export CCACHE_COMPILERCHECK="%compiler% -dumpmachine; %compiler% -dumpversion"
export CCACHE_NOHASHDIR="true"
export CCACHE_HARDLINK="true"
export CCACHE_MAXSIZE="20G"
export PATH="/usr/lib/ccache:$PATH"
mkdir -p "$CCACHE_DIR"
echo "✅ ccache 缓存目录: $CCACHE_DIR"
ccache -M "$CCACHE_MAXSIZE"
ccache -z

echo "🔐 正在配置 Git 用户信息..."
git config --global user.name "Local Builder"
git config --global user.email "builder@localhost"
echo "✅ Git 用户信息配置完成"

if ! command -v repo &> /dev/null; then
    echo "📥 未检测到 repo 工具,正在安装..."
    curl -fsSL https://storage.googleapis.com/git-repo-downloads/repo > ~/repo
    chmod a+x ~/repo
    sudo mv ~/repo /usr/local/bin/repo
    echo "✅ repo 工具安装完成"
else
    echo "ℹ️ 已检测到 repo 工具,跳过安装"
fi

echo "⬇️ 正在准备内核源码目录..."
sudo rm -rf kernel_workspace
mkdir -p kernel_workspace && cd kernel_workspace

echo "🌐 正在初始化 oneplus/${CPU} 分支、机型 ${FEIL} 的 manifest..."
repo init -u https://github.com/Xiaomichael/kernel_manifest.git -b refs/heads/oneplus/${CPU} -m ${FEIL}.xml --depth=1

echo "🔄 正在同步内核源码仓库 (使用 $(nproc --all) 线程)..."
repo sync -c -j$(nproc --all) --no-tags --no-clone-bundle --force-sync
echo "✅ 内核源码同步完成"

export adv=$ANDROID_VERSION
echo "🔧 正在清理并修改版本字符串..."
rm -f kernel_platform/common/android/abi_gki_protected_exports_* || echo "common 目录下无受保护导出表,无需删除"
rm -f kernel_platform/msm-kernel/android/abi_gki_protected_exports_* || echo "msm-kernel 目录下无受保护导出表,无需删除"

sed -i 's/ -dirty//g' kernel_platform/common/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/external/dtc/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/common/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/external/dtc/scripts/setlocalversion

if [ "$KERNEL_VERSION" != "6.6" ]; then
  sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/common/scripts/setlocalversion
  sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/msm-kernel/scripts/setlocalversion
  sed -i '$s|echo "\$res"|echo "-'"$adv"'-oki-xiaoxiaow"|' kernel_platform/external/dtc/scripts/setlocalversion
else
  ESCAPED_SUFFIX=$(printf '%s\n' "-${ANDROID_VERSION}-oki-xiaoxiaow" | sed 's:[\/&]:\\&:g')
  sed -i "s/-4k/${ESCAPED_SUFFIX}/g" kernel_platform/common/arch/arm64/configs/gki_defconfig
  sed -i 's/\${scm_version}//' kernel_platform/common/scripts/setlocalversion
  sed -i 's/\${scm_version}//' kernel_platform/msm-kernel/scripts/setlocalversion
fi

echo "✅ 内核仓库准备完毕并完成版本号清理"

if [ "$bbg" = "On" ] && [ "$KPM" = "Off" ]; then
    set -e
    cd kernel_platform/common
    echo "🛡️ 正在配置 Baseband-Guard 基带防护..."
    curl -sSL https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh -o setup.sh
    bash setup.sh
    cd ../..
    echo "✅ Baseband-Guard 配置完成"
fi

echo "⚡ 正在配置 ReSukiSU..."
cd kernel_platform
curl -LSs "https://raw.githubusercontent.com/ReSukiSU/ReSukiSU/main/kernel/setup.sh" | bash -s main

cd KernelSU
KSU_VERSION_COUNT=$(git rev-list --count main)
export KSUVER=$(expr $KSU_VERSION_COUNT + 30700)

echo "✅ ReSukiSU 配置完成"
cd ../..

echo "🔧 正在克隆所需补丁..."
if [ "$SUSFS" = "On" ]; then
    git clone https://github.com/cctv18/susfs4oki.git -b oki-${ANDROID_VERSION}-${KERNEL_VERSION}
fi
git clone https://github.com/Xiaomichael/kernel_patches.git
git clone https://github.com/ShirkNeko/SukiSU_patch.git

cd kernel_platform
echo "📝 正在复制补丁文件..."

if [ "$SUSFS" = "On" ]; then
    cp ../susfs4oki/kernel_patches/50_add_susfs_in_gki-${ANDROID_VERSION}-${KERNEL_VERSION}.patch ./common/
    cp ../susfs4oki/kernel_patches/fs/* ./common/fs/
    cp ../susfs4oki/kernel_patches/include/linux/* ./common/include/linux/
else
    cp ../kernel_patches/sukisu/scope_min_manual_hooks_v1.9.patch ./common/
fi

cp ../kernel_patches/zram_patches/001-lz4.patch ./common/
cp ../kernel_patches/zram_patches/lz4armv8.S ./common/lib
cp ../kernel_patches/zram_patches/002-zstd.patch ./common/

if [ "$UNICODE_BYPASS" = "On" ]; then
  if [ "$KERNEL_VERSION" = "6.1" ] || [ "$KERNEL_VERSION" = "6.6" ]; then
    cp ../kernel_patches/common/unicode_bypass_fix_6.1+.patch ./common/unicode_bypass_fix.patch
  elif [ "$KERNEL_VERSION" = "5.15" ] || [ "$KERNEL_VERSION" = "5.10" ]; then
    cp ../kernel_patches/common/unicode_bypass_fix_6.1-.patch ./common/unicode_bypass_fix.patch
  fi
fi

if [ "$lz4kd" = "On" ]; then
  echo "🚀 正在复制 lz4kd 相关补丁..."
  cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./common/include/linux
  cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./common/lib
  cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./common/crypto
  cp -r ../SukiSU_patch/other/zram/lz4k_oplus ./common/lib/
fi

echo "🔧 正在应用补丁..."
cd ./common

if [ "$UNICODE_BYPASS" = "On" ]; then
  echo "📦 正在应用Unicode零宽绕过修复补丁..."
  patch -p1 < unicode_bypass_fix.patch
fi

if [ "$SUSFS" = "On" ]; then
    patch -p1 < 50_add_susfs_in_gki-${ANDROID_VERSION}-${KERNEL_VERSION}.patch || true
else
    echo "📦 应用 MANUAL_HOOK 补丁..."
    patch -p1 -F 3 < scope_min_manual_hooks_v1.9.patch
fi

if [ "$lz4kd" = "Off" ] && [ "$KERNEL_VERSION" = "6.1" ]; then
  echo "📦 正在为 6.1 应用 lz4 + zstd 补丁..."
  git apply -p1 < 001-lz4.patch || true
  patch -p1 < 002-zstd.patch || true
fi

if [ "$lz4kd" = "Off" ] && [ "$KERNEL_VERSION" = "6.6" ]; then
  echo "📦 正在为 6.6 应用 lz4 补丁..."
  git apply -p1 < 001-lz4.patch || true
fi

if [ "$lz4kd" = "On" ]; then
  echo "📦 正在应用 lz4kd / lz4k_oplus 补丁..."
  cp ../../SukiSU_patch/other/zram/zram_patch/${KERNEL_VERSION}/lz4kd.patch ./
  patch -p1 -F 3 < lz4kd.patch || true
  cp ../../SukiSU_patch/other/zram/zram_patch/${KERNEL_VERSION}/lz4k_oplus.patch ./
  patch -p1 -F 3 < lz4k_oplus.patch || true
fi
echo "✅ 所有补丁应用完成"
cd ../..

if [ "$KERNEL_VERSION" = "6.6" ]; then
  cd kernel_platform/common
  echo "⬇️ 正在拉取风驰补丁"
  if [ "$FEIL" = "oneplus_ace5_ultra" ] || [ "$FEIL" = "oneplus_ace5_ultra_b" ]; then
      echo "⚠️ Ace5 Ultra 需要使用 mt6991 分支的补丁"
      git clone https://github.com/Numbersf/SCHED_PATCH.git -b 
Download .txt
gitextract_8shsx1ht/

├── .github/
│   └── workflows/
│       ├── Build Kernel Only.yml
│       ├── Build KernelSU Next.yml
│       ├── Build KernelSU.yml
│       ├── Build ReSukiSU.yml
│       ├── Build SukiSU Ultra.yml
│       ├── Clean_ccache.yml
│       └── Clean_workflows.yml
├── README.md
├── local/
│   ├── Build_KernelSU.sh
│   ├── Build_Next.sh
│   ├── Build_Only.sh
│   ├── Build_ReSukiSU.sh
│   └── Build_SukiSU.sh
└── script/
    └── buildbot.py
Download .txt
SYMBOL INDEX (6 symbols across 1 files)

FILE: script/buildbot.py
  function get_caption (line 36) | def get_caption():
  function check_environ (line 52) | def check_environ():
  function get_kernel_versions (line 75) | def get_kernel_versions():
  function get_versions (line 97) | def get_versions():
  function check_lz4_zstd (line 111) | def check_lz4_zstd():
  function main (line 119) | async def main():
Condensed preview — 14 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (255K chars).
[
  {
    "path": ".github/workflows/Build Kernel Only.yml",
    "chars": 23282,
    "preview": "name: Build Kernel Only\non:\n  workflow_dispatch:\n    inputs:\n    \n      CPU:\n        description: \"CPU分支\"\n        requir"
  },
  {
    "path": ".github/workflows/Build KernelSU Next.yml",
    "chars": 28536,
    "preview": "name: Build KernelSU Next\non:\n  workflow_dispatch:\n    inputs:\n    \n      CPU:\n        description: \"CPU分支\"\n        requ"
  },
  {
    "path": ".github/workflows/Build KernelSU.yml",
    "chars": 27358,
    "preview": "name: Build KernelSU Official\non:\n  workflow_dispatch:\n    inputs:\n    \n      CPU:\n        description: \"CPU分支\"\n        "
  },
  {
    "path": ".github/workflows/Build ReSukiSU.yml",
    "chars": 28453,
    "preview": "name: Build ReSukiSU\non:\n  workflow_dispatch:\n    inputs:\n    \n      CPU:\n        description: \"CPU分支\"\n        required:"
  },
  {
    "path": ".github/workflows/Build SukiSU Ultra.yml",
    "chars": 29595,
    "preview": "name: Build SukiSU Ultra\non:\n  workflow_dispatch:\n    inputs:\n    \n      CPU:\n        description: \"CPU分支\"\n        requi"
  },
  {
    "path": ".github/workflows/Clean_ccache.yml",
    "chars": 1332,
    "preview": "name: Clean Caches\n\non:\n  workflow_dispatch:\n\njobs:\n  clean-caches:\n    runs-on: ubuntu-latest\n    permissions:\n      ac"
  },
  {
    "path": ".github/workflows/Clean_workflows.yml",
    "chars": 4633,
    "preview": "name: Clean Workflows\n\non:\n  workflow_dispatch:\n    inputs:\n      workflow_name:\n        type: choice\n        descriptio"
  },
  {
    "path": "README.md",
    "chars": 1980,
    "preview": "# ⭐⭐⭐ Star This Project ⭐⭐⭐\n\n如果您觉得这个项目对您有帮助,请给我一个 ``Star`` 或 ``进行赞助``!您的支持是我持续改进的动力。❤❤❤\n\n如果遇到问题欢迎提交``issue``!也随时欢迎``Pull"
  },
  {
    "path": "local/Build_KernelSU.sh",
    "chars": 15463,
    "preview": "#!/bin/bash\n#export all_proxy=socks5://192.168.x.x:x/\nset -e\n\nclear\necho \"=============================================="
  },
  {
    "path": "local/Build_Next.sh",
    "chars": 15650,
    "preview": "#!/bin/bash\n#export all_proxy=socks5://192.168.x.x:x/\nset -e\n\nclear\necho \"=============================================="
  },
  {
    "path": "local/Build_Only.sh",
    "chars": 13459,
    "preview": "#!/bin/bash\n#export all_proxy=socks5://192.168.x.x:x/\nset -e\n\nclear\necho \"=============================================\""
  },
  {
    "path": "local/Build_ReSukiSU.sh",
    "chars": 16084,
    "preview": "#!/bin/bash\n#export all_proxy=socks5://192.168.x.x:x/\nset -e\n\nclear\necho \"=============================================="
  },
  {
    "path": "local/Build_SukiSU.sh",
    "chars": 16727,
    "preview": "#!/bin/bash\n#export all_proxy=socks5://192.168.x.x:x/\nset -e\n\nclear\necho \"=============================================="
  },
  {
    "path": "script/buildbot.py",
    "chars": 4060,
    "preview": "import asyncio\nimport os\nimport sys\nfrom telethon import TelegramClient\n\nAPI_ID = 611335\nAPI_HASH = \"d524b414d21f4d37f08"
  }
]

About this extraction

This page contains the full source code of the Xiaomichael/OnePlus-Actions GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 14 files (221.3 KB), approximately 71.2k tokens, and a symbol index with 6 extracted functions, classes, methods, constants, and types. 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!