Build kernel (KSN) & WIFI A16 - no vendor blobs, KernelSU enabled by default #23
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 - no vendor blobs, KernelSU enabled by default | |
| 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-23.0 | |
| kernel_defconfig: | |
| description: defconfig file to use | |
| required: true | |
| default: vendor/sm8150_defconfig | |
| output_name: | |
| description: Name of the output zip | |
| required: false | |
| default: OP7_KSN_wifi-LOS-noVendor.zip | |
| apply_kernelsu: | |
| description: Apply KernelSU patch | |
| required: true | |
| type: boolean | |
| default: true | |
| kernelsu_patch_url: | |
| description: KernelSU setup.sh URL (used if apply_kernelsu == true) | |
| required: false | |
| default: https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/next/kernel/setup.sh | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| env: | |
| CCACHE_COMPILERCHECK: '%compiler% -dumpmachine; %compiler% -dumpversion' | |
| CCACHE_NOHASHDIR: 'true' | |
| CCACHE_MAXSIZE: '2G' | |
| KERNEL_CMDLINE: 'ARCH=arm64 LLVM=1 LLVM_IAS=1 O=out CROSS_COMPILE=aarch64-linux-gnu- CLANG_TRIPLE=aarch64-linux-gnu-' | |
| OUTPUT_ZIP_NAME: ${{ github.event.inputs.output_name }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Clone Kernel Source | |
| run: | | |
| set -euo pipefail | |
| git clone --depth=1 --branch "${{ github.event.inputs.kernel_branch }}" "${{ github.event.inputs.kernel_source_url }}" kernel | |
| cd kernel | |
| git submodule update --init --recursive | |
| - name: Install dependencies & Setup environment | |
| run: | | |
| set -euo pipefail | |
| sudo apt-get update -y | |
| sudo apt-get install -y ccache clang-18 llvm-18 lld-18 gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu binutils make python3 libssl-dev build-essential bc bison flex unzip git git-lfs libelf-dev pahole zip | |
| git clone https://github.com/khalidaboelmagd/AnyKernel3 | |
| rm -rf AnyKernel3/.git | |
| mkdir -p modules/vendor/lib/modules | |
| - name: Optional KernelSU Setup | |
| if: ${{ github.event.inputs.apply_kernelsu == 'true' }} | |
| working-directory: kernel | |
| run: | | |
| set -euo pipefail | |
| export PATH="/usr/lib/llvm-18/bin:$PATH" | |
| curl -LSs "${{ github.event.inputs.kernelsu_patch_url }}" | bash - | |
| - name: Write novendor.defaults config | |
| working-directory: kernel | |
| run: | | |
| set -euo pipefail | |
| cat > ../novendor.defaults <<'EOF' | |
| CONFIG_LOCALVERSION_AUTO=y | |
| CONFIG_VENDOR_EDIT=n | |
| CONFIG_OPLUS_DEVICE_INFO=n | |
| CONFIG_OPLUS_PROJECT_INFO=n | |
| CONFIG_OPLUS_ARCH_EXTENDS=n | |
| CONFIG_OPLUS_FEATURE_CHG_BASIC=n | |
| CONFIG_OPLUS_FEATURE_SENSOR=n | |
| CONFIG_MSM_CAMERA=n | |
| CONFIG_QCOM_CAMERA=n | |
| CONFIG_SPECTRA_CAMERA=n | |
| CONFIG_SPECTRA_EEPROM=n | |
| CONFIG_DRM_MSM_OPLUS=n | |
| CONFIG_TOUCHSCREEN_OPLUS=n | |
| CONFIG_SOUND_OPLUS=n | |
| CONFIG_MAC80211=n | |
| CONFIG_CFG80211=n | |
| CONFIG_WLAN=n | |
| CONFIG_NETFILTER=n | |
| CONFIG_NETFILTER_XTABLES=n | |
| CONFIG_NF_CONNTRACK=n | |
| CONFIG_NF_CONNTRACK_IPV4=n | |
| CONFIG_NF_CONNTRACK_IPV6=n | |
| CONFIG_IP_NF_IPTABLES=n | |
| CONFIG_IP_NF_FILTER=n | |
| CONFIG_IP_NF_NAT=n | |
| CONFIG_IP_NF_TARGET_MASQUERADE=n | |
| CONFIG_IP6_NF_IPTABLES=n | |
| CONFIG_IP6_NF_FILTER=n | |
| CONFIG_BRIDGE_NETFILTER=n | |
| CONFIG_NF_TABLES=n | |
| CONFIG_NF_TABLES_IPV4=n | |
| CONFIG_NF_TABLES_IPV6=n | |
| CONFIG_DEBUG_INFO=n | |
| CONFIG_DEBUG_KERNEL=n | |
| EOF | |
| - name: Prepare kernel output and defconfig | |
| working-directory: kernel | |
| run: | | |
| set -euo pipefail | |
| export PATH="/usr/lib/llvm-18/bin:$PATH" | |
| mkdir -p out | |
| make O=out ARCH=arm64 "${{ github.event.inputs.kernel_defconfig }}" | |
| - name: Apply novendor defaults and fully blackhole netfilter | |
| working-directory: kernel | |
| run: | | |
| set -euo pipefail | |
| export PATH="/usr/lib/llvm-18/bin:$PATH" | |
| make O=out ARCH=arm64 olddefconfig KCONFIG_ALLCONFIG=../novendor.defaults | |
| cp out/.config arch/arm64/configs/oneplus_novendor_defconfig || true | |
| blackhole() { | |
| d="$1" | |
| if [ -d "$d" ]; then | |
| printf "# blackholed for no-vendor build\nobj-y :=\nobj-m :=" > "$d/Makefile" | |
| chmod 644 "$d/Makefile" | |
| echo "Blackholed: $d" | |
| fi | |
| } | |
| blackhole drivers/gpu/drm/msm/oplus | |
| blackhole drivers/misc/oplus | |
| blackhole drivers/soc/oplus | |
| blackhole drivers/media/platform/msm/camera | |
| blackhole drivers/staging/qcacld-3.0 | |
| # Fully recursive blackhole netfilter Makefiles to prevent undefined symbol linker errors | |
| for d in net/netfilter net/ipv6/netfilter net/bridge/netfilter; do | |
| find "$d" -type f -name Makefile -exec sh -c 'printf "# disabled (no vendor blobs/netfilter)\nobj-y :=\nobj-m :=" > "$1"' sh {} \; | |
| echo "Fully blackholed netfilter directory: $d" | |
| done | |
| sed -i '/^source.*vendor/d' arch/arm64/configs/* || true | |
| sed -i '/^# Kconfig: vendor/d' arch/arm64/configs/* || true | |
| - name: Build kernel (verbose, single-thread) | |
| working-directory: kernel | |
| env: | |
| KBUILD_OUTPUT: out | |
| run: | | |
| set -euo pipefail | |
| export PATH="/usr/lib/llvm-18/bin:$PATH" | |
| export LD_LIBRARY_PATH="/usr/lib/llvm-18/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" | |
| export DTC_EXT="dtc" | |
| export HOSTCC="clang-18" | |
| export HOSTCXX="clang++-18" | |
| make ${KERNEL_CMDLINE} V=2 -j1 CC="ccache clang-18" LD="ld.lld-18" | |
| test -f out/arch/arm64/boot/Image | |
| cp out/arch/arm64/boot/Image ../AnyKernel3 | |
| - name: Build Wi-Fi Module (qcacld-3.0) | |
| working-directory: kernel | |
| run: | | |
| set -euo pipefail | |
| export PATH="/usr/lib/llvm-18/bin:$PATH" | |
| export LD_LIBRARY_PATH="/usr/lib/llvm-18/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" | |
| export HOSTCC="clang-18" | |
| export HOSTCXX="clang++-18" | |
| make ${KERNEL_CMDLINE} modules_prepare CC="ccache clang-18" | |
| make ${KERNEL_CMDLINE} V=2 -j1 CC="ccache clang-18" LD="ld.lld-18" 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 and Wi-Fi Modules | |
| run: | | |
| set -euo pipefail | |
| cd AnyKernel3 | |
| zip -r "../${OUTPUT_ZIP_NAME}.zip" * | |
| cd ../modules | |
| if ls vendor/lib/modules/*.ko >/dev/null 2>&1; then | |
| zip -r "../${OUTPUT_ZIP_NAME}-modules.zip" * | |
| else | |
| echo "No Wi-Fi modules found, skipping modules zip" | |
| fi | |
| cd .. | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: outputs | |
| path: | | |
| ${{ env.OUTPUT_ZIP_NAME }}.zip | |
| ${{ env.OUTPUT_ZIP_NAME }}-modules.zip | |
| if-no-files-found: warn |