name: GKI Kernel Build on: workflow_call: inputs: version: required: true type: string description: > Output directory of gki, for example: android12-5.10 version_name: required: true type: string description: > With SUBLEVEL of kernel, for example: android12-5.10.66 tag: required: true type: string description: > Part of branch name of common kernel manifest, for example: android12-5.10-2021-11 patch_path: required: true type: string description: > Directory name of .github/patches/ for example: 5.10 use_cache: required: false type: boolean default: true embed_ksud: required: false type: string default: ksud-aarch64-linux-android description: > Artifact name of prebuilt ksud to be embedded for example: ksud-aarch64-linux-android secrets: BOOT_SIGN_KEY: required: false CHAT_ID: required: false CACHE_CHAT_ID: required: false BOT_TOKEN: required: false MESSAGE_THREAD_ID: required: false jobs: build: name: Build ${{ inputs.version_name }} runs-on: ubuntu-latest env: CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion" CCACHE_NOHASHDIR: "true" CCACHE_MAXSIZE: "2G" CCACHE_HARDLINK: "true" steps: - uses: actions/checkout@v3 with: path: KernelSU fetch-depth: 0 - uses: hendrikmuhs/ccache-action@v1.2 if: inputs.use_cache == true with: key: ccache-aarch64-${{ inputs.version_name }} append-timestamp: false save: ${{ github.event_name != 'pull_request' }} - name: Setup need_upload id: need_upload run: | if [ ! -z "${{ secrets.BOT_TOKEN }}" ]; then echo "UPLOAD=true" >> $GITHUB_OUTPUT else echo "UPLOAD=false" >> $GITHUB_OUTPUT fi - name: Setup kernel source run: | cd $GITHUB_WORKSPACE git clone https://gerrit.googlesource.com/git-repo mkdir android-kernel && cd android-kernel ../git-repo/repo init --depth=1 --u https://android.googlesource.com/kernel/manifest -b common-${{ inputs.tag }} ../git-repo/repo sync -j$(nproc --all) - name: Download prebuilt ksud from artifacts uses: actions/download-artifact@v3 with: name: ${{ inputs.embed_ksud }} path: . - name: Setup KernelSU env: PATCH_PATH: ${{ inputs.patch_path }} run: | cd $GITHUB_WORKSPACE/android-kernel echo "[+] KernelSU setup" GKI_ROOT=$(pwd) echo "[+] GKI_ROOT: $GKI_ROOT" echo "[+] Copy KernelSU driver to $GKI_ROOT/common/drivers" ln -sf $GITHUB_WORKSPACE/KernelSU/kernel $GKI_ROOT/common/drivers/kernelsu echo "[+] Add KernelSU driver to Makefile" DRIVER_MAKEFILE=$GKI_ROOT/common/drivers/Makefile grep -q "kernelsu" $DRIVER_MAKEFILE || echo "obj-y += kernelsu/" >> $DRIVER_MAKEFILE echo "[+] Apply KernelSU patches" cd $GKI_ROOT/common/ && git apply $GITHUB_WORKSPACE/KernelSU/.github/patches/$PATCH_PATH/*.patch cd $GITHUB_WORKSPACE echo "[+] Build embed_ksud.c" python3 ./KernelSU/scripts/bin2c.py ./aarch64-linux-android/release/ksud ksud > ./KernelSU/kernel/embed_ksud.c echo "[+] KernelSU setup done." - name: Symbol magic run: | echo "[+] Export all symbol from abi_gki_aarch64.xml" COMMON_ROOT=$GITHUB_WORKSPACE/android-kernel/common KSU_ROOT=$GITHUB_WORKSPACE/KernelSU ABI_XML=$COMMON_ROOT/android/abi_gki_aarch64.xml SYMBOL_LIST=$COMMON_ROOT/android/abi_gki_aarch64 # python3 $KSU_ROOT/scripts/abi_gki_all.py $ABI_XML > $SYMBOL_LIST echo "[+] Add KernelSU symbols" cat $KSU_ROOT/kernel/export_symbol.txt | awk '{sub("[ \t]+","");print " "$0}' >> $SYMBOL_LIST - name: Build boot.img working-directory: android-kernel run: CCACHE="/usr/bin/ccache" LTO=thin BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh - name: Prepare artifacts id: prepareArtifacts run: | OUTDIR=android-kernel/out/${{ inputs.version }}/dist mkdir output cp $OUTDIR/Image ./output/ cp $OUTDIR/Image.lz4 ./output/ - name: Upload Image and Image.gz uses: actions/upload-artifact@v3 with: name: Image-${{ inputs.version_name }}_${{ inputs.os_patch_level }} path: ./output/*