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 "$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 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" export LDFLAGS="-L$NETFILTER_LIBS-$t/lib" export CXXFLAGS="$CFLAGS" 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