blob: cbb76095d78cf368ddaf59e47d129a158194422c [file] [log] [blame]
Alexandre Lision43b9aeb2014-07-15 14:21:19 -04001# Sources and objects
Tristan Matthewsccf51e32013-07-18 14:40:51 -04002
Alexandre Lision43b9aeb2014-07-15 14:21:19 -04003export ANDROID_HOME=$(ANDROID_SDK)
Tristan Matthews5bb1b5d2013-07-18 14:32:58 -04004
Alexandre Lision43b9aeb2014-07-15 14:21:19 -04005ARCH = $(ANDROID_ABI)
Tristan Matthews322b9fd2013-07-18 15:55:43 -04006
Alexandre Lision68d8f2e2014-07-30 17:42:40 -04007SRC=sflphone-android
8JAVA_SOURCES=$(SRC)/src/org/sflphone/*.java
Alexandre Lision43b9aeb2014-07-15 14:21:19 -04009JNI_SOURCES=$(SRC)/jni/*.c $(SRC)/jni/*.h
10LIBVLCJNI= \
Alexandre Lision68d8f2e2014-07-30 17:42:40 -040011 $(SRC)/obj/local/$(ARCH)/libsflphone.so \
Alexandre Lision43b9aeb2014-07-15 14:21:19 -040012
13LIBVLCJNI_H=$(SRC)/jni/libvlcjni.h
14
15PRIVATE_LIBDIR=android-libs
16PRIVATE_LIBS=$(PRIVATE_LIBDIR)/libstagefright.so $(PRIVATE_LIBDIR)/libmedia.so $(PRIVATE_LIBDIR)/libutils.so $(PRIVATE_LIBDIR)/libbinder.so
17
18ifneq ($(V),)
19ANT_OPTS += -v
20VERBOSE =
21GEN =
22else
23VERBOSE = @
24GEN = @echo "Generating" $@;
25endif
26
27ifeq ($(RELEASE),1)
28ANT_TARGET = release
29VLC_APK=$(SRC)/bin/VLC-release-unsigned.apk
30NDK_DEBUG=0
31else
32ANT_TARGET = debug
33VLC_APK=$(SRC)/bin/VLC-debug.apk
34NDK_DEBUG=1
35endif
36
37$(VLC_APK): $(LIBVLCJNI) $(JAVA_SOURCES)
38 @echo
39 @echo "=== Building $@ for $(ARCH) ==="
40 @echo
41 date +"%Y-%m-%d" > $(SRC)/assets/builddate.txt
42 echo `id -u -n`@`hostname` > $(SRC)/assets/builder.txt
43 git rev-parse --short HEAD > $(SRC)/assets/revision.txt
44 ./gen-env.sh $(SRC)
45 $(VERBOSE)cd $(SRC) && ant $(ANT_OPTS) $(ANT_TARGET)
46
47VLC_MODULES=`./find_modules.sh $(VLC_BUILD_DIR)`
48
49$(LIBVLCJNI_H):
50 $(VERBOSE)if [ -z "$(VLC_BUILD_DIR)" ]; then echo "VLC_BUILD_DIR not defined" ; exit 1; fi
51 $(GEN)modules="$(VLC_MODULES)" ; \
52 if [ -z "$$modules" ]; then echo "No VLC modules found in $(VLC_BUILD_DIR)/modules"; exit 1; fi; \
53 DEFINITION=""; \
54 BUILTINS="const void *vlc_static_modules[] = {\n"; \
55 for file in $$modules; do \
56 name=`echo $$file | sed 's/.*\.libs\/lib//' | sed 's/_plugin\.a//'`; \
57 DEFINITION=$$DEFINITION"int vlc_entry__$$name (int (*)(void *, void *, int, ...), void *);\n"; \
58 BUILTINS="$$BUILTINS vlc_entry__$$name,\n"; \
59 done; \
60 BUILTINS="$$BUILTINS NULL\n};\n"; \
61 printf "/* Autogenerated from the list of modules */\n $$DEFINITION\n $$BUILTINS\n" > $@
62
63$(PRIVATE_LIBDIR)/%.so: $(PRIVATE_LIBDIR)/%.c
64 $(GEN)$(TARGET_TUPLE)-gcc $< -shared -o $@ --sysroot=$(ANDROID_NDK)/platforms/android-9/arch-$(PLATFORM_SHORT_ARCH)
65
66$(PRIVATE_LIBDIR)/%.c: $(PRIVATE_LIBDIR)/%.symbols
67 $(VERBOSE)rm -f $@
68 $(GEN)for s in `cat $<`; do echo "void $$s() {}" >> $@; done
69
70$(LIBVLCJNI): $(JNI_SOURCES) $(LIBVLCJNI_H) $(PRIVATE_LIBS)
71 @if [ -z "$(VLC_BUILD_DIR)" ]; then echo "VLC_BUILD_DIR not defined" ; exit 1; fi
72 @if [ -z "$(ANDROID_NDK)" ]; then echo "ANDROID_NDK not defined" ; exit 1; fi
73 @echo
74 @echo "=== Building libvlcjni ==="
75 @echo
76 $(VERBOSE)if [ -z "$(VLC_SRC_DIR)" ] ; then VLC_SRC_DIR=./vlc; fi ; \
77 if [ -z "$(VLC_CONTRIB)" ] ; then VLC_CONTRIB="$$VLC_SRC_DIR/contrib/$(TARGET_TUPLE)"; fi ; \
78 vlc_modules="$(VLC_MODULES)" ; \
79 if [ `echo "$(VLC_BUILD_DIR)" | head -c 1` != "/" ] ; then \
80 vlc_modules="`echo $$vlc_modules|sed \"s|$(VLC_BUILD_DIR)|../$(VLC_BUILD_DIR)|g\"`" ; \
81 VLC_BUILD_DIR="../$(VLC_BUILD_DIR)"; \
82 fi ; \
83 [ `echo "$$VLC_CONTRIB" | head -c 1` != "/" ] && VLC_CONTRIB="../$$VLC_CONTRIB"; \
84 [ `echo "$$VLC_SRC_DIR" | head -c 1` != "/" ] && VLC_SRC_DIR="../$$VLC_SRC_DIR"; \
85 $(ANDROID_NDK)/ndk-build -C $(SRC) \
86 VLC_SRC_DIR="$$VLC_SRC_DIR" \
87 VLC_CONTRIB="$$VLC_CONTRIB" \
88 VLC_BUILD_DIR="$$VLC_BUILD_DIR" \
89 VLC_MODULES="$$vlc_modules" \
90 NDK_DEBUG=$(NDK_DEBUG) \
91 TARGET_CFLAGS="$$VLC_EXTRA_CFLAGS"
92
93apkclean:
94 rm -f $(VLC_APK)
95
96lightclean:
97 cd $(SRC) && rm -rf libs obj bin $(VLC_APK)
98 rm -f $(PRIVATE_LIBDIR)/*.so $(PRIVATE_LIBDIR)/*.c
99
100clean: lightclean
101 rm -rf $(SRC)/gen java-libs/*/gen java-libs/*/bin .sdk vlc-sdk/ vlc-sdk.7z
102
103jniclean: lightclean
104 rm -f $(LIBVLCJNI) $(LIBVLCJNI_H)
105
106distclean: clean jniclean
107
108install: $(VLC_APK)
109 @echo "=== Installing VLC on device ==="
110 adb wait-for-device
111 adb install -r $(VLC_APK)
Tristan Matthews5bb1b5d2013-07-18 14:32:58 -0400112
Tristan Matthewsfdd94e52013-07-19 16:44:44 -0400113uninstall:
Alexandre Lision43b9aeb2014-07-15 14:21:19 -0400114 adb wait-for-device
115 adb uninstall org.videolan.vlc
Tristan Matthewsfdd94e52013-07-19 16:44:44 -0400116
Alexandre Lision43b9aeb2014-07-15 14:21:19 -0400117run:
118 @echo "=== Running VLC on device ==="
119 adb wait-for-device
120ifeq ($(URL),)
121 adb shell am start -n org.videolan.vlc/org.videolan.vlc.gui.MainActivity
122else
123 adb shell am start -n org.videolan.vlc/org.videolan.vlc.gui.video.VideoPlayerActivity $(URL)
124endif
125
126build-and-run: install run
127
128apkclean-run: apkclean build-and-run
129 adb logcat -c
130
131distclean-run: distclean build-and-run
132 adb logcat -c
133
134vlc-sdk.7z: .sdk
135 7z a $@ vlc-sdk/
136
137.sdk:
138 mkdir -p vlc-sdk/libs
139 cd vlc-android; cp -r libs/* ../vlc-sdk/libs
140 mkdir -p vlc-sdk/src/org/videolan
141 cp -r vlc-android/src/org/videolan/libvlc vlc-sdk/src/org/videolan
142 touch $@
143
144.PHONY: lightclean clean jniclean distclean distclean-run apkclean apkclean-run install run build-and-run