From 30443ed31d0b3dbdd9812869c563fb7dc300e08a Mon Sep 17 00:00:00 2001 From: spvkgn Date: Sun, 17 Nov 2024 10:21:28 +0500 Subject: [PATCH] github: build for Android --- .github/workflows/build.yml | 98 ++++++++++++++++--- .../libnetfilter_queue-android.patch | 41 ++++++++ 2 files changed, 126 insertions(+), 13 deletions(-) create mode 100644 .github/workflows/libnetfilter_queue-android.patch diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bac611b..b9a2d90 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -281,9 +281,77 @@ jobs: path: zapret-*.zip if-no-files-found: error + build-android: + name: Android ${{ matrix.abi }} + runs-on: ubuntu-latest + strategy: + matrix: + include: + - abi: armeabi-v7a + target: armv7a-linux-androideabi + - abi: arm64-v8a + target: aarch64-linux-android + - abi: x86 + target: i686-linux-android + - abi: x86_64 + target: x86_64-linux-android + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + path: zapret + + - name: Build + env: + ABI: ${{ matrix.abi }} + TARGET: ${{ matrix.target }} + run: | + DEPS_DIR=$GITHUB_WORKSPACE/deps + export TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64 + export API=21 + export CC="$TOOLCHAIN/bin/clang --target=$TARGET$API" + export AR=$TOOLCHAIN/bin/llvm-ar + export AS=$CC + export LD=$TOOLCHAIN/bin/ld + export RANLIB=$TOOLCHAIN/bin/llvm-ranlib + export STRIP=$TOOLCHAIN/bin/llvm-strip + export PKG_CONFIG_PATH=$DEPS_DIR/lib/pkgconfig + + # optimize for size + export CFLAGS="-Os -flto=auto" + export LDFLAGS="-Os" + + # netfilter libs + wget -qO- https://www.netfilter.org/pub/libnfnetlink/libnfnetlink-1.0.2.tar.bz2 | tar -xj + wget -qO- https://www.netfilter.org/pub/libmnl/libmnl-1.0.5.tar.bz2 | tar -xj + wget -qO- https://www.netfilter.org/pub/libnetfilter_queue/libnetfilter_queue-1.0.5.tar.bz2 | tar -xj + patch -p1 -d libnetfilter_queue-* -i ../zapret/.github/workflows/libnetfilter_queue-android.patch + + for i in libmnl libnfnetlink libnetfilter_queue ; do + ( + cd $i-* + CFLAGS="$CFLAGS -Wno-implicit-function-declaration" \ + ./configure --prefix= --host=$TARGET --enable-static --disable-shared --disable-dependency-tracking + make install -j$(nproc) DESTDIR=$DEPS_DIR + ) + sed -i "s|^prefix=.*|prefix=$DEPS_DIR|g" $DEPS_DIR/lib/pkgconfig/$i.pc + done + + # zapret + CFLAGS="$CFLAGS -I$DEPS_DIR/include" LDFLAGS="$LDFLAGS -L$DEPS_DIR/lib" \ + make -C zapret android -j$(nproc) + zip zapret-android-$ABI.zip -j zapret/binaries/my/* + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: zapret-android-${{ matrix.abi }} + path: zapret-*.zip + if-no-files-found: error + release: if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') - needs: [ build-linux, build-windows, build-macos, build-freebsd ] + needs: [ build-linux, build-windows, build-macos, build-freebsd, build-android ] permissions: contents: write runs-on: ubuntu-latest @@ -342,18 +410,22 @@ jobs: if [ -d $dir ]; then echo "Processing $dir" case $dir in - *-freebsd-x86_64 ) run_dir freebsd-x64 ;; - *-linux-arm ) run_dir arm ;; - *-linux-arm64 ) run_dir aarch64 ;; - *-linux-mips64 ) run_dir mips64r2-msb ;; - *-linux-mipselsf ) run_dir mips32r1-lsb ;; - *-linux-mipssf ) run_dir mips32r1-msb ;; - *-linux-ppc ) run_dir ppc ;; - *-linux-x86 ) run_dir x86 ;; - *-linux-x86_64 ) run_dir x86_64 ;; - *-mac-x64 ) run_dir mac64 ;; - *-win-x86 ) run_dir win32 ;; - *-win-x86_64 ) run_dir win64 ;; + *-android-arm64-v8a ) run_dir android-aarch64 ;; + *-android-armeabi-v7a ) run_dir android-arm ;; + *-android-x86 ) run_dir android-x86 ;; + *-android-x86_64 ) run_dir android-x86_64 ;; + *-freebsd-x86_64 ) run_dir freebsd-x64 ;; + *-linux-arm ) run_dir arm ;; + *-linux-arm64 ) run_dir aarch64 ;; + *-linux-mips64 ) run_dir mips64r2-msb ;; + *-linux-mipselsf ) run_dir mips32r1-lsb ;; + *-linux-mipssf ) run_dir mips32r1-msb ;; + *-linux-ppc ) run_dir ppc ;; + *-linux-x86 ) run_dir x86 ;; + *-linux-x86_64 ) run_dir x86_64 ;; + *-mac-x64 ) run_dir mac64 ;; + *-win-x86 ) run_dir win32 ;; + *-win-x86_64 ) run_dir win64 ;; esac fi done diff --git a/.github/workflows/libnetfilter_queue-android.patch b/.github/workflows/libnetfilter_queue-android.patch new file mode 100644 index 0000000..a0ce64b --- /dev/null +++ b/.github/workflows/libnetfilter_queue-android.patch @@ -0,0 +1,41 @@ +--- a/src/extra/pktbuff.c ++++ b/src/extra/pktbuff.c +@@ -14,7 +14,7 @@ + #include /* for memcpy */ + #include + +-#include ++#include + #include + #include + +--- a/src/nlmsg.c ++++ b/src/nlmsg.c +@@ -21,7 +21,7 @@ + + #include + +-#include ++// #include + + #include "internal.h" + +--- a/src/extra/tcp.c ++++ b/src/extra/tcp.c +@@ -139,12 +139,16 @@ void nfq_tcp_compute_checksum_ipv6(struc + * (union is compatible to any of its members) + * This means this part of the code is -fstrict-aliasing safe now. + */ ++#ifndef __ANDROID__ + union tcp_word_hdr { + struct tcphdr hdr; + uint32_t words[5]; + }; ++#endif + ++#ifndef tcp_flag_word + #define tcp_flag_word(tp) ( ((union tcp_word_hdr *)(tp))->words[3]) ++#endif + + /** + * nfq_pkt_snprintf_tcp_hdr - print tcp header into one buffer in a humnan