mirror of
https://github.com/okhsunrog/vpnhide.git
synced 2026-04-28 22:52:15 +00:00
- Add Google's AOSP clang (clang-r487747c, same as Pixel kernel build) to the CI Docker image via sparse checkout. Distro clang caused ABI mismatches leading to bootloops on device. - Update kmod workflow to use the Docker image + AOSP clang instead of system clang from apt. - Replace symvers with real vmlinux.symvers from Pixel kernel build (8050 symbols vs 4060 from device .ko extraction). - Add kmod build deps (bc, kmod, cpio, binutils-aarch64) to Docker image.
153 lines
4.8 KiB
YAML
153 lines
4.8 KiB
YAML
name: Kmod
|
|
|
|
on:
|
|
push:
|
|
paths:
|
|
- 'kmod/**'
|
|
- '.github/workflows/kmod.yml'
|
|
- '.github/docker/ci/Dockerfile'
|
|
pull_request:
|
|
paths:
|
|
- 'kmod/**'
|
|
- '.github/workflows/kmod.yml'
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: write
|
|
packages: read
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
image: ghcr.io/${{ github.repository }}/ci:latest
|
|
credentials:
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
strategy:
|
|
matrix:
|
|
gki:
|
|
- branch: android14-6.1
|
|
symvers: kmod/symvers/android14-6.1.symvers
|
|
|
|
env:
|
|
CLANG_DIR: /opt/aosp-clang/bin
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Mark workspace safe
|
|
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
|
|
|
- name: Cache kernel source
|
|
uses: actions/cache@v4
|
|
id: kernel-cache
|
|
with:
|
|
path: kernel-source
|
|
key: kernel-${{ matrix.gki.branch }}-v2
|
|
|
|
- name: Clone kernel source (shallow)
|
|
if: steps.kernel-cache.outputs.cache-hit != 'true'
|
|
run: |
|
|
git clone --depth=1 -b ${{ matrix.gki.branch }} \
|
|
https://android.googlesource.com/kernel/common \
|
|
kernel-source
|
|
|
|
- name: Prepare kernel source
|
|
run: |
|
|
cd kernel-source
|
|
|
|
make ARCH=arm64 LLVM=1 LLVM_IAS=1 \
|
|
CC=$CLANG_DIR/clang LD=$CLANG_DIR/ld.lld \
|
|
AR=$CLANG_DIR/llvm-ar NM=$CLANG_DIR/llvm-nm \
|
|
OBJCOPY=$CLANG_DIR/llvm-objcopy \
|
|
OBJDUMP=$CLANG_DIR/llvm-objdump \
|
|
STRIP=$CLANG_DIR/llvm-strip \
|
|
CROSS_COMPILE=aarch64-linux-gnu- \
|
|
gki_defconfig
|
|
|
|
touch abi_symbollist.raw
|
|
|
|
make ARCH=arm64 LLVM=1 LLVM_IAS=1 \
|
|
CC=$CLANG_DIR/clang LD=$CLANG_DIR/ld.lld \
|
|
AR=$CLANG_DIR/llvm-ar NM=$CLANG_DIR/llvm-nm \
|
|
OBJCOPY=$CLANG_DIR/llvm-objcopy \
|
|
OBJDUMP=$CLANG_DIR/llvm-objdump \
|
|
STRIP=$CLANG_DIR/llvm-strip \
|
|
CROSS_COMPILE=aarch64-linux-gnu- \
|
|
olddefconfig prepare || true
|
|
|
|
# Generate module.lds (make prepare sometimes skips this)
|
|
if [ ! -f scripts/module.lds ]; then
|
|
$CLANG_DIR/clang -E -Wp,-MD,scripts/.module.lds.d -nostdinc \
|
|
-I arch/arm64/include -I arch/arm64/include/generated \
|
|
-I include -I include/generated \
|
|
-include include/linux/kconfig.h \
|
|
-D__KERNEL__ -DCC_USING_PATCHABLE_FUNCTION_ENTRY \
|
|
--target=aarch64-linux-gnu -x c scripts/module.lds.S \
|
|
2>/dev/null | grep -v '^#' > scripts/module.lds
|
|
sed -i 's/((1UL) << 12)/4096/g' scripts/module.lds
|
|
fi
|
|
|
|
cp "$GITHUB_WORKSPACE/${{ matrix.gki.symvers }}" Module.symvers
|
|
|
|
echo '#define UTS_RELEASE "6.1.0-vpnhide-ci"' \
|
|
> include/generated/utsrelease.h
|
|
echo -n "6.1.0-vpnhide-ci" > include/config/kernel.release
|
|
|
|
- name: Build kernel module
|
|
run: |
|
|
export KERNEL_SRC=$GITHUB_WORKSPACE/kernel-source
|
|
make -C $KERNEL_SRC M=$GITHUB_WORKSPACE/kmod \
|
|
ARCH=arm64 LLVM=1 LLVM_IAS=1 \
|
|
CC=$CLANG_DIR/clang LD=$CLANG_DIR/ld.lld \
|
|
AR=$CLANG_DIR/llvm-ar NM=$CLANG_DIR/llvm-nm \
|
|
OBJCOPY=$CLANG_DIR/llvm-objcopy \
|
|
OBJDUMP=$CLANG_DIR/llvm-objdump \
|
|
STRIP=$CLANG_DIR/llvm-strip \
|
|
CROSS_COMPILE=aarch64-linux-gnu- \
|
|
modules
|
|
ls -lh kmod/vpnhide_kmod.ko
|
|
|
|
- name: Package KSU module zip
|
|
id: package
|
|
run: |
|
|
cp kmod/vpnhide_kmod.ko kmod/module/
|
|
ZIPNAME="vpnhide-kmod-${{ matrix.gki.branch }}.zip"
|
|
(cd kmod/module && zip -qr "../../$ZIPNAME" .)
|
|
ls -lh "$ZIPNAME"
|
|
echo "zipname=$ZIPNAME" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Upload artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: vpnhide-kmod-${{ matrix.gki.branch }}
|
|
path: vpnhide-kmod-${{ matrix.gki.branch }}.zip
|
|
if-no-files-found: error
|
|
|
|
release:
|
|
needs: build
|
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Download all artifacts
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
path: dist/
|
|
merge-multiple: true
|
|
|
|
- name: Generate checksums
|
|
run: |
|
|
cd dist
|
|
for f in *.zip; do sha256sum "$f" > "${f}.sha256"; done
|
|
|
|
- name: Upload release assets
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
tag_name: ${{ github.ref_name }}
|
|
files: |
|
|
dist/*.zip
|
|
dist/*.sha256
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|