0fecbf3f1ff1f624d049636970469f31a68b44b5
[olsrd.git] / make / Makefile.android
1 #
2 # Steps to compile for Android:
3 #
4 # 1) Download and extract the Android NDK from
5 #    http://developer.android.com/sdk/ndk/index.html
6 #    (e.g. into to /opt, otherwise call 'make NDK_BASE=')
7 #
8 # 2) Compile olsrd with the make command:
9 #    make OS=android DEBUG=0 NDK_BASE=/opt/android-ndk-r8
10 #
11 # 3) Install olsrd on your local PC, e.g.
12 #    sudo make OS=android DEBUG=0 install_all
13 #    which creates a /data directory on your PC.
14 #
15 # 4) Change /data/local/etc/olsrd.conf. You need
16 #    to adapt the 'Interfaces' line, e.g. to use
17 #    the eth0 on your android mobile. Also, the
18 #    LoadPlugin lines needs adaption, e.g. you
19 #    need "/data/local/lib/olsrd_txtinfo.so.0.1"
20 #
21 # 5) Copy all file from /data to your mobile, e.g.
22 #    by pushing the files with the 'adb' tool.
23 #
24
25 #
26 # LINUX SPECIFIC CONFIGURATION
27 #
28
29 DESTDIR ?=
30 prefix ?=
31 sbindir ?= $(prefix)/bin
32 etcdir ?= $(prefix)/etc
33 libdir ?= $(prefix)/lib
34 datarootdir ?= $(prefix)/usr/share
35
36 # the rest are defined in Makefile.inc, but we don't need to override defaults
37 SBINDIR = $(DESTDIR)$(sbindir)
38 ETCDIR = $(DESTDIR)$(etcdir)
39 LIBDIR = $(DESTDIR)$(libdir)
40 SHAREDIR = $(DESTDIR)$(datarootdir)
41
42 # there probably should be an Android log.c and misc.c to support
43 # Logcat, but this works for now
44 SRCS += $(wildcard src/unix/*.c src/linux/*.c)
45 HDRS += $(wildcard src/unix/*.h src/linux/*.h)
46
47 CPPFLAGS +=     -DOLSRD_GLOBAL_CONF_FILE=\"$(CFGFILE)\"
48 # bionic libc: missing declarations
49 CPPFLAGS +=     -DINET_ADDRSTRLEN=16
50 CPPFLAGS +=     -D'IPTOS_PREC(tos)=((tos)&0xe0)'
51 CPPFLAGS +=     -D'IPTOS_TOS(tos)=((tos)&0x1e)'
52 # Android NDK is missing some Linux headers and regex, we have them here:
53 CPPFLAGS += -I$(TOPDIR)/android
54
55 # Compilation flags from build/toolchains/arm-eabi-4.2.1/setup.mk
56 #  * removed -fstrict-aliasing since the code has a lot of type-punning
57 CPPFLAGS +=  \
58         -march=armv5te -mtune=xscale \
59         -msoft-float -fpic \
60         -mthumb-interwork \
61         -ffunction-sections \
62         -funwind-tables \
63         -fstack-protector \
64         -fno-short-enums \
65         -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ \
66         -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__
67 ifeq ($(DEBUG),0)
68 CPPFLAGS +=  \
69         -fomit-frame-pointer \
70         -funswitch-loops \
71         -finline-limit=300
72 else
73 CPPFLAGS += \
74         -fno-omit-frame-pointer
75 endif
76
77 ifdef OLSRD_PLUGIN
78 GENERATE_PIC = true
79 endif
80
81 LDFLAGS += -llog
82
83 ifdef GENERATE_PIC
84 CFLAGS +=       -fPIC
85 LDFLAGS +=      -fPIC
86 endif
87
88 PLUGIN_SONAME ?= $(PLUGIN_NAME)
89 PLUGIN_FULLNAME ?= $(PLUGIN_NAME).so.$(PLUGIN_VER)
90 INSTALL_LIB =   install -D -m 755 $(PLUGIN_FULLNAME) $(LIBDIR)/$(PLUGIN_FULLNAME); \
91                 /sbin/ldconfig -n $(LIBDIR)
92 UNINSTALL_LIB = rm -f $(LIBDIR)/$(PLUGIN_FULLNAME); \
93                 /sbin/ldconfig -n $(LIBDIR)
94
95 # Android NDK setup
96 HOST = arm-linux-androideabi
97 NDK_BASE ?= /opt/android-ndk
98 NDK_PLATFORM_LEVEL ?= 4
99 NDK_ABI=arm
100 NDK_SYSROOT=$(NDK_BASE)/platforms/android-$(NDK_PLATFORM_LEVEL)/arch-$(NDK_ABI)
101 NDK_UNAME=$(shell uname -s | tr '[A-Z]' '[a-z]')
102 # if you are using NDK older than r8, you must use 4.4.3:
103 #NDK_COMPILER_VERSION=4.4.3
104 NDK_COMPILER_VERSION=4.6
105 NDK_TOOLCHAIN=$(NDK_BASE)/toolchains/$(NDK_ABI)-linux-androideabi-$(NDK_COMPILER_VERSION)/prebuilt/$(NDK_UNAME)-x86
106 CROSS_COMPILE = $(NDK_TOOLCHAIN)/bin/$(HOST)-
107
108 CC = $(CROSS_COMPILE)gcc --sysroot="$(NDK_SYSROOT)"
109 LD = $(CROSS_COMPILE)ld
110 AR = $(CROSS_COMPILE)ar
111 ifeq ($(DEBUG),0)
112 STRIP = $(CROSS_COMPILE)strip
113 endif
114
115 # Android didn't add regex until android-8 so include this one
116 REGEX_LIB = $(TOPDIR)/android/regex/libregex.a
117 REGEX_CLEAN = regex_clean
118 $(REGEX_LIB):
119         @$(MAKE) -C $(TOPDIR)/android/regex/ REGEX_LIB=$(REGEX_LIB) VERBOSE=$(VERBOSE) \
120                 NDK_TOOLCHAIN_BASE="$(NDK_TOOLCHAIN_BASE)" \
121                 NDK_PLATFORM_VERSION="$(NDK_PLATFORM_VERSION)" \
122                 NDK_SYSROOT="$(NDK_SYSROOT)" \
123                 CROSS_COMPILE="$(CROSS_COMPILE)" \
124                 CC="$(CC)" LD="$(LD)" AR="$(AR)" STRIP="$(STRIP)" \
125                 CPPFLAGS="$(CPPFLAGS)"
126
127 $(REGEX_CLEAN):
128         @$(MAKE) -C $(TOPDIR)/android/regex/ clean REGEX_LIB=$(REGEX_LIB)
129
130 # Local Variables:
131 # mode: makefile
132 # End: