161 lines
4.4 KiB
Makefile
161 lines
4.4 KiB
Makefile
#
|
|
# Based somewhat on android/Makefile in OpenConnect (David Woodhouse)
|
|
#
|
|
|
|
NDK := /opt/android-ndk-r10e
|
|
ARCH := arm
|
|
GCCVER := 4.9
|
|
|
|
# You should be able to just 'make ARCH=x86' and it should DTRT.
|
|
ARCH_LIST := arm arm64 x86
|
|
APIVER := 21
|
|
ifeq ($(ARCH),arm)
|
|
TRIPLET := arm-linux-androideabi
|
|
TOOLCHAIN := $(TRIPLET)-$(GCCVER)
|
|
NDK_ABINAME := armeabi
|
|
endif
|
|
ifeq ($(ARCH),arm64)
|
|
TRIPLET := aarch64-linux-android
|
|
TOOLCHAIN := $(TRIPLET)-$(GCCVER)
|
|
APIVER := 21
|
|
NDK_ABINAME := arm64-v8a
|
|
endif
|
|
ifeq ($(ARCH),x86)
|
|
TRIPLET := i686-linux-android
|
|
TOOLCHAIN := x86-$(GCCVER)
|
|
NDK_ABINAME := x86
|
|
endif
|
|
|
|
NDK_SYSROOT := $(NDK)/platforms/android-$(APIVER)/arch-$(ARCH)
|
|
|
|
BINDIR := $(firstword $(wildcard $(NDK)/toolchains/$(TOOLCHAIN)/prebuilt/*/bin))
|
|
PATH := $(BINDIR):$(NDK):$(PATH)
|
|
|
|
RESDIR := $(shell pwd)/../app/src/main/res/raw/
|
|
DESTDIR := $(shell pwd)/$(TRIPLET)/out
|
|
|
|
CONFIGURE_ARGS := --host=$(TRIPLET) --disable-shared --enable-static \
|
|
CFLAGS="--sysroot=$(NDK_SYSROOT) -O2 -fvisibility=default -fPIE" \
|
|
LDFLAGS="-rdynamic -pie" \
|
|
|
|
PER_ARCH_TARGETS := iptables busybox nflog
|
|
|
|
.PHONY: all unpack clean
|
|
all: $(addsuffix -binaries,$(ARCH_LIST))
|
|
clean: $(addsuffix -clean,$(ARCH_LIST))
|
|
rm -rf sources
|
|
unpack: $(addsuffix -unpack,$(PER_ARCH_TARGETS))
|
|
|
|
#####################################################################
|
|
#
|
|
# Build iptables
|
|
#
|
|
IPTABLES_VER := 1.4.20
|
|
IPTABLES_SRC := sources/iptables-$(IPTABLES_VER)
|
|
IPTABLES_BUILD := $(TRIPLET)/iptables
|
|
|
|
dist/iptables-$(IPTABLES_VER).tar.bz2:
|
|
mkdir -p dist
|
|
curl http://ftp.netfilter.org/pub/iptables/iptables-$(IPTABLES_VER).tar.bz2 -o $@.tmp && mv $@.tmp $@
|
|
|
|
$(IPTABLES_SRC)/configure: dist/iptables-$(IPTABLES_VER).tar.bz2
|
|
rm -rf $(IPTABLES_SRC)
|
|
mkdir -p sources
|
|
tar -jxf $< -C sources
|
|
cd $(IPTABLES_SRC) && \
|
|
for x in ../../dist/iptables-patches/*; do \
|
|
patch -p1 < $$x || exit 1; \
|
|
done
|
|
cd $(IPTABLES_SRC) && ./autogen.sh
|
|
|
|
$(IPTABLES_BUILD)/Makefile: $(IPTABLES_SRC)/configure
|
|
mkdir -p $(IPTABLES_BUILD)
|
|
cd $(IPTABLES_BUILD) && ../../$(IPTABLES_SRC)/configure \
|
|
$(CONFIGURE_ARGS) --prefix=/
|
|
|
|
$(DESTDIR)/sbin/iptables: $(IPTABLES_BUILD)/Makefile
|
|
$(MAKE) -C $(IPTABLES_BUILD)
|
|
$(MAKE) -C $(IPTABLES_BUILD) install DESTDIR=$(DESTDIR)
|
|
|
|
.PHONY: iptables iptables-unpack
|
|
iptables: $(DESTDIR)/sbin/iptables
|
|
cp -L $(DESTDIR)/sbin/iptables $(RESDIR)/iptables_$(ARCH)
|
|
cp -L $(DESTDIR)/sbin/ip6tables $(RESDIR)/ip6tables_$(ARCH)
|
|
iptables-unpack: $(IPTABLES_SRC)/configure
|
|
|
|
#####################################################################
|
|
#
|
|
# Build busybox
|
|
#
|
|
BUSYBOX_VER := 1.26.2
|
|
BUSYBOX_BUILD := $(TRIPLET)/busybox
|
|
|
|
dist/busybox-$(BUSYBOX_VER).tar.bz2:
|
|
mkdir -p dist
|
|
curl http://busybox.net/downloads/busybox-$(BUSYBOX_VER).tar.bz2 -o $@.tmp && mv $@.tmp $@
|
|
|
|
$(BUSYBOX_BUILD)/.unpacked: dist/busybox-$(BUSYBOX_VER).tar.bz2
|
|
rm -rf $(BUSYBOX_BUILD)
|
|
mkdir -p $(BUSYBOX_BUILD)
|
|
tar --strip 1 -jxf $< -C $(BUSYBOX_BUILD)
|
|
cd $(BUSYBOX_BUILD) && \
|
|
for x in ../../dist/busybox-patches/*; do \
|
|
patch -p1 < $$x || exit 1; \
|
|
done
|
|
touch $@
|
|
|
|
$(BUSYBOX_BUILD)/.configured: $(BUSYBOX_BUILD)/.unpacked
|
|
cp -f dist/busybox-config $(BUSYBOX_BUILD)/.config
|
|
echo "CONFIG_CROSS_COMPILER_PREFIX=\"$(TRIPLET)-\"" >> $(BUSYBOX_BUILD)/.config
|
|
echo "CONFIG_SYSROOT=\"$(NDK_SYSROOT)\"" >> $(BUSYBOX_BUILD)/.config
|
|
touch $@
|
|
|
|
$(BUSYBOX_BUILD)/busybox: $(BUSYBOX_BUILD)/.configured
|
|
$(MAKE) -C $(BUSYBOX_BUILD) KCONFIG_NOTIMESTAMP=1
|
|
|
|
.PHONY: busybox busybox-unpack
|
|
busybox: $(BUSYBOX_BUILD)/busybox
|
|
cp $< $(RESDIR)/busybox_$(ARCH)
|
|
busybox-unpack: $(BUSYBOX_BUILD)/.configured
|
|
|
|
#####################################################################
|
|
#
|
|
# Build nflog
|
|
#
|
|
NDK_OUTDIR := ../libs/$(NDK_ABINAME)
|
|
|
|
$(NDK_OUTDIR)/nflog: .FORCE
|
|
ndk-build APP_ABI=$(NDK_ABINAME) APP_PLATFORM=$(APIVER) NDK_TOOLCHAIN=$(TOOLCHAIN)
|
|
|
|
.FORCE:
|
|
.PHONY: nflog nflog-unpack
|
|
nflog: $(NDK_OUTDIR)/nflog
|
|
cp $< $(RESDIR)/nflog_$(ARCH)
|
|
nflog-unpack:
|
|
|
|
#####################################################################
|
|
#
|
|
# Build Run PIE
|
|
#
|
|
# NDK_OUTDIR := ../libs/$(NDK_ABINAME)
|
|
|
|
# $(NDK_OUTDIR)/run_pie:
|
|
# ndk-build APP_ABI=$(NDK_ABINAME)
|
|
|
|
#.PHONY: run_pie run_pie-unpack
|
|
#run_pie: $(NDK_OUTDIR)/run_pie
|
|
# cp $< $(RESDIR)/run_pie_$(ARCH)
|
|
# run_pie-unpack:
|
|
|
|
#####################################################################
|
|
#
|
|
# Common targets
|
|
#
|
|
.PHONY: arch-clean %-clean %-binaries
|
|
arch-clean:
|
|
rm -rf $(TRIPLET) $(NDK_OUTDIR)
|
|
%-clean:
|
|
$(MAKE) ARCH=$* arch-clean
|
|
ndk-build APP_ABI=$(NDK_ABINAME) clean
|
|
%-binaries: unpack
|
|
$(MAKE) ARCH=$* $(PER_ARCH_TARGETS)
|