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