mirror of
https://github.com/egor-white/zaprett.git
synced 2026-01-28 13:39:44 +05:00
140 lines
4.8 KiB
Makefile
140 lines
4.8 KiB
Makefile
set shell := ["bash", "-eu", "-c"]
|
|
|
|
export ANDROID_API := "21"
|
|
export ANDROID_NDK_VERSION := "r27d-linux"
|
|
|
|
TARGET := `pwd` + "/target"
|
|
|
|
export NETFILTER_LIBS := TARGET + "/netfilter"
|
|
|
|
export NDK_HOME := TARGET + "/android-ndk-" + ANDROID_NDK_VERSION
|
|
|
|
_download_android_ndk:
|
|
#!/usr/bin/env bash
|
|
if [ ! -d "{{NDK_HOME}}" ]; then
|
|
echo "Downloading ndk {{ANDROID_NDK_VERSION}} to {{NDK_HOME}}"
|
|
TMPFILE="{{NDK_HOME}}.tmp"
|
|
TMPDIR="{{NDK_HOME}}.extracted.tmp"
|
|
|
|
mkdir -p "$(dirname "$TMPFILE")"
|
|
|
|
curl -L -C - -o "$TMPFILE" "https://dl.google.com/android/repository/android-ndk-{{ANDROID_NDK_VERSION}}.zip"
|
|
|
|
unzip -q "$TMPFILE" -d "$TMPDIR"
|
|
|
|
inner_folder=$(find "$TMPDIR" -mindepth 1 -maxdepth 1 -type d | head -n 1)
|
|
mv -T "$inner_folder" "$NDK_HOME"
|
|
|
|
rm -rf "$TMPFILE" "$TMPDIR"
|
|
|
|
echo "Android ndk {{ANDROID_NDK_VERSION}} successfully installed in {{NDK_HOME}}"
|
|
else
|
|
echo "Android ndk {{ANDROID_NDK_VERSION}} already installed in {{NDK_HOME}}"
|
|
fi
|
|
|
|
_build_netfilter_libs target_arch:
|
|
#!/usr/bin/env bash
|
|
|
|
if [ ! -d "{{NETFILTER_LIBS}}-{{target_arch}}" ]; then
|
|
export PATCH="$(pwd)/libnetfilter_queue-android.patch"
|
|
cd "{{TARGET}}"
|
|
|
|
export TOOLCHAIN=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64
|
|
export CC="$TOOLCHAIN/bin/clang --target={{target_arch}}$ANDROID_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=$NETFILTER_LIBS-{{target_arch}}/lib/pkgconfig
|
|
|
|
if [ ! -d "libnfnetlink-1.0.2" ]; then
|
|
wget -O- https://www.netfilter.org/pub/libnfnetlink/libnfnetlink-1.0.2.tar.bz2 | tar -xj
|
|
fi
|
|
|
|
if [ ! -d "libmnl-1.0.5" ]; then
|
|
wget -O- https://www.netfilter.org/pub/libmnl/libmnl-1.0.5.tar.bz2 | tar -xj
|
|
fi
|
|
|
|
if [ ! -d "libnetfilter_queue-1.0.5" ]; then
|
|
wget -O- https://www.netfilter.org/pub/libnetfilter_queue/libnetfilter_queue-1.0.5.tar.bz2 | tar -xj
|
|
patch -p1 -d libnetfilter_queue-* -i $PATCH
|
|
fi
|
|
|
|
if [ ! -d "luajit2-*" ]; then
|
|
wget -qO- https://github.com/openresty/luajit2/archive/refs/tags/v2.1-20250826.tar.gz | tar -xz
|
|
fi
|
|
|
|
case "{{target_arch}}" in
|
|
*64*)
|
|
HOSTCC="cc"
|
|
;;
|
|
*)
|
|
HOSTCC="cc -m32"
|
|
esac
|
|
|
|
(
|
|
cd luajit2-*
|
|
make BUILDMODE=static XCFLAGS=-DLUAJIT_DISABLE_FFI \
|
|
HOST_CC="$HOSTCC" CROSS= CC="$CC" \
|
|
TARGET_AR="$AR rcus" TARGET_STRIP=$STRIP \
|
|
CFLAGS="-Os -flto=auto $CFLAGS" -j$(nproc)
|
|
|
|
make install PREFIX= DESTDIR=$NETFILTER_LIBS-{{target_arch}}
|
|
)
|
|
|
|
LJIT=1
|
|
LCFLAGS="-I${NETFILTER_LIBS-{{target_arch}}}/include/luajit-2.1"
|
|
LLIB="-L${NETFILTER_LIBS-{{target_arch}}}/lib -lluajit-2.1"
|
|
|
|
for i in libmnl libnfnetlink libnetfilter_queue ; do
|
|
(
|
|
cd $i-*
|
|
make clean
|
|
CFLAGS="-Os -flto=auto -Wno-implicit-function-declaration" \
|
|
./configure --prefix= --host={{target_arch}} --enable-static --disable-shared --disable-dependency-tracking
|
|
make -j$(nproc)
|
|
make install DESTDIR=$NETFILTER_LIBS-{{target_arch}}
|
|
)
|
|
sed -i "s|^prefix=.*|prefix=$NETFILTER_LIBS-{{target_arch}}|g" $NETFILTER_LIBS-{{target_arch}}/lib/pkgconfig/$i.pc
|
|
done
|
|
else
|
|
echo "Netfilter libs for {{target_arch}} already built"
|
|
fi
|
|
|
|
_instal_rust_target target:
|
|
#!/usr/bin/env bash
|
|
if ! rustup target list --installed | grep -q "{{target}}"; then
|
|
echo "Installing missing target: {{target}}"
|
|
rustup target add "{{target}}"
|
|
else
|
|
echo "Target already installed: {{target}}"
|
|
fi
|
|
|
|
prepare-android: _download_android_ndk
|
|
#!/usr/bin/env bash
|
|
cargo install cargo-ndk
|
|
|
|
build-android *args: prepare-android
|
|
#!/usr/bin/env bash
|
|
|
|
targets=("armv7-linux-androideabi" "aarch64-linux-android" "x86_64-linux-android")
|
|
|
|
for i in "${!targets[@]}"; do
|
|
t=${targets[$i]}
|
|
(
|
|
echo "Building target $t"
|
|
export CFLAGS="-I$NETFILTER_LIBS-$t/include -I$NETFILTER_LIBS-$t/include/luajit-2.1"
|
|
export LUAJIT="$NETFILTER_LIBS-$t/include/luajit-2.1"
|
|
export LDFLAGS="-L$NETFILTER_LIBS-$t/lib"
|
|
export CXXFLAGS="$CFLAGS"
|
|
export LJIT=1
|
|
export LCFLAGS="-I$NETFILTER_LIBS-$t/include -I$NETFILTER_LIBS-$t/include/luajit-2.1"
|
|
export LLIB="-L$NETFILTER_LIBS-$t/lib -lluajit-2.1"
|
|
|
|
just _build_netfilter_libs $t
|
|
just _instal_rust_target $t
|
|
NETFILTER_LIBS=$NETFILTER_LIBS-$t cargo ndk -t $t --platform $ANDROID_API build {{args}}
|
|
)
|
|
done
|