Files
zaprett/rust/justfile
sqlerrorthing aecde98d0d first working
2025-10-31 17:04:32 +08:00

88 lines
3.2 KiB
Makefile

set shell := ["sh", "-eu", "-c"]
export ANDROID_API := "21"
export ANDROID_NDK_VERSION := "r27d-linux"
TARGET := `pwd` + "/target"
export NETFILTER_LIBS := TARGET + "/netfilter_libs"
export NDK_HOME := TARGET + "/android-ndk-" + ANDROID_NDK_VERSION
_download_android_ndk:
#!/usr/bin/env sh
if [ ! -d "{{NDK_HOME}}" ]; then
echo "Downloading ndk {{ANDROID_NDK_VERSION}} to {{NDK_HOME}}"
TMPFILE="{{NDK_HOME}}.tmp"
TMPDIR="{{NDK_HOME}}.extracted.tmp"
curl -L -C - -o "$TMPFILE" "https://dl.google.com/android/repository/android-ndk-{{ANDROID_NDK_VERSION}}.zip"
unzip "$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:
#!/usr/bin/env sh
if [ ! -d "{{NETFILTER_LIBS}}" ]; then
export PATCH="$(pwd)/libnetfilter_queue-android.patch"
cd "{{TARGET}}"
export TARGET=arm-linux-androideabi
export TOOLCHAIN=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64
export CC="$TOOLCHAIN/bin/clang --target=$TARGET$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/lib/pkgconfig
wget -O- https://www.netfilter.org/pub/libnfnetlink/libnfnetlink-1.0.2.tar.bz2 | tar -xj
wget -O- https://www.netfilter.org/pub/libmnl/libmnl-1.0.5.tar.bz2 | tar -xj
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
for i in libmnl libnfnetlink libnetfilter_queue ; do
(
cd $i-*
CFLAGS="-Os -flto=auto -Wno-implicit-function-declaration" \
./configure --prefix= --host=$TARGET --enable-static --disable-shared --disable-dependency-tracking
make -j$(nproc)
make install DESTDIR=$NETFILTER_LIBS
)
sed -i "s|^prefix=.*|prefix=$NETFILTER_LIBS|g" $NETFILTER_LIBS/lib/pkgconfig/$i.pc
done
else
echo "netfilter libs already built"
fi
prepare-android: _download_android_ndk _build_netfilter_libs
#!/usr/bin/env sh
cargo install cargo-ndk
targets=("armv7-linux-androideabi" "aarch64-linux-android" "i686-linux-android" "x86_64-linux-android")
for t in "${targets[@]}"; do
if ! rustup target list --installed | grep -q "$t"; then
echo "Installing missing target: $t"
rustup target add "$t"
else
echo "Target already installed: $t"
fi
done
build-android *args: prepare-android
#!/usr/bin/env sh
export CFLAGS="-I $NETFILTER_LIBS/include"
export LDFLAGS="-L $NETFILTER_LIBS/lib"
export CXXFLAGS="$CFLAGS"
cargo ndk -t armv7-linux-androideabi -t aarch64-linux-android -t x86\_64-linux-android --platform $ANDROID_API build {{args}}