Build kernel (KSN) & WIFI A16 for LineageOS 23.0 with vendor module disables #3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build kernel (KSN) & WIFI A16 | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| kernel_source_url: | |
| description: 'URL of the kernel source repository' | |
| required: true | |
| default: 'https://github.com/LineageOS/android_kernel_oneplus_sm8150' | |
| kernel_branch: | |
| description: 'Branch of the kernel source' | |
| required: true | |
| default: 'lineage-22.1' | |
| kernel_defconfig: | |
| description: 'defconfig file to use' | |
| required: true | |
| default: 'lineage_sm8150_defconfig' | |
| output_name: | |
| description: 'Name of the output.zip' | |
| required: false | |
| default: 'OP7_KSN_wifi' | |
| push: | |
| branches: | |
| - oneplus/OOS_SM8150_11.0 | |
| pull_request: | |
| branches: | |
| - oneplus/OOS_SM8150_11.0 | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| env: | |
| CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion" | |
| CCACHE_NOHASHDIR: "true" | |
| CCACHE_MAXSIZE: "2G" | |
| CCACHE_HARDLINK: "true" | |
| # Use LLVM toolchain with Ubuntu cross-binutils; O=out matches Copilot’s layout. | |
| KERNEL_CMDLINE: "ARCH=arm64 LLVM=1 LLVM_IAS=1 O=out CROSS_COMPILE=aarch64-linux-gnu- CROSS_COMPILE_ARM32=arm-linux-gnueabi- CLANG_TRIPLE=aarch64-linux-gnu-" | |
| KERNEL_DEFCONFIG: ${{ github.event.inputs.kernel_defconfig || 'lineage_sm8150_defconfig' }} | |
| KERNEL_SOURCE_URL: ${{ github.event.inputs.kernel_source_url || 'https://github.com/LineageOS/android_kernel_oneplus_sm8150' }} | |
| KERNEL_BRANCH: ${{ github.event.inputs.kernel_branch || 'lineage-22.1' }} | |
| OUTPUT_ZIP_NAME: ${{ github.event.inputs.output_name || 'OP7_KSN_wifi' }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Checkout Kernel Source | |
| run: | | |
| git clone --depth=1 --branch "${KERNEL_BRANCH}" "${KERNEL_SOURCE_URL}" kernel | |
| cd kernel | |
| git submodule update --init --recursive | |
| cd .. | |
| env: | |
| KERNEL_SOURCE_URL: ${{ env.KERNEL_SOURCE_URL }} | |
| KERNEL_BRANCH: ${{ env.KERNEL_BRANCH }} | |
| - name: Set up ccache | |
| uses: hendrikmuhs/ccache-action@v1.2 | |
| - name: Cleanup space | |
| run: | | |
| sudo rm -rf /opt/ghc | |
| sudo rm -rf "/usr/local/share/boost" | |
| sudo rm -rf /usr/share/dotnet | |
| sudo rm -rf "$AGENT_TOOLSDIRECTORY" | |
| - name: Install dependencies (LLVM 18 + cross-binutils) | |
| run: | | |
| sudo apt-get update -y | |
| sudo apt-get install -y \ | |
| clang-18 llvm-18 lld-18 \ | |
| gcc-aarch64-linux-gnu gcc-arm-linux-gnueabi \ | |
| binutils-aarch64-linux-gnu binutils \ | |
| make python3 libssl-dev build-essential bc bison flex unzip \ | |
| ca-certificates xz-utils mkbootimg cpio device-tree-compiler git git-lfs | |
| git clone https://github.com/khalidaboelmagd/AnyKernel3 | |
| rm -rf AnyKernel3/.git | |
| - name: Remove unnecessary files | |
| run: | | |
| sudo rm -rf /opt/ghc | |
| sudo rm -rf "/usr/local/share/boost" | |
| sudo rm -rf /usr/share/dotnet | |
| sudo rm -rf "$AGENT_TOOLSDIRECTORY" | |
| - name: Get Version | |
| id: get_version | |
| run: | | |
| cd kernel | |
| git fetch --unshallow || true | |
| COUNT=$(git rev-list --count HEAD) | |
| echo "VERSION=$(expr ${COUNT:-0} + 10200)" >> $GITHUB_OUTPUT | |
| cd .. | |
| - name: KernelSU-Next setup | |
| working-directory: ./kernel | |
| run: | | |
| export PATH=/usr/lib/llvm-18/bin:$PATH | |
| curl -LSs "https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/next/kernel/setup.sh" | bash - | |
| # Copilot: create O=out defconfig for a clean base | |
| - name: Prepare kernel output directory (defconfig) | |
| working-directory: kernel | |
| run: | | |
| set -e | |
| export PATH=/usr/lib/llvm-18/bin:$PATH | |
| export HOSTCC=clang-18 | |
| export HOSTCXX=clang++-18 | |
| make O=out $KERNEL_DEFCONFIG | |
| # Copilot: adjust config non-interactively, then olddefconfig to accept defaults for any new symbols | |
| - name: Fix kernel config for CI (no source changes) | |
| working-directory: kernel | |
| run: | | |
| set -e | |
| export PATH=/usr/lib/llvm-18/bin:$PATH | |
| OUT_CONFIG=out/.config | |
| if [ ! -f "$OUT_CONFIG" ]; then | |
| echo "No $OUT_CONFIG found, generating defconfig" | |
| make O=out $KERNEL_DEFCONFIG | |
| fi | |
| if [ -x scripts/config ]; then | |
| echo "Using scripts/config to update config" | |
| ./scripts/config --file "$OUT_CONFIG" --set-val CONFIG_NR_CPUS 64 || true | |
| ./scripts/config --file "$OUT_CONFIG" --disable CONFIG_HUGETLB_PAGE || true | |
| ./scripts/config --file "$OUT_CONFIG" --disable CONFIG_HUGETLBFS || true | |
| else | |
| echo "scripts/config not found, editing $OUT_CONFIG directly" | |
| sed -i '/^CONFIG_NR_CPUS=/d' "$OUT_CONFIG" || true | |
| echo 'CONFIG_NR_CPUS=64' >> "$OUT_CONFIG" | |
| sed -i '/^CONFIG_HUGETLB_PAGE=/d' "$OUT_CONFIG" || true | |
| echo 'CONFIG_HUGETLB_PAGE=n' >> "$OUT_CONFIG" | |
| sed -i '/^CONFIG_HUGETLBFS=/d' "$OUT_CONFIG" || true | |
| echo 'CONFIG_HUGETLBFS=n' >> "$OUT_CONFIG" | |
| fi | |
| # Critical: resolve any new symbols without prompts | |
| make O=out olddefconfig | |
| echo "==== Effective kernel config adjustments ====" | |
| grep -E '^CONFIG_NR_CPUS=|^CONFIG_HUGETLB' out/.config || true | |
| - name: Prepare scripts and headers | |
| working-directory: ./kernel | |
| run: | | |
| export PATH=/usr/lib/llvm-18/bin:$PATH | |
| export HOSTCC=clang-18 | |
| export HOSTCXX=clang++-18 | |
| make $KERNEL_CMDLINE scripts CC="ccache clang-18" | |
| make $KERNEL_CMDLINE prepare CC="ccache clang-18" | |
| - name: Build kernel | |
| working-directory: kernel | |
| env: | |
| KBUILD_OUTPUT: out | |
| run: | | |
| set -e | |
| export PATH=/usr/lib/llvm-18/bin:$PATH | |
| export LD_LIBRARY_PATH=/usr/lib/llvm-18/lib:$LD_LIBRARY_PATH | |
| export DTC_EXT=dtc | |
| export HOSTCC=clang-18 | |
| export HOSTCXX=clang++-18 | |
| # Ensure no interactive Kconfig runs before build | |
| make O=out olddefconfig | |
| make $KERNEL_CMDLINE CC="ccache clang-18" LD="ld.lld-18" AR="llvm-ar-18" NM="llvm-nm-18" OBJCOPY="llvm-objcopy-18" OBJDUMP="llvm-objdump-18" STRIP="llvm-strip-18" -j"$(nproc)" | |
| cp out/arch/arm64/boot/Image ../AnyKernel3 | |
| - name: Run simple verification on build output | |
| working-directory: kernel | |
| run: | | |
| set -e | |
| if [ -d out ]; then | |
| echo "Build output exists:" | |
| ls -lah out | sed -n '1,200p' | |
| else | |
| echo "No build output directory found" | |
| exit 1 | |
| fi | |
| - name: Build Wi-Fi Module (qca_cld3) | |
| working-directory: ./kernel | |
| run: | | |
| export PATH=/usr/lib/llvm-18/bin:$PATH | |
| export LD_LIBRARY_PATH=/usr/lib/llvm-18/lib:$LD_LIBRARY_PATH | |
| export HOSTCC=clang-18 | |
| export HOSTCXX=clang++-18 | |
| make $KERNEL_CMDLINE modules_prepare CC="ccache clang-18" | |
| make $KERNEL_CMDLINE CC="ccache clang-18" LD="ld.lld-18" AR="llvm-ar-18" NM="llvm-nm-18" OBJCOPY="llvm-objcopy-18" OBJDUMP="llvm-objdump-18" STRIP="llvm-strip-18" -j"$(nproc)" M=drivers/staging/qcacld-3.0 modules | |
| sudo mkdir -p ../modules/vendor/lib/modules | |
| sudo find out/drivers/staging/qcacld-3.0 -name "*.ko" -exec cp -v {} ../modules/vendor/lib/modules/ \; | |
| sudo chown -R "$(id -u)":"$(id -g)" ../modules | |
| - name: Package Kernel | |
| run: | | |
| echo "Packaging kernel from: $(pwd)" | |
| ls -la AnyKernel3/ || true | |
| cd AnyKernel3 | |
| zip -r ../${{ env.OUTPUT_ZIP_NAME }}.zip * | |
| cd .. | |
| - name: Package Wi-Fi Module | |
| run: | | |
| if [ ! -d "modules/vendor/lib/modules" ] || ! ls modules/vendor/lib/modules/*.ko >/dev/null 2>&1; then | |
| echo "Error: No Wi-Fi modules found to package!" | |
| exit 1 | |
| fi | |
| echo "Packaging modules from: $(pwd)/modules" | |
| ls -la modules/vendor/lib/modules/ | |
| cd modules | |
| zip -r ../${{ env.OUTPUT_ZIP_NAME }}-modules.zip * | |
| cd .. | |
| - name: Upload kernel build artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: kernel-out | |
| path: kernel/out | |
| - name: Upload zips | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: outputs | |
| path: | | |
| ${{ env.OUTPUT_ZIP_NAME }}.zip | |
| ${{ env.OUTPUT_ZIP_NAME }}-modules.zip | |
| if-no-files-found: error | |
| - name: Upload logs | |
| if: failure() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: kernel-build-logs | |
| path: kernel/out |