Build kernel (KSN) & WIFI A16 - no vendor blobs, KernelSU enabled by default #22
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) minimal 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 | |
| # Disable major vendor-dependent modules known to cause build failures without blobs | |
| 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: Blackhole vendor-dependent directories (minimal) | |
| 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 | |
| blackhole net/netfilter | |
| 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 |