Use linphone-cmake-builder to compile the SDK.
This commit is contained in:
parent
414e9b6fa0
commit
b8fde5a13d
9 changed files with 619 additions and 627 deletions
534
Makefile
534
Makefile
|
@ -1,534 +0,0 @@
|
|||
NDK_PATH=$(shell dirname `which ndk-build`)
|
||||
NDK_MAJOR_VERSION=$(shell cat $(NDK_PATH)/RELEASE.TXT | sed "s/r\([0-9]\{1,2\}\).*/\1/")
|
||||
SDK_PATH=$(shell dirname `which android`)
|
||||
SDK_PLATFORM_TOOLS_PATH=$(shell dirname `which adb`)
|
||||
ARM_COMPILER_PATH=`find "$(NDK_PATH)" -name "arm-linux-androideabi-gcc-4*" -print | tail -1`
|
||||
ARM_TOOLCHAIN_PATH=$(shell dirname $(ARM_COMPILER_PATH))/arm-linux-androideabi-
|
||||
X86_COMPILER_PATH=`find "$(NDK_PATH)" -name "i686-linux-android-gcc-4*" -print | tail -1`
|
||||
X86_TOOLCHAIN_PATH=$(shell dirname $(X86_COMPILER_PATH))/i686-linux-android-
|
||||
NUMCPUS=$(shell grep -c '^processor' /proc/cpuinfo 2>/dev/null || echo "4" )
|
||||
TOPDIR=$(shell pwd)
|
||||
LIBLINPHONE_VERSION=$(shell cd submodules/linphone && git describe --always)
|
||||
LINPHONE_ANDROID_DEBUG_VERSION=$(shell git describe --always)
|
||||
BELLESIP_VERSION_SCRIPT:=cat submodules/belle-sip/configure.ac | grep "AC_INIT(" | sed -e "s/.*belle-sip\]//" | sed -e "s/].*//" | sed -e "s/.*\[//"
|
||||
BELLESIP_VERSION=$(shell $(BELLESIP_VERSION_SCRIPT))
|
||||
ANDROID_MOST_RECENT_TARGET=$(shell android list target -c | grep -E 'android-[0-9]+' | tail -n1)
|
||||
#We force target 19 because 21 creates binaries incompatible with older versions due to rand() function no longer inline (congrats to Google's developers)
|
||||
NDKBUILD_TARGET=android-19
|
||||
#The NDK target used to compile external third parties (ffmpeg, x264)
|
||||
EXTERNAL_MAKE_TARGET=14
|
||||
ARM_SYSROOT=${NDK_PATH}/platforms/android-$(EXTERNAL_MAKE_TARGET)/arch-arm
|
||||
X86_SYSROOT=${NDK_PATH}/platforms/android-$(EXTERNAL_MAKE_TARGET)/arch-x86
|
||||
SQLITE_VERSION=3071700
|
||||
SQLITE_BASENAME=sqlite-amalgamation-$(SQLITE_VERSION)
|
||||
SQLITE_URL=http://www.sqlite.org/2013/$(SQLITE_BASENAME).zip
|
||||
ENABLE_GPL_THIRD_PARTIES=1
|
||||
#override CC variable to disable compiler specific FLAGS in configure using the system compiler instead of the android one
|
||||
CC=
|
||||
PACKAGE_NAME=$(shell sed -nE 's|<property name="linphone.package.name" value="(.*)" />|\1|p' custom_rules.xml)
|
||||
#default options, can be overidden using make OPTION=value .
|
||||
|
||||
ifeq ($(ENABLE_GPL_THIRD_PARTIES),1)
|
||||
BUILD_G729=1
|
||||
else
|
||||
#x264 and g729 requires additional licensing agreements.
|
||||
BUILD_X264=0
|
||||
BUILD_G729=0
|
||||
endif
|
||||
|
||||
NDK_DEBUG=0
|
||||
BUILD_VIDEO=1
|
||||
BUILD_OPENH264=1
|
||||
BUILD_NON_FREE_CODECS=1
|
||||
ENABLE_OPENH264_DECODER=1
|
||||
BUILD_UPNP=1
|
||||
BUILD_AMRNB=full # 0, light or full
|
||||
BUILD_AMRWB=0 # Has text relocation issue, don't use when targetting API 23 for now
|
||||
BUILD_ZRTP=1
|
||||
BUILD_SILK=1
|
||||
BUILD_TUNNEL=0
|
||||
BUILD_WEBRTC_AECM=1
|
||||
BUILD_OPUS=1
|
||||
BUILD_MATROSKA=1
|
||||
BUILD_WEBRTC_ISAC=1
|
||||
BUILD_FOR_X86=1
|
||||
BUILD_FOR_ARM=1
|
||||
USE_JAVAH=1
|
||||
BUILD_TLS=1
|
||||
BUILD_SQLITE=1
|
||||
BUILD_CONTACT_HEADER=0
|
||||
BUILD_RTP_MAP=0
|
||||
BUILD_DONT_CHECK_HEADERS_IN_MESSAGE=0
|
||||
BUILD_ILBC=1
|
||||
BUILD_CODEC2=0
|
||||
BUILD_BCTOOLBOX_MBEDTLS=0
|
||||
LIBLINPHONE_EXTENDED_SRC_FILES=
|
||||
LIBLINPHONE_EXTENDED_C_INCLUDES=
|
||||
LIBLINPHONE_EXTENDED_CFLAGS=
|
||||
APP_STL=stlport_static
|
||||
ANT_SILENT=$(shell ant -h | grep -q -- -S && echo 1 || echo 0)
|
||||
|
||||
# Checks
|
||||
CHECK_MSG=$(shell ./check_tools.sh)
|
||||
|
||||
ifneq ($(CHECK_MSG),)
|
||||
$(error Some tools are missing.)
|
||||
else
|
||||
ifeq ($(BUILD_OPENH264),1)
|
||||
ifneq ($(shell echo $(NDK_MAJOR_VERSION)\>=10 | bc),1)
|
||||
$(error ndk version [$(NDK_MAJOR_VERSION)] not compatible with openh264.)
|
||||
endif
|
||||
endif
|
||||
include check_tools.mk
|
||||
endif
|
||||
|
||||
OPENSSL_DIR=$(shell openssl version -d | sed "s/OPENSSLDIR: \"\(.*\)\"/\1/")
|
||||
ifneq ($(shell ls $(OPENSSL_DIR)/certs),)
|
||||
HTTPS_CA_DIR=$(OPENSSL_DIR)/certs
|
||||
else
|
||||
HTTPS_CA_DIR=$(OPENSSL_DIR)
|
||||
endif
|
||||
|
||||
ifeq ($(ANT_SILENT), 1)
|
||||
ANT=ant -e -S
|
||||
else
|
||||
ANT=ant -e
|
||||
endif
|
||||
|
||||
# Temporary check: in case of MediastreamActivity.java file existing while it should not anymore, print an error message
|
||||
# and abort build since otherwise java compilation will fail.
|
||||
ifneq ($(shell ls ./submodules/linphone/mediastreamer2/java/src/org/linphone/mediastream/MediastreamerActivity.java 2>/dev/null),)
|
||||
$(error ./submodules/linphone/mediastreamer2/java/src/org/linphone/mediastream/MediastreamerActivity.java found: please either remove it or move it to MediastreamActivity.java.ignored before continuing.)
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_NON_FREE_CODECS), 0)
|
||||
BUILD_OPENH264=0
|
||||
ENABLE_OPENH264_DECODER=0
|
||||
BUILD_AMRNB=0
|
||||
BUILD_AMRWB=0
|
||||
BUILD_G729=0
|
||||
BUILD_X264=0
|
||||
endif
|
||||
|
||||
all: update-project generate-apk
|
||||
ifeq ($(ENABLE_GPL_THIRD_PARTIES),1)
|
||||
@echo "***************************************************************************"
|
||||
@echo "***** CAUTION, this liblinphone SDK is built using 3rd party GPL code *****"
|
||||
@echo "***** Even if you acquired a proprietary license from Belledonne *****"
|
||||
@echo "***** Communications, this SDK is GPL and GPL only. *****"
|
||||
@echo "***** To disable 3rd party gpl code, please use: *****"
|
||||
@echo "***** $$ make ENABLE_GPL_THIRD_PARTIES=0 *****"
|
||||
@echo "***************************************************************************"
|
||||
else
|
||||
@echo
|
||||
@echo "*****************************************************************"
|
||||
@echo "***** Linphone SDK without 3rd party GPL software *****"
|
||||
@echo "***** If you acquired a proprietary license from Belledonne *****"
|
||||
@echo "***** Communications, this SDK can be used to create *****"
|
||||
@echo "***** a proprietary linphone-based application. *****"
|
||||
@echo "*****************************************************************"
|
||||
endif
|
||||
|
||||
install: install-apk run-linphone
|
||||
|
||||
|
||||
#ffmpeg
|
||||
ifeq ($(BUILD_VIDEO),1)
|
||||
BUILD_FFMPEG_DEPS=$(FFMPEG_SRC_DIR)/non_versioned_soname_patch_applied.txt $(FFMPEG_BUILD_DIR)/arm/libffmpeg-linphone-arm.so
|
||||
ifeq ($(BUILD_FOR_X86), 1)
|
||||
BUILD_FFMPEG_DEPS+=$(FFMPEG_BUILD_DIR)/x86/libffmpeg-linphone-x86.so
|
||||
endif
|
||||
endif
|
||||
FFMPEG_SRC_DIR=$(TOPDIR)/submodules/externals/ffmpeg
|
||||
FFMPEG_BUILD_DIR=$(TOPDIR)/submodules/externals/build/ffmpeg
|
||||
FFMPEG_CONFIGURE_OPTIONS=--target-os=linux --enable-cross-compile --enable-runtime-cpudetect \
|
||||
--disable-everything --disable-doc --disable-ffplay --disable-ffmpeg --disable-ffprobe --disable-ffserver \
|
||||
--disable-avdevice --disable-avfilter --disable-avformat --disable-swresample --disable-network \
|
||||
--enable-decoder=mjpeg --enable-encoder=mjpeg --enable-decoder=mpeg4 --enable-encoder=mpeg4 --enable-decoder=h264 \
|
||||
--enable-decoder=h263p --enable-encoder=h263p --enable-decoder=h263 --enable-encoder=h263 --extra-cflags="-w" \
|
||||
--disable-static --enable-shared --disable-symver
|
||||
FFMPEG_ARM_CONFIGURE_OPTIONS=--build-suffix=-linphone-arm --arch=arm --sysroot=$(ARM_SYSROOT) --cross-prefix=$(ARM_TOOLCHAIN_PATH) --enable-pic
|
||||
FFMPEG_X86_CONFIGURE_OPTIONS=--build-suffix=-linphone-x86 --arch=x86 --sysroot=$(X86_SYSROOT) --cross-prefix=$(X86_TOOLCHAIN_PATH) --disable-mmx --disable-sse2 --disable-ssse3 --extra-cflags='-O3'
|
||||
|
||||
$(FFMPEG_SRC_DIR)/non_versioned_soname_patch_applied.txt:
|
||||
@patch -p0 < $(TOPDIR)/patches/ffmpeg_non_versioned_soname.patch
|
||||
touch $@
|
||||
|
||||
$(FFMPEG_BUILD_DIR)/arm/config.h:
|
||||
mkdir -p $(FFMPEG_BUILD_DIR)/arm && \
|
||||
cd $(FFMPEG_BUILD_DIR)/arm && \
|
||||
$(FFMPEG_SRC_DIR)/configure $(FFMPEG_CONFIGURE_OPTIONS) $(FFMPEG_ARM_CONFIGURE_OPTIONS)
|
||||
sed -i.bak 's/#define HAVE_SYSCTL 1/#define HAVE_SYSCTL 0/g' $(FFMPEG_BUILD_DIR)/arm/config.h
|
||||
sed -i.bak 's/#define HAVE_GETHRTIME 1/#define HAVE_GETHRTIME 0/g' $(FFMPEG_BUILD_DIR)/arm/config.h
|
||||
|
||||
$(FFMPEG_BUILD_DIR)/arm/libavcodec/libavcodec-linphone-arm.so: $(FFMPEG_BUILD_DIR)/arm/config.h
|
||||
cd $(FFMPEG_BUILD_DIR)/arm && \
|
||||
make -j${NUMCPUS} \
|
||||
|| ( echo "Build of ffmpeg for arm failed." ; exit 1 )
|
||||
|
||||
$(FFMPEG_BUILD_DIR)/arm/libffmpeg-linphone-arm.so: $(FFMPEG_BUILD_DIR)/arm/libavcodec/libavcodec-linphone-arm.so
|
||||
cd $(FFMPEG_BUILD_DIR)/arm && \
|
||||
rm libavcodec/log2_tab.o && \
|
||||
$(ARM_TOOLCHAIN_PATH)gcc -lm -lz --sysroot=$(ARM_SYSROOT) -Wl,-soname,libffmpeg-linphone-arm.so,--no-undefined -Wl,-z,noexecstack -shared libavutil/*.o libavutil/arm/*.o libavcodec/*.o libavcodec/arm/*.o libswscale/*.o -o libffmpeg-linphone-arm.so
|
||||
|
||||
$(FFMPEG_BUILD_DIR)/x86/config.h:
|
||||
mkdir -p $(FFMPEG_BUILD_DIR)/x86 && \
|
||||
cd $(FFMPEG_BUILD_DIR)/x86 && \
|
||||
$(FFMPEG_SRC_DIR)/configure $(FFMPEG_CONFIGURE_OPTIONS) $(FFMPEG_X86_CONFIGURE_OPTIONS)
|
||||
sed -i.bak 's/#define HAVE_SYSCTL 1/#define HAVE_SYSCTL 0/g' $(FFMPEG_BUILD_DIR)/x86/config.h
|
||||
sed -i.bak 's/#define HAVE_GETHRTIME 1/#define HAVE_GETHRTIME 0/g' $(FFMPEG_BUILD_DIR)/x86/config.h
|
||||
|
||||
$(FFMPEG_BUILD_DIR)/x86/libavcodec/libavcodec-linphone-x86.so: $(FFMPEG_BUILD_DIR)/x86/config.h
|
||||
cd $(FFMPEG_BUILD_DIR)/x86 && \
|
||||
make -j${NUMCPUS} \
|
||||
|| ( echo "Build of ffmpeg for x86 failed." ; exit 1 )
|
||||
|
||||
$(FFMPEG_BUILD_DIR)/x86/libffmpeg-linphone-x86.so: $(FFMPEG_BUILD_DIR)/x86/libavcodec/libavcodec-linphone-x86.so
|
||||
cd $(FFMPEG_BUILD_DIR)/x86 && \
|
||||
rm libavcodec/log2_tab.o && \
|
||||
$(X86_TOOLCHAIN_PATH)gcc -lm -lz --sysroot=$(X86_SYSROOT) -Wl,-soname,libffmpeg-linphone-x86.so,--no-undefined -Wl,-z,noexecstack -shared libavutil/*.o libavutil/x86/*.o libavcodec/*.o libavcodec/x86/*.o libswscale/*.o -o libffmpeg-linphone-x86.so
|
||||
|
||||
build-ffmpeg: $(BUILD_FFMPEG_DEPS)
|
||||
|
||||
clean-ffmpeg:
|
||||
rm -rf $(FFMPEG_BUILD_DIR)/arm && \
|
||||
rm -rf $(FFMPEG_BUILD_DIR)/x86
|
||||
|
||||
#x264
|
||||
ifeq ($(BUILD_VIDEO),1)
|
||||
ifeq ($(BUILD_X264), 1)
|
||||
BUILD_X264_DEPS=$(X264_SRC_DIR)/log2f_fix_patch_applied.txt $(X264_BUILD_DIR)/arm/libx264.a
|
||||
ifeq ($(BUILD_FOR_X86), 1)
|
||||
BUILD_X264_DEPS+=$(X264_BUILD_DIR)/x86/libx264.a
|
||||
endif
|
||||
endif
|
||||
|
||||
X264_SRC_DIR=$(TOPDIR)/submodules/externals/x264
|
||||
X264_BUILD_DIR=$(TOPDIR)/submodules/externals/build/x264
|
||||
X264_CONFIGURE_OPTIONS=--enable-static
|
||||
X264_ARM_CONFIGURE_OPTIONS=--host=arm-none-linux-gnueabi --sysroot=$(ARM_SYSROOT) --cross-prefix=$(ARM_TOOLCHAIN_PATH) --enable-pic
|
||||
X264_X86_CONFIGURE_OPTIONS=--host=i686-linux-gnueabi --sysroot=$(X86_SYSROOT) --cross-prefix=$(X86_TOOLCHAIN_PATH)
|
||||
|
||||
$(X264_SRC_DIR)/log2f_fix_patch_applied.txt:
|
||||
@patch -p0 < $(TOPDIR)/patches/x264_log2f_fix.patch
|
||||
touch $@
|
||||
|
||||
$(X264_BUILD_DIR)/arm/libx264.a:
|
||||
mkdir -p $(X264_BUILD_DIR)/arm && \
|
||||
cd $(X264_SRC_DIR) && \
|
||||
$(X264_SRC_DIR)/configure $(X264_CONFIGURE_OPTIONS) $(X264_ARM_CONFIGURE_OPTIONS) && \
|
||||
make -j$(NUMCPUS) STRIP= && \
|
||||
cp libx264.a $(X264_BUILD_DIR)/arm/libx264.a && \
|
||||
make clean \
|
||||
|| ( echo "Build of x264 for arm failed." ; exit 1 )
|
||||
|
||||
$(X264_BUILD_DIR)/x86/libx264.a:
|
||||
mkdir -p $(X264_BUILD_DIR)/x86 && \
|
||||
cd $(X264_SRC_DIR) && \
|
||||
$(X264_SRC_DIR)/configure $(X264_CONFIGURE_OPTIONS) $(X264_X86_CONFIGURE_OPTIONS) && \
|
||||
make -j$(NUMCPUS) STRIP= && \
|
||||
cp libx264.a $(X264_BUILD_DIR)/x86/libx264.a && \
|
||||
make clean \
|
||||
|| ( echo "Build of x264 for x86 failed." ; exit 1 )
|
||||
|
||||
endif
|
||||
build-x264: $(BUILD_X264_DEPS)
|
||||
|
||||
clean-x264:
|
||||
rm -rf $(X264_BUILD_DIR)/arm && \
|
||||
rm -rf $(X264_BUILD_DIR)/x86
|
||||
|
||||
#codec2
|
||||
ifeq ($(BUILD_CODEC2),1)
|
||||
CODEC2_SRC_DIR=$(TOPDIR)/submodules/externals/codec2
|
||||
CODEC2_BUILD_DIR=$(TOPDIR)/submodules/externals/build/codec2
|
||||
PREPARE_CODEC2_DEPS=codec2-install-headers
|
||||
endif
|
||||
|
||||
fetch-codec2:
|
||||
ifneq "$(wildcard $(CODEC2_SRC_DIR) )" ""
|
||||
# source directory for codec2 already exists, update it
|
||||
svn up $(CODEC2_SRC_DIR)
|
||||
else
|
||||
#source directory for codec2 doesn't exist, create it and fetch the source from svn depot
|
||||
mkdir $(CODEC2_SRC_DIR)
|
||||
svn co https://svn.code.sf.net/p/freetel/code/codec2/branches/0.3/ $(CODEC2_SRC_DIR)
|
||||
endif
|
||||
|
||||
codec2-install-headers: fetch-codec2
|
||||
mkdir -p $(CODEC2_SRC_DIR)/include/codec2
|
||||
rsync -rvLpgoc $(CODEC2_SRC_DIR)/src/codec2.h $(CODEC2_SRC_DIR)/include/codec2/codec2.h
|
||||
|
||||
prepare-codec2: $(PREPARE_CODEC2_DEPS)
|
||||
|
||||
#openh264
|
||||
ifeq ($(BUILD_VIDEO),1)
|
||||
ifeq ($(BUILD_OPENH264), 1)
|
||||
BUILD_OPENH264_DEPS=build-openh264-arm
|
||||
ifeq ($(BUILD_FOR_X86), 1)
|
||||
BUILD_OPENH264_DEPS+=build-openh264-x86
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
OPENH264_SRC_DIR=$(TOPDIR)/submodules/externals/openh264
|
||||
OPENH264_BUILD_DIR=$(TOPDIR)/submodules/externals/build/openh264
|
||||
OPENH264_BUILD_DIR_ARM=$(OPENH264_BUILD_DIR)/arm
|
||||
OPENH264_BUILD_DIR_X86=$(OPENH264_BUILD_DIR)/x86
|
||||
|
||||
$(OPENH264_SRC_DIR)/patch.stamp: $(TOPDIR)/patches/openh264-permissive.patch
|
||||
cd $(OPENH264_SRC_DIR) && patch -p1 < $(TOPDIR)/patches/openh264-permissive.patch && touch $(OPENH264_SRC_DIR)/patch.stamp
|
||||
|
||||
openh264-patch: $(OPENH264_SRC_DIR)/patch.stamp
|
||||
|
||||
openh264-install-headers:
|
||||
mkdir -p $(OPENH264_SRC_DIR)/include/wels
|
||||
rsync -rvLpgoc --exclude ".git" $(OPENH264_SRC_DIR)/codec/api/svc/* $(OPENH264_SRC_DIR)/include/wels/.
|
||||
|
||||
copy-openh264-x86: openh264-install-headers
|
||||
mkdir -p $(OPENH264_BUILD_DIR)
|
||||
mkdir -p $(OPENH264_BUILD_DIR_X86)
|
||||
cd $(OPENH264_BUILD_DIR_X86) \
|
||||
&& rsync -rvLpgoc --exclude ".git" $(OPENH264_SRC_DIR)/* .
|
||||
|
||||
copy-openh264-arm: openh264-install-headers
|
||||
mkdir -p $(OPENH264_BUILD_DIR)
|
||||
mkdir -p $(OPENH264_BUILD_DIR_ARM)
|
||||
cd $(OPENH264_BUILD_DIR_ARM) \
|
||||
&& rsync -rvLpgoc --exclude ".git" $(OPENH264_SRC_DIR)/* .
|
||||
|
||||
build-openh264-x86: copy-openh264-x86
|
||||
cd $(OPENH264_BUILD_DIR_X86) && \
|
||||
make libraries -j$(NUMCPUS) OS=android ARCH=x86 NDKROOT=$(NDK_PATH) TARGET=$(NDKBUILD_TARGET)
|
||||
|
||||
build-openh264-arm: copy-openh264-arm
|
||||
cd $(OPENH264_BUILD_DIR_ARM) && \
|
||||
make libraries -j$(NUMCPUS) OS=android ARCH=arm NDKROOT=$(NDK_PATH) TARGET=$(NDKBUILD_TARGET)
|
||||
|
||||
build-openh264: $(BUILD_OPENH264_DEPS)
|
||||
|
||||
clean-openh264:
|
||||
cd $(OPENH264_SRC_DIR) && git clean -dfx && git reset --hard
|
||||
rm -rf $(OPENH264_BUILD_DIR_ARM)
|
||||
rm -rf $(OPENH264_BUILD_DIR_X86)
|
||||
|
||||
#libvpx
|
||||
ifeq ($(BUILD_VIDEO),1)
|
||||
BUILD_VPX_DEPS=$(LIBVPX_SRC_DIR)/configure_android_x86_patch_applied.txt $(LIBVPX_BUILD_DIR)/arm/libvpx.a
|
||||
ifeq ($(BUILD_FOR_X86), 1)
|
||||
BUILD_VPX_DEPS+=$(LIBVPX_BUILD_DIR)/x86/libvpx.a
|
||||
endif
|
||||
endif
|
||||
LIBVPX_SRC_DIR=$(TOPDIR)/submodules/externals/libvpx
|
||||
LIBVPX_BUILD_DIR=$(TOPDIR)/submodules/externals/build/libvpx
|
||||
LIBVPX_CONFIGURE_OPTIONS=--disable-vp9 --disable-examples --disable-unit-tests --disable-postproc --enable-error-concealment --enable-pic
|
||||
|
||||
$(LIBVPX_SRC_DIR)/configure_android_x86_patch_applied.txt:
|
||||
cd $(LIBVPX_SRC_DIR) && patch -p1 < $(TOPDIR)/patches/libvpx_configure_android_x86.patch
|
||||
touch $@
|
||||
|
||||
$(LIBVPX_BUILD_DIR)/arm/libvpx.a:
|
||||
mkdir -p $(LIBVPX_BUILD_DIR)/arm && \
|
||||
cd $(LIBVPX_BUILD_DIR)/arm && \
|
||||
$(LIBVPX_SRC_DIR)/configure --target=armv7-android-gcc --extra-cflags="-mfloat-abi=softfp -mfpu=neon" --sdk-path=$(NDK_PATH) $(LIBVPX_CONFIGURE_OPTIONS) && \
|
||||
make -j${NUMCPUS} \
|
||||
|| ( echo "Build of libvpx for arm failed." ; exit 1 )
|
||||
|
||||
$(LIBVPX_BUILD_DIR)/x86/libvpx.a:
|
||||
mkdir -p $(LIBVPX_BUILD_DIR)/x86 && \
|
||||
cd $(LIBVPX_BUILD_DIR)/x86 && \
|
||||
$(LIBVPX_SRC_DIR)/configure --target=x86-android-gcc --sdk-path=$(NDK_PATH) $(LIBVPX_CONFIGURE_OPTIONS) && \
|
||||
make -j${NUMCPUS} \
|
||||
|| ( echo "Build of libvpx for x86 failed." ; exit 1 )
|
||||
|
||||
build-vpx: $(BUILD_VPX_DEPS)
|
||||
|
||||
clean-vpx:
|
||||
cd $(LIBVPX_SRC_DIR) && git clean -dfx && git reset --hard
|
||||
rm -rf submodules/externals/build/libvpx/arm && \
|
||||
rm -rf submodules/externals/build/libvpx/x86
|
||||
|
||||
#srtp
|
||||
$(TOPDIR)/submodules/externals/srtp/config.h : $(TOPDIR)/submodules/externals/build/srtp/config.h
|
||||
@cd $(TOPDIR)/submodules/externals/srtp/ && \
|
||||
cp ../build/srtp/config.h . \
|
||||
|| ( echo "SRTP prepare state failed." ; exit 1 )
|
||||
|
||||
prepare-srtp: $(TOPDIR)/submodules/externals/srtp/config.h
|
||||
|
||||
#ms2
|
||||
prepare-mediastreamer2:
|
||||
@cd $(TOPDIR)/submodules/linphone/mediastreamer2/src/ && \
|
||||
eval `cat Makefile.am | grep xxd | grep yuv2rgb.vs | sed 's/\$$(abs_builddir)/./'` && \
|
||||
eval `cat Makefile.am | grep xxd | grep yuv2rgb.fs | sed 's/\$$(abs_builddir)/./'` && \
|
||||
if ! [ -e yuv2rgb.vs.h ]; then echo "yuv2rgb.vs.h creation error (do you have 'xxd' application installed ?)"; exit 1; fi && \
|
||||
if ! [ -e yuv2rgb.fs.h ]; then echo "yuv2rgb.fs.h creation error (do you have 'xxd' application installed ?)"; exit 1; fi
|
||||
|
||||
#antlr3
|
||||
ANLTR3_SRC_DIR=$(TOPDIR)/submodules/externals/antlr3/runtime/C/include/
|
||||
ANTLR3_BUILD_DIR=$(ANTLR3_SRC_DIR)
|
||||
$(ANLTR3_SRC_DIR)/antlr3config.h: $(TOPDIR)/submodules/externals/build/antlr3/antlr3config.h
|
||||
cp $(TOPDIR)/submodules/externals/build/antlr3/antlr3config.h $(ANLTR3_SRC_DIR)
|
||||
prepare-antlr3: $(ANLTR3_SRC_DIR)/antlr3config.h
|
||||
|
||||
%.tokens: %.g
|
||||
$(ANTLR) -make -fo $(dir $^) $^
|
||||
|
||||
#Belle-sip
|
||||
BELLESIP_SRC_DIR=$(TOPDIR)/submodules/belle-sip
|
||||
BELLESIP_BUILD_DIR=$(BELLESIP_SRC_DIR)
|
||||
prepare-belle-sip: $(BELLESIP_SRC_DIR)/src/grammars/belle_sip_message.tokens $(BELLESIP_SRC_DIR)/src/grammars/belle_sdp.tokens
|
||||
|
||||
#CUnit
|
||||
prepare-cunit: $(TOPDIR)/submodules/externals/cunit/CUnit/Headers/*.h
|
||||
[ -d $(TOPDIR)/submodules/externals/build/cunit/CUnit ] || mkdir $(TOPDIR)/submodules/externals/build/cunit/CUnit
|
||||
cp $^ $(TOPDIR)/submodules/externals/build/cunit/CUnit
|
||||
|
||||
$(TOPDIR)/res/raw/rootca.pem:
|
||||
HTTPS_CA_DIR=$(HTTPS_CA_DIR) $(TOPDIR)/submodules/linphone/scripts/mk-ca-bundle.pl $@
|
||||
|
||||
prepare-liblinphone_tester: $(TOPDIR)/submodules/linphone/tester/tester_hosts $(TOPDIR)/res/raw/rootca.pem $(TOPDIR)/submodules/linphone/tester/messages.db
|
||||
rm -rf liblinphone_tester/assets/config_files
|
||||
mkdir -p liblinphone_tester/assets/config_files
|
||||
for file in $^; do \
|
||||
cp -rf $$file $(TOPDIR)/liblinphone_tester/assets/config_files/. \
|
||||
;done
|
||||
cp -rf $(TOPDIR)/submodules/linphone/tester/certificates $(TOPDIR)/liblinphone_tester/assets/config_files
|
||||
cp -rf $(TOPDIR)/submodules/linphone/tester/sounds $(TOPDIR)/liblinphone_tester/assets/config_files
|
||||
cp -rf $(TOPDIR)/submodules/linphone/tester/images $(TOPDIR)/liblinphone_tester/assets/config_files
|
||||
cp -rf $(TOPDIR)/submodules/linphone/tester/rcfiles $(TOPDIR)/liblinphone_tester/assets/config_files
|
||||
cp -rf $(TOPDIR)/submodules/linphone/tester/vcards $(TOPDIR)/liblinphone_tester/assets/config_files
|
||||
|
||||
#Matroska2
|
||||
MATROSKA_SRC_DIR=$(TOPDIR)/submodules/externals/libmatroska-c
|
||||
MATROSKA_BUILD_DIR=$(TOPDIR)/submodules/externals/build/libmatroska-c
|
||||
ifeq ($(BUILD_MATROSKA), 1)
|
||||
prepare-matroska2: $(MATROSKA_SRC_DIR)/patch_applied.txt
|
||||
else
|
||||
prepare-matroska2:
|
||||
endif
|
||||
|
||||
$(MATROSKA_SRC_DIR)/patch_applied.txt: $(MATROSKA_BUILD_DIR)/fix_libmatroska2.patch
|
||||
cd $(MATROSKA_SRC_DIR); patch -p1 < $<; touch $@
|
||||
|
||||
#Build targets
|
||||
prepare-sources: build-ffmpeg build-x264 build-openh264 build-vpx prepare-srtp prepare-mediastreamer2 prepare-antlr3 prepare-belle-sip $(TOPDIR)/res/raw/rootca.pem prepare-matroska2 prepare-codec2
|
||||
|
||||
GENERATE_OPTIONS = NDK_DEBUG=$(NDK_DEBUG) BUILD_FOR_X86=$(BUILD_FOR_X86) \
|
||||
BUILD_AMRNB=$(BUILD_AMRNB) BUILD_AMRWB=$(BUILD_AMRWB) BUILD_SILK=$(BUILD_SILK) BUILD_G729=$(BUILD_G729) BUILD_OPUS=$(BUILD_OPUS) BUILD_CODEC2=$(BUILD_CODEC2)\
|
||||
BUILD_VIDEO=$(BUILD_VIDEO) BUILD_X264=$(BUILD_X264) BUILD_OPENH264=$(BUILD_OPENH264) ENABLE_OPENH264_DECODER=$(ENABLE_OPENH264_DECODER) BUILD_MATROSKA=$(BUILD_MATROSKA) \
|
||||
BUILD_UPNP=$(BUILD_UPNP) BUILD_ZRTP=$(BUILD_ZRTP) BUILD_WEBRTC_AECM=$(BUILD_WEBRTC_AECM) BUILD_WEBRTC_ISAC=$(BUILD_WEBRTC_ISAC) BUILD_ILBC=$(BUILD_ILBC) \
|
||||
BUILD_FOR_ARM=$(BUILD_FOR_ARM) BUILD_NON_FREE_CODECS=$(BUILD_NON_FREE_CODECS)
|
||||
|
||||
|
||||
LIBLINPHONE_OPTIONS = $(GENERATE_OPTIONS) \
|
||||
LIBLINPHONE_VERSION=$(LIBLINPHONE_VERSION) BELLESIP_VERSION=$(BELLESIP_VERSION) USE_JAVAH=$(USE_JAVAH) \
|
||||
BUILD_TUNNEL=$(BUILD_TUNNEL) BUILD_TLS=$(BUILD_TLS) BUILD_SQLITE=$(BUILD_SQLITE) \
|
||||
BUILD_CONTACT_HEADER=$(BUILD_CONTACT_HEADER) BUILD_RTP_MAP=$(BUILD_RTP_MAP) \
|
||||
LIBLINPHONE_EXTENDED_SRC_FILES="$(LIBLINPHONE_EXTENDED_SRC_FILES)" \
|
||||
LIBLINPHONE_EXTENDED_C_INCLUDES="$(LIBLINPHONE_EXTENDED_C_INCLUDES)" \
|
||||
LIBLINPHONE_EXTENDED_CFLAGS="$(LIBLINPHONE_EXTENDED_CFLAGS)" \
|
||||
APP_STL="$(APP_STL)" \
|
||||
BUILD_DONT_CHECK_HEADERS_IN_MESSAGE=$(BUILD_DONT_CHECK_HEADERS_IN_MESSAGE)
|
||||
|
||||
MEDIASTREAMER2_OPTIONS = $(GENERATE_OPTIONS) BUILD_MEDIASTREAMER2_SDK=1
|
||||
|
||||
|
||||
generate-libs: prepare-sources javah
|
||||
$(NDK_PATH)/ndk-build $(LIBLINPHONE_OPTIONS) -j$(NUMCPUS) TARGET_PLATFORM=$(NDKBUILD_TARGET)
|
||||
|
||||
generate-mediastreamer2-libs: prepare-sources
|
||||
@cd $(TOPDIR)/submodules/linphone/mediastreamer2/java && \
|
||||
$(NDK_PATH)/ndk-build $(MEDIASTREAMER2_OPTIONS) -j$(NUMCPUS) TARGET_PLATFORM=$(NDKBUILD_TARGET)
|
||||
|
||||
update-project: $(TOPDIR)/res/raw/rootca.pem
|
||||
$(SDK_PATH)/android update project --path . --target $(ANDROID_MOST_RECENT_TARGET)
|
||||
$(SDK_PATH)/android update test-project --path tests -m .
|
||||
$(SDK_PATH)/android update project --path liblinphone_tester --target $(ANDROID_MOST_RECENT_TARGET)
|
||||
|
||||
update-mediastreamer2-project:
|
||||
@cd $(TOPDIR)/submodules/linphone/mediastreamer2/java && \
|
||||
$(SDK_PATH)/android update project --path . --target $(ANDROID_MOST_RECENT_TARGET)
|
||||
|
||||
liblinphone_tester: update-project prepare-sources prepare-cunit prepare-liblinphone_tester javah
|
||||
$(NDK_PATH)/ndk-build -C liblinphone_tester $(LIBLINPHONE_OPTIONS) -j$(NUMCPUS) TARGET_PLATFORM=$(NDKBUILD_TARGET)
|
||||
$(MAKE) -C liblinphone_tester
|
||||
|
||||
javah:
|
||||
$(ANT) javah
|
||||
|
||||
generate-apk: java-clean generate-libs
|
||||
echo "version.name=$(LINPHONE_ANDROID_DEBUG_VERSION)" > default.properties
|
||||
$(ANT) debug
|
||||
|
||||
generate-mediastreamer2-apk: java-clean generate-mediastreamer2-libs
|
||||
@cd $(TOPDIR)/submodules/linphone/mediastreamer2/java && \
|
||||
echo "version.name=$(LINPHONE_ANDROID_DEBUG_VERSION)" > default.properties && \
|
||||
$(ANT) debug
|
||||
|
||||
uninstall:
|
||||
adb uninstall $(PACKAGE_NAME)
|
||||
|
||||
install-apk:
|
||||
ant installd
|
||||
|
||||
release: update-project
|
||||
$(MAKE) java-clean
|
||||
patch -p1 < release.patch
|
||||
cat ant.properties | grep version.name > default.properties
|
||||
$(MAKE) generate-libs
|
||||
$(ANT) release
|
||||
patch -Rp1 < release.patch
|
||||
|
||||
run-linphone:
|
||||
ant run
|
||||
|
||||
run-liblinphone-tests: liblinphone_tester
|
||||
$(MAKE) -C liblinphone_tester run-all-tests
|
||||
|
||||
run-basic-tests: update-project
|
||||
$(ANT) partial-clean
|
||||
$(MAKE) -C tests run-basic-tests ANT_SILENT=$(ANT_SILENT)
|
||||
|
||||
run-all-tests: update-project
|
||||
$(ANT) partial-clean
|
||||
$(MAKE) -C tests run-all-tests ANT_SILENT=$(ANT_SILENT)
|
||||
|
||||
clean-ndk-build:
|
||||
- $(NDK_PATH)/ndk-build clean $(LIBLINPHONE_OPTIONS)
|
||||
$(ANT) clean
|
||||
@if [ -f $(TOPDIR)/submodules/linphone/mediastreamer2/java/project.properties ]; then \
|
||||
cd $(TOPDIR)/submodules/linphone/mediastreamer2/java && $(ANT) clean; \
|
||||
fi
|
||||
|
||||
.NOTPARALLEL clean-native: clean-ndk-build clean-ffmpeg clean-x264 clean-openh264 clean-vpx
|
||||
|
||||
|
||||
java-clean:
|
||||
$(ANT) clean
|
||||
|
||||
clean: clean-native java-clean
|
||||
patch -Rp1 -f < release.patch || echo "patch already cleaned"
|
||||
rm -f AndroidManifest.xml.rej
|
||||
rm -f AndroidManifest.xml.orig
|
||||
|
||||
|
||||
.PHONY: clean install-apk run-linphone
|
||||
|
||||
generate-sdk: liblinphone-android-sdk
|
||||
|
||||
liblinphone-android-sdk: generate-apk
|
||||
$(ANT) liblinphone-android-sdk
|
||||
|
||||
linphone-android-sdk: generate-apk
|
||||
$(ANT) linphone-android-sdk
|
||||
|
||||
mediastreamer2-sdk: update-mediastreamer2-project generate-mediastreamer2-apk
|
||||
@cd $(TOPDIR)/submodules/linphone/mediastreamer2/java && \
|
||||
$(ANT) mediastreamer2-sdk
|
||||
|
||||
pull-transifex:
|
||||
tx pull -af
|
||||
|
||||
push-transifex:
|
||||
tx push -s -f --no-interactive
|
93
README
93
README
|
@ -9,21 +9,23 @@ To build liblinphone for Android, you must:
|
|||
-------------------------------------------
|
||||
0) download the Android sdk with platform-tools and tools updated to latest revision (at least API 16 is needed), then add both 'tools' and 'platform-tools' folders in your path.
|
||||
1) download the Android ndk (=r10c) from google and add it to your path (no symlink !!!).
|
||||
2) install yasm, nasm, curl, ant, rsync, autoconf, automake, aclocal, libtool, pkgconfig, bc, perl-LWP-Protocol-https, patch, vim-common
|
||||
2) install yasm, nasm, ant, python, cmake
|
||||
On 64 bits linux systems you'll need the ia32-libs package
|
||||
With the latest Debian (multiarch), you need this:
|
||||
dpkg --add-architecture i386
|
||||
aptitude update
|
||||
aptitude install libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386
|
||||
3) run the Makefile script in the top level directory. This will download iLBC source files and convert some assembly files in VP8 project.
|
||||
3) run `./prepare.py` in the top level directory. This will configure the build and generate a Makefile in the top level directory.
|
||||
Some options can be passed to choose what you want to include in the build and the platforms for which you want to build. Use `./prepare.py --help` to see what these options are.
|
||||
4) run the Makefile script in the top level directory.
|
||||
$ make
|
||||
4) (Optional) To install the generated apk into a plugged device, run
|
||||
5) (Optional) To install the generated apk into a plugged device, run
|
||||
$ make install
|
||||
5) (Optional) To generate a liblinphone SDK zip containing a full jar and native libraries, run
|
||||
6) (Optional) To generate a liblinphone SDK zip containing a full jar and native libraries, run
|
||||
$ make liblinphone-android-sdk
|
||||
6) (Optional) To generate a libmediastreamer2 SDK zip containing a full jar and native libraries, run
|
||||
7) (Optional) To generate a libmediastreamer2 SDK zip containing a full jar and native libraries, run
|
||||
$ make mediastreamer2-sdk
|
||||
7) (Optional) To generate a signed apk to publish on the Google Play, run
|
||||
8) (Optional) To generate a signed apk to publish on the Google Play, run
|
||||
$ make release
|
||||
Make sure you filled the ant.properties values for version.name, key.store and key.alias in order to correctly sign the generated apk.
|
||||
You also may want to create a file name ant_password.properties with the following:
|
||||
|
@ -51,8 +53,7 @@ Simply run
|
|||
$ make liblinphone_tester
|
||||
This will be build everything, generate an apk, and install it on the connected device if any.
|
||||
|
||||
You can speed up the compilation by using ccache (compiler cache, see https://ccache.samba.org/). Simply export:
|
||||
export NDK_CCACHE=ccache
|
||||
You can speed up the compilation by using ccache (compiler cache, see https://ccache.samba.org/). Give the "-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache" options to the prepare.py script.
|
||||
|
||||
TROUBLESHOOTING
|
||||
***************
|
||||
|
@ -73,77 +74,7 @@ Caused by: java.lang.UnsatisfiedLinkError: Couldn't load linphone-armeabi-v7a: f
|
|||
BUILD OPTIONS
|
||||
*************
|
||||
|
||||
Some options can be passed to make, like "make SOME_OPTION=SOME_VALUE".
|
||||
The build options are to be passed to the prepare.py script.
|
||||
For example to enable the x264 encoder give the "-DENABLE_X264=YES" to prepare.py.
|
||||
|
||||
ENABLE_GPL_THIRD_PARTIES
|
||||
values: 0 (GPL third parties disabled) or 1 (GPL third parties enabled), default value: 1
|
||||
GPL third parties are: X264 and G729
|
||||
|
||||
BUILD_VIDEO
|
||||
values: 0 (no video) or 1 (video enabled), default value: 1
|
||||
|
||||
BUILD_OPENH264
|
||||
values: 0 (don't build openH264) or 1 (build openH264), default value: 1
|
||||
|
||||
ENABLE_OPENH264_DECODER
|
||||
values: 0 (disable openh264 decoder) or 1 (enable openh264 decoder), default value: 1
|
||||
|
||||
BUILD_X264
|
||||
values: 0 (don't build x264) or 1 (build x264), default value: 0
|
||||
|
||||
BUILD_AMRNB
|
||||
values: 0 (don't build amrnb codec), light (try to use amrnb codec from android), full (build your own amrnb codec), default value: full
|
||||
|
||||
BUILD_AMRWB
|
||||
values: 0 (don't build amrwb codec), 1 (build your own amrwb codec): default value: 1
|
||||
|
||||
BUILD_ZRTP
|
||||
values: 0 (don't support ZRTP), 1 (support ZRTP), default value: 1
|
||||
|
||||
BUILD_SILK
|
||||
values: 0 (don't build silk plugin), 1 (build silk) [silk is Skype nonfree patented audio codec], default value: 1
|
||||
|
||||
BUILD_G729
|
||||
values: 0 (don't build g729 plugin), 1 (build g729) [g729 is nonfree patented audio codec, contact Sipro lab for more details]
|
||||
default value: 1
|
||||
|
||||
BUILD_TUNNEL
|
||||
values: 0 (don't build tunnel), 1 (build tunnel) [requires a non-free tunnel implementation in submodules/linphone/tunnel]
|
||||
default value: 0
|
||||
|
||||
BUILD_WEBRTC_AECM
|
||||
values: 0 (don't build echo canceler), 1 (build echo canceler)
|
||||
default value: 1
|
||||
|
||||
USE_JAVAH
|
||||
values: 0 (don't generate header), 1 (generate header for linphone_core_jni) [used to check errors at liblinphone compilation]
|
||||
default value: 1
|
||||
|
||||
BUILD_FOR_X86
|
||||
values: 0 (don't generate liblinphone libraries for x86 architecture), 1 (build liblinphone libraries for x86 architecture)
|
||||
default value: 1
|
||||
|
||||
BUILD_SQLITE
|
||||
values: 0 (don't build sqlite3), 1 (build sqlite3) [used to store chat messages inside liblinphone]
|
||||
default value: 1
|
||||
|
||||
BUILD_TLS
|
||||
values: 0 (don't build tls), 1 (do build tls), default value: 1
|
||||
|
||||
BUILD_WEBRTC_ISAC
|
||||
values: 0 (don't build isac), 1 (do build isac), default value: 1
|
||||
|
||||
BUILD_OPUS
|
||||
values: 0 (don't build opus), 1 (do build opus), default value: 1
|
||||
|
||||
BUILD_UPNP
|
||||
values: 0 (don't build upnp), 1 (do build upnp), default value: 1
|
||||
|
||||
BUILD_MATROSKA
|
||||
values: 0 (don't build matroska and ebml), 1 (do build matroska and ebml), default value: 0
|
||||
|
||||
BUILD_ILBC
|
||||
values: 0 (don't build iLBC), 1 (do build iLBC), default value: 1
|
||||
|
||||
BUILD_CODEC2
|
||||
values: 0 (don't build codec2 support), 1 (do build codec2 support), default value: 0
|
||||
The available options can be listed with the `./prepare.py --list-features`
|
||||
|
|
|
@ -1,5 +1,59 @@
|
|||
all:
|
||||
ANDROID_MOST_RECENT_TARGET=$(shell android list target -c | grep -E 'android-[0-9]+' | tail -n1)
|
||||
|
||||
all: update-project copy-files
|
||||
ant debug install
|
||||
|
||||
run-all-tests: all
|
||||
ant test
|
||||
|
||||
update-project:
|
||||
android update project --path . --target $(ANDROID_MOST_RECENT_TARGET)
|
||||
|
||||
copy-libs:
|
||||
rm -rf libs/armeabi
|
||||
mkdir -p assets/config_files
|
||||
if test -d "../liblinphone-sdk/android-arm"; then \
|
||||
mkdir -p libs/armeabi && \
|
||||
cp -f ../liblinphone-sdk/android-arm/lib/lib*-armeabi.so libs/armeabi && \
|
||||
cp -f ../liblinphone-sdk/android-arm/lib/mediastreamer/plugins/*.so libs/armeabi && \
|
||||
cp -f ../liblinphone-sdk/android-arm/share/linphone/rootca.pem assets/config_files; \
|
||||
fi
|
||||
if test -f "../liblinphone-sdk/android-arm/bin/gdbserver"; then \
|
||||
cp -f ../liblinphone-sdk/android-arm/bin/gdbserver libs/armeabi && \
|
||||
cp -f ../liblinphone-sdk/android-arm/bin/gdb.setup libs/armeabi; \
|
||||
fi
|
||||
rm -rf libs/armeabi-v7a
|
||||
if test -d "../liblinphone-sdk/android-armv7"; then \
|
||||
mkdir -p libs/armeabi-v7a && \
|
||||
cp -f ../liblinphone-sdk/android-armv7/lib/lib*-armeabi-v7a.so libs/armeabi-v7a && \
|
||||
cp -f ../liblinphone-sdk/android-armv7/lib/mediastreamer/plugins/*.so libs/armeabi-v7a && \
|
||||
cp -f ../liblinphone-sdk/android-armv7/share/linphone/rootca.pem assets/config_files; \
|
||||
fi
|
||||
if test -f "../liblinphone-sdk/android-armv7/bin/gdbserver"; then \
|
||||
cp -f ../liblinphone-sdk/android-armv7/bin/gdbserver libs/armeabi-v7a && \
|
||||
cp -f ../liblinphone-sdk/android-armv7/bin/gdb.setup libs/armeabi-v7a; \
|
||||
fi
|
||||
rm -rf libs/x86
|
||||
if test -d "../liblinphone-sdk/android-x86"; then \
|
||||
mkdir -p libs/x86 && \
|
||||
cp -f ../liblinphone-sdk/android-x86/lib/lib*-x86.so libs/x86 && \
|
||||
cp -f ../liblinphone-sdk/android-x86/lib/mediastreamer/plugins/*.so libs/x86 && \
|
||||
cp -f ../liblinphone-sdk/android-x86/share/linphone/rootca.pem assets/config_files; \
|
||||
fi
|
||||
if test -f "../liblinphone-sdk/android-x86/bin/gdbserver"; then \
|
||||
cp -f ../liblinphone-sdk/android-x86/bin/gdbserver libs/x86 && \
|
||||
cp -f ../liblinphone-sdk/android-x86/bin/gdb.setup libs/x86; \
|
||||
fi
|
||||
|
||||
copy-files: ../submodules/linphone/tester/tester_hosts ../submodules/linphone/tester/messages.db
|
||||
$(MAKE) copy-libs
|
||||
rm -rf assets/config_files
|
||||
mkdir -p assets/config_files
|
||||
for file in $^; do \
|
||||
cp -rf $$file assets/config_files/. ; \
|
||||
done
|
||||
cp -rf ../submodules/linphone/tester/certificates assets/config_files
|
||||
cp -rf ../submodules/linphone/tester/images assets/config_files
|
||||
cp -rf ../submodules/linphone/tester/rcfiles assets/config_files
|
||||
cp -rf ../submodules/linphone/tester/sounds assets/config_files
|
||||
cp -rf ../submodules/linphone/tester/vcards assets/config_files
|
||||
|
|
|
@ -25,23 +25,22 @@ public class Tester {
|
|||
}
|
||||
|
||||
static {
|
||||
System.loadLibrary("cunit");
|
||||
List<String> cpuabis=Version.getCpuAbis();
|
||||
String ffmpegAbi;
|
||||
boolean libLoaded=false;
|
||||
Throwable firstException=null;
|
||||
for (String abi : cpuabis){
|
||||
Log.i("LinphoneCoreFactoryImpl","Trying to load liblinphone for " + abi);
|
||||
ffmpegAbi=abi;
|
||||
// FFMPEG (audio/video)
|
||||
if (abi.startsWith("armeabi")) {
|
||||
ffmpegAbi="arm";
|
||||
}
|
||||
loadOptionalLibrary("ffmpeg-linphone-"+ffmpegAbi);
|
||||
loadOptionalLibrary("ffmpeg-linphone-" + abi);
|
||||
//Main library
|
||||
try {
|
||||
System.loadLibrary("bctoolbox-" + abi);
|
||||
System.loadLibrary("bctoolbox-tester-" + abi);
|
||||
System.loadLibrary("ortp-" + abi);
|
||||
System.loadLibrary("mediastreamer_base-" + abi);
|
||||
System.loadLibrary("mediastreamer_voip-" + abi);
|
||||
System.loadLibrary("linphone-" + abi);
|
||||
System.loadLibrary("linphone_tester-" + abi);
|
||||
System.loadLibrary("linphonetester-" + abi);
|
||||
|
||||
Log.i("LinphoneCoreFactoryImpl","Loading done with " + abi);
|
||||
libLoaded=true;
|
||||
|
|
|
@ -99,7 +99,8 @@ public class WrapperTester extends AndroidTestCase {
|
|||
protected void setUp() throws Exception {
|
||||
// TODO Auto-generated method stub
|
||||
super.setUp();
|
||||
mCore = LinphoneCoreFactory.instance().createLinphoneCore(new LinphoneCoreListenerBase(),null);
|
||||
LinphoneCoreFactory.instance().setDebugMode(true, "WrapperTester");
|
||||
mCore = LinphoneCoreFactory.instance().createLinphoneCore(new LinphoneCoreListenerBase(),getContext());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
498
prepare.py
Executable file
498
prepare.py
Executable file
|
@ -0,0 +1,498 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
############################################################################
|
||||
# prepare.py
|
||||
# Copyright (C) 2016 Belledonne Communications, Grenoble France
|
||||
#
|
||||
############################################################################
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
############################################################################
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import platform
|
||||
import re
|
||||
import shutil
|
||||
import sys
|
||||
import tempfile
|
||||
from logging import error, warning, info, INFO, basicConfig
|
||||
from subprocess import Popen, PIPE
|
||||
from distutils.spawn import find_executable
|
||||
sys.dont_write_bytecode = True
|
||||
sys.path.insert(0, 'submodules/cmake-builder')
|
||||
try:
|
||||
import prepare
|
||||
except Exception as e:
|
||||
error(
|
||||
"Could not find prepare module: {}, probably missing submodules/cmake-builder? Try running:\ngit submodule update --init --recursive".format(e))
|
||||
exit(1)
|
||||
|
||||
|
||||
class AndroidTarget(prepare.Target):
|
||||
|
||||
def __init__(self, arch):
|
||||
prepare.Target.__init__(self, 'android-' + arch)
|
||||
current_path = os.path.dirname(os.path.realpath(__file__))
|
||||
self.config_file = 'configs/config-android.cmake'
|
||||
self.toolchain_file = 'toolchains/toolchain-android-' + arch + '.cmake'
|
||||
self.output = 'liblinphone-sdk/android-' + arch
|
||||
self.additional_args = [
|
||||
'-DCMAKE_INSTALL_MESSAGE=LAZY',
|
||||
'-DLINPHONE_BUILDER_EXTERNAL_SOURCE_PATH=' + current_path + '/submodules'
|
||||
]
|
||||
|
||||
def clean(self):
|
||||
if os.path.isdir('WORK'):
|
||||
shutil.rmtree('WORK', ignore_errors=False, onerror=self.handle_remove_read_only)
|
||||
if os.path.isdir('liblinphone-sdk'):
|
||||
shutil.rmtree('liblinphone-sdk', ignore_errors=False, onerror=self.handle_remove_read_only)
|
||||
|
||||
class AndroidArmTarget(AndroidTarget):
|
||||
|
||||
def __init__(self):
|
||||
AndroidTarget.__init__(self, 'arm')
|
||||
self.additional_args += [ '-DENABLE_VIDEO=NO' ]
|
||||
|
||||
class AndroidArmv7Target(AndroidTarget):
|
||||
|
||||
def __init__(self):
|
||||
AndroidTarget.__init__(self, 'armv7')
|
||||
|
||||
class AndroidX86Target(AndroidTarget):
|
||||
|
||||
def __init__(self):
|
||||
AndroidTarget.__init__(self, 'x86')
|
||||
|
||||
targets = {
|
||||
'arm': AndroidArmTarget(),
|
||||
'armv7': AndroidArmv7Target(),
|
||||
'x86': AndroidX86Target()
|
||||
}
|
||||
platforms = ['all', 'arm', 'armv7', 'x86']
|
||||
|
||||
|
||||
|
||||
class PlatformListAction(argparse.Action):
|
||||
|
||||
def __call__(self, parser, namespace, values, option_string=None):
|
||||
if values:
|
||||
for value in values:
|
||||
if value not in platforms:
|
||||
message = ("invalid platform: {0!r} (choose from {1})".format(value, ', '.join([repr(platform) for platform in platforms])))
|
||||
raise argparse.ArgumentError(self, message)
|
||||
setattr(namespace, self.dest, values)
|
||||
|
||||
|
||||
def gpl_disclaimer(platforms):
|
||||
cmakecache = 'WORK/android-{arch}/cmake/CMakeCache.txt'.format(arch=platforms[0])
|
||||
gpl_third_parties_enabled = "ENABLE_GPL_THIRD_PARTIES:BOOL=YES" in open(
|
||||
cmakecache).read() or "ENABLE_GPL_THIRD_PARTIES:BOOL=ON" in open(cmakecache).read()
|
||||
|
||||
if gpl_third_parties_enabled:
|
||||
warning("\n***************************************************************************"
|
||||
"\n***************************************************************************"
|
||||
"\n***** CAUTION, this liblinphone SDK is built using 3rd party GPL code *****"
|
||||
"\n***** Even if you acquired a proprietary license from Belledonne *****"
|
||||
"\n***** Communications, this SDK is GPL and GPL only. *****"
|
||||
"\n***** To disable 3rd party gpl code, please use: *****"
|
||||
"\n***** $ ./prepare.py -DENABLE_GPL_THIRD_PARTIES=NO *****"
|
||||
"\n***************************************************************************"
|
||||
"\n***************************************************************************")
|
||||
else:
|
||||
warning("\n***************************************************************************"
|
||||
"\n***************************************************************************"
|
||||
"\n***** Linphone SDK without 3rd party GPL software *****"
|
||||
"\n***** If you acquired a proprietary license from Belledonne *****"
|
||||
"\n***** Communications, this SDK can be used to create *****"
|
||||
"\n***** a proprietary linphone-based application. *****"
|
||||
"\n***************************************************************************"
|
||||
"\n***************************************************************************")
|
||||
|
||||
|
||||
def check_is_installed(binary, prog='it', warn=True):
|
||||
if not find_executable(binary):
|
||||
if warn:
|
||||
error("Could not find {}. Please install {}.".format(binary, prog))
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def check_tools():
|
||||
ret = 0
|
||||
|
||||
#at least FFmpeg requires no whitespace in sources path...
|
||||
if " " in os.path.dirname(os.path.realpath(__file__)):
|
||||
error("Invalid location: path should not contain any spaces.")
|
||||
ret = 1
|
||||
|
||||
ret |= not check_is_installed('cmake')
|
||||
|
||||
if not os.path.isdir("submodules/linphone/mediastreamer2/src") or not os.path.isdir("submodules/linphone/oRTP/src"):
|
||||
error("Missing some git submodules. Did you run:\n\tgit submodule update --init --recursive")
|
||||
ret = 1
|
||||
|
||||
return ret
|
||||
|
||||
|
||||
def generate_makefile(platforms, generator):
|
||||
arch_targets = ""
|
||||
for arch in platforms:
|
||||
arch_targets += """
|
||||
{arch}: {arch}-build
|
||||
|
||||
{arch}-build:
|
||||
\t{generator} WORK/android-{arch}/cmake
|
||||
\t@echo "Done"
|
||||
""".format(arch=arch, generator=generator)
|
||||
makefile = """
|
||||
archs={archs}
|
||||
TOPDIR=$(shell pwd)
|
||||
LINPHONE_ANDROID_VERSION=$(shell git describe --always)
|
||||
ANDROID_MOST_RECENT_TARGET=$(shell android list target -c | grep -E 'android-[0-9]+' | tail -n1)
|
||||
ANT_SILENT=$(shell ant -h | grep -q -- -S && echo 1 || echo 0)
|
||||
PACKAGE_NAME=$(shell sed -nE 's|<property name="linphone.package.name" value="(.*)" />|\\1|p' custom_rules.xml)
|
||||
|
||||
.PHONY: all
|
||||
.NOTPARALLEL: all generate-apk generate-mediastreamer2-apk install release
|
||||
|
||||
all: update-project generate-apk
|
||||
|
||||
build: $(addsuffix -build, $(archs))
|
||||
|
||||
clean: java-clean
|
||||
|
||||
install: install-apk run-linphone
|
||||
|
||||
java-clean:
|
||||
\tant clean
|
||||
|
||||
$(TOPDIR)/res/raw/rootca.pem:
|
||||
\tcp liblinphone-sdk/android-{first_arch}/share/linphone/rootca.pem $@
|
||||
|
||||
copy-libs:
|
||||
\trm -rf libs/armeabi
|
||||
\tif test -d "liblinphone-sdk/android-arm"; then \\
|
||||
\t\tmkdir -p libs/armeabi && \\
|
||||
\t\tcp -f liblinphone-sdk/android-arm/lib/lib*-armeabi.so libs/armeabi && \\
|
||||
\t\tcp -f liblinphone-sdk/android-arm/lib/mediastreamer/plugins/*.so libs/armeabi; \\
|
||||
\tfi
|
||||
\tif test -f "liblinphone-sdk/android-arm/bin/gdbserver"; then \\
|
||||
\t\tcp -f liblinphone-sdk/android-arm/bin/gdbserver libs/armeabi && \\
|
||||
\t\tcp -f liblinphone-sdk/android-arm/bin/gdb.setup libs/armeabi; \\
|
||||
\tfi
|
||||
\trm -rf libs/armeabi-v7a
|
||||
\tif test -d "liblinphone-sdk/android-armv7"; then \\
|
||||
\t\tmkdir -p libs/armeabi-v7a && \\
|
||||
\t\tcp -f liblinphone-sdk/android-armv7/lib/lib*-armeabi-v7a.so libs/armeabi-v7a && \\
|
||||
\t\tcp -f liblinphone-sdk/android-armv7/lib/mediastreamer/plugins/*.so libs/armeabi-v7a; \\
|
||||
\tfi
|
||||
\tif test -f "liblinphone-sdk/android-armv7/bin/gdbserver"; then \\
|
||||
\t\tcp -f liblinphone-sdk/android-armv7/bin/gdbserver libs/armeabi-v7a && \\
|
||||
\t\tcp -f liblinphone-sdk/android-armv7/bin/gdb.setup libs/armeabi-v7a; \\
|
||||
\tfi
|
||||
\trm -rf libs/x86
|
||||
\tif test -d "liblinphone-sdk/android-x86"; then \\
|
||||
\t\tmkdir -p libs/x86 && \\
|
||||
\t\tcp -f liblinphone-sdk/android-x86/lib/lib*-x86.so libs/x86 && \\
|
||||
\t\tcp -f liblinphone-sdk/android-x86/lib/mediastreamer/plugins/*.so libs/x86; \\
|
||||
\tfi
|
||||
\tif test -f "liblinphone-sdk/android-x86/bin/gdbserver"; then \\
|
||||
\t\tcp -f liblinphone-sdk/android-x86/bin/gdbserver libs/x86 && \\
|
||||
\t\tcp -f liblinphone-sdk/android-x86/bin/gdb.setup libs/x86; \\
|
||||
\tfi
|
||||
|
||||
update-project:
|
||||
\tandroid update project --path . --target $(ANDROID_MOST_RECENT_TARGET)
|
||||
\tandroid update test-project --path tests -m .
|
||||
|
||||
update-mediastreamer2-project:
|
||||
\t@cd $(TOPDIR)/submodules/linphone/mediastreamer2/java && \\
|
||||
\tandroid update project --path . --target $(ANDROID_MOST_RECENT_TARGET)
|
||||
|
||||
generate-apk: java-clean build copy-libs $(TOPDIR)/res/raw/rootca.pem update-project
|
||||
\techo "version.name=$(LINPHONE_ANDROID_VERSION)" > default.properties && \\
|
||||
\tant debug
|
||||
|
||||
generate-mediastreamer2-apk: java-clean build copy-libs update-mediastreamer2-project
|
||||
\t@cd $(TOPDIR)/submodules/linphone/mediastreamer2/java && \\
|
||||
\techo "version.name=$(LINPHONE_ANDROID_VERSION)" > default.properties && \\
|
||||
\tant debug
|
||||
|
||||
install-apk:
|
||||
\tant installd
|
||||
|
||||
uninstall:
|
||||
\tadb uninstall $(PACKAGE_NAME)
|
||||
|
||||
release: java-clean build copy-libs supdate-project
|
||||
\tpatch -p1 < release.patch
|
||||
\tcat ant.properties | grep version.name > default.properties
|
||||
\tant release
|
||||
\tpatch -Rp1 < release.patch
|
||||
|
||||
generate-sdk: liblinphone-android-sdk
|
||||
|
||||
liblinphone-android-sdk: generate-apk
|
||||
\tant liblinphone-android-sdk
|
||||
|
||||
linphone-android-sdk: generate-apk
|
||||
\tant linphone-android-sdk
|
||||
|
||||
mediastreamer2-sdk: generate-mediastreamer2-apk
|
||||
\t@cd $(TOPDIR)/submodules/linphone/mediastreamer2/java && \\
|
||||
\tant mediastreamer2-sdk
|
||||
|
||||
liblinphone_tester:
|
||||
\t$(MAKE) -C liblinphone_tester
|
||||
|
||||
run-linphone:
|
||||
\tant run
|
||||
|
||||
run-liblinphone-tests:
|
||||
\t$(MAKE) -C liblinphone_tester run-all-tests
|
||||
|
||||
run-basic-tests: update-project
|
||||
\tant partial-clean
|
||||
\t$(MAKE) -C tests run-basic-tests ANT_SILENT=$(ANT_SILENT)
|
||||
|
||||
run-all-tests: update-project
|
||||
\tant partial-clean
|
||||
\t$(MAKE) -C tests run-all-tests ANT_SILENT=$(ANT_SILENT)
|
||||
|
||||
|
||||
pull-transifex:
|
||||
\ttx pull -af
|
||||
|
||||
push-transifex:
|
||||
\ttx push -s -f --no-interactive
|
||||
|
||||
{arch_targets}
|
||||
|
||||
help-prepare-options:
|
||||
\t@echo "prepare.py was previously executed with the following options:"
|
||||
\t@echo " {options}"
|
||||
|
||||
help: help-prepare-options
|
||||
\t@echo ""
|
||||
\t@echo "(please read the README.md file first)"
|
||||
\t@echo ""
|
||||
\t@echo "Available architectures: {archs}"
|
||||
\t@echo ""
|
||||
\t@echo "Available targets:"
|
||||
\t@echo ""
|
||||
\t@echo " * all or generate-apk: builds all architectures and creates the linphone application APK"
|
||||
\t@echo " * generate-sdk: builds all architectures and creates the liblinphone SDK"
|
||||
\t@echo " * install: install the linphone application APK (run this only after generate-apk)"
|
||||
\t@echo " * uninstall: uninstall the linphone application"
|
||||
\t@echo ""
|
||||
""".format(archs=' '.join(platforms), arch_opts='|'.join(platforms),
|
||||
first_arch=platforms[0], options=' '.join(sys.argv),
|
||||
arch_targets=arch_targets, generator=generator)
|
||||
f = open('Makefile', 'w')
|
||||
f.write(makefile)
|
||||
f.close()
|
||||
gpl_disclaimer(platforms)
|
||||
|
||||
|
||||
def list_features_with_args(debug, additional_args):
|
||||
tmpdir = tempfile.mkdtemp(prefix="linphone-android")
|
||||
tmptarget = AndroidArmv7Target()
|
||||
tmptarget.abs_cmake_dir = tmpdir
|
||||
|
||||
option_regex = re.compile("ENABLE_(.*):(.*)=(.*)")
|
||||
options = {}
|
||||
ended = True
|
||||
build_type = 'Debug' if debug else 'Release'
|
||||
|
||||
for line in Popen(tmptarget.cmake_command(build_type, False, True, additional_args, verbose=False),
|
||||
cwd=tmpdir, shell=False, stdout=PIPE).stdout.readlines():
|
||||
match = option_regex.match(line)
|
||||
if match is not None:
|
||||
(name, typeof, value) = match.groups()
|
||||
options["ENABLE_{}".format(name)] = value
|
||||
ended &= (value == 'ON')
|
||||
shutil.rmtree(tmpdir)
|
||||
return (options, ended)
|
||||
|
||||
|
||||
def list_features(debug, args):
|
||||
additional_args = args
|
||||
options = {}
|
||||
info("Searching for available features...")
|
||||
# We have to iterate multiple times to activate ALL options, so that options depending
|
||||
# of others are also listed (cmake_dependent_option macro will not output options if
|
||||
# prerequisite is not met)
|
||||
while True:
|
||||
(options, ended) = list_features_with_args(debug, additional_args)
|
||||
if ended:
|
||||
break
|
||||
else:
|
||||
additional_args = []
|
||||
# Activate ALL available options
|
||||
for k in options.keys():
|
||||
additional_args.append("-D{}=ON".format(k))
|
||||
|
||||
# Now that we got the list of ALL available options, we must correct default values
|
||||
# Step 1: all options are turned off by default
|
||||
for x in options.keys():
|
||||
options[x] = 'OFF'
|
||||
# Step 2: except options enabled when running with default args
|
||||
(options_tmp, ended) = list_features_with_args(debug, args)
|
||||
final_dict = dict(options.items() + options_tmp.items())
|
||||
|
||||
notice_features = "Here are available features:"
|
||||
for k, v in final_dict.items():
|
||||
notice_features += "\n\t{}={}".format(k, v)
|
||||
info(notice_features)
|
||||
info("To enable some feature, please use -DENABLE_SOMEOPTION=ON (example: -DENABLE_OPUS=ON)")
|
||||
info("Similarly, to disable some feature, please use -DENABLE_SOMEOPTION=OFF (example: -DENABLE_OPUS=OFF)")
|
||||
|
||||
|
||||
def main(argv=None):
|
||||
basicConfig(format="%(levelname)s: %(message)s", level=INFO)
|
||||
|
||||
if argv is None:
|
||||
argv = sys.argv
|
||||
argparser = argparse.ArgumentParser(
|
||||
description="Prepare build of Linphone and its dependencies.")
|
||||
argparser.add_argument(
|
||||
'-ac', '--all-codecs', help="Enable all codecs, including the non-free ones", action='store_true')
|
||||
argparser.add_argument(
|
||||
'-c', '-C', '--clean', help="Clean a previous build instead of preparing a build.", action='store_true')
|
||||
argparser.add_argument(
|
||||
'-d', '--debug', help="Prepare a debug build, eg. add debug symbols and use no optimizations.", action='store_true')
|
||||
argparser.add_argument(
|
||||
'-dv', '--debug-verbose', help="Activate ms_debug logs.", action='store_true')
|
||||
argparser.add_argument(
|
||||
'--disable-gpl-third-parties', help="Disable GPL third parties such as FFMpeg, x264.", action='store_true')
|
||||
argparser.add_argument(
|
||||
'--enable-non-free-codecs', help="Enable non-free codecs such as OpenH264, MPEG4, etc.. Final application must comply with their respective license (see README.md).", action='store_true')
|
||||
argparser.add_argument(
|
||||
'-f', '--force', help="Force preparation, even if working directory already exist.", action='store_true')
|
||||
argparser.add_argument(
|
||||
'-G', '--generator', help="CMake build system generator (default: Unix Makefiles, use cmake -h to get the complete list).", default='Unix Makefiles', dest='generator')
|
||||
argparser.add_argument(
|
||||
'-L', '--list-cmake-variables', help="List non-advanced CMake cache variables.", action='store_true', dest='list_cmake_variables')
|
||||
argparser.add_argument(
|
||||
'-lf', '--list-features', help="List optional features and their default values.", action='store_true', dest='list_features')
|
||||
argparser.add_argument(
|
||||
'-t', '--tunnel', help="Enable Tunnel.", action='store_true')
|
||||
argparser.add_argument('platform', nargs='*', action=PlatformListAction, default=[
|
||||
'arm', 'armv7', 'x86'], help="The platform to build for (default is 'arm armv7 x86'). Space separated architectures in list: {0}.".format(', '.join([repr(platform) for platform in platforms])))
|
||||
|
||||
args, additional_args2 = argparser.parse_known_args()
|
||||
|
||||
additional_args = ["-G", args.generator]
|
||||
|
||||
if check_tools() != 0:
|
||||
return 1
|
||||
|
||||
if args.debug_verbose is True:
|
||||
additional_args += ["-DENABLE_DEBUG_LOGS=YES"]
|
||||
if args.enable_non_free_codecs is True:
|
||||
additional_args += ["-DENABLE_NON_FREE_CODECS=YES"]
|
||||
if args.all_codecs is True:
|
||||
additional_args += ["-DENABLE_GPL_THIRD_PARTIES=YES"]
|
||||
additional_args += ["-DENABLE_NON_FREE_CODECS=YES"]
|
||||
additional_args += ["-DENABLE_AMRNB=YES"]
|
||||
additional_args += ["-DENABLE_AMRWB=YES"]
|
||||
additional_args += ["-DENABLE_BV16=YES"]
|
||||
additional_args += ["-DENABLE_CODEC2=YES"]
|
||||
additional_args += ["-DENABLE_G729=YES"]
|
||||
additional_args += ["-DENABLE_GSM=YES"]
|
||||
additional_args += ["-DENABLE_ILBC=YES"]
|
||||
additional_args += ["-DENABLE_ISAC=YES"]
|
||||
additional_args += ["-DENABLE_OPUS=YES"]
|
||||
additional_args += ["-DENABLE_SILK=YES"]
|
||||
additional_args += ["-DENABLE_SPEEX=YES"]
|
||||
additional_args += ["-DENABLE_FFMPEG=YES"]
|
||||
additional_args += ["-DENABLE_H263=YES"]
|
||||
additional_args += ["-DENABLE_H263P=YES"]
|
||||
additional_args += ["-DENABLE_MPEG4=YES"]
|
||||
additional_args += ["-DENABLE_OPENH264=YES"]
|
||||
additional_args += ["-DENABLE_VPX=YES"]
|
||||
additional_args += ["-DENABLE_X264=YES"]
|
||||
if args.disable_gpl_third_parties is True:
|
||||
additional_args += ["-DENABLE_GPL_THIRD_PARTIES=NO"]
|
||||
|
||||
if args.tunnel or os.path.isdir("submodules/tunnel"):
|
||||
if not os.path.isdir("submodules/tunnel"):
|
||||
info("Tunnel wanted but not found yet, trying to clone it...")
|
||||
p = Popen("git clone gitosis@git.linphone.org:tunnel.git submodules/tunnel".split(" "))
|
||||
p.wait()
|
||||
if p.returncode != 0:
|
||||
error("Could not clone tunnel. Please see http://www.belledonne-communications.com/voiptunnel.html")
|
||||
return 1
|
||||
warning("Tunnel enabled, disabling GPL third parties.")
|
||||
additional_args += ["-DENABLE_TUNNEL=YES", "-DENABLE_GPL_THIRD_PARTIES=OFF"]
|
||||
|
||||
# User's options are priority upon all automatic options
|
||||
additional_args += additional_args2
|
||||
|
||||
if args.list_features:
|
||||
list_features(args.debug, additional_args)
|
||||
return 0
|
||||
|
||||
selected_platforms_dup = []
|
||||
for platform in args.platform:
|
||||
if platform == 'all':
|
||||
selected_platforms_dup += ['arm', 'armv7', 'x86']
|
||||
else:
|
||||
selected_platforms_dup += [platform]
|
||||
# unify platforms but keep provided order
|
||||
selected_platforms = []
|
||||
for x in selected_platforms_dup:
|
||||
if x not in selected_platforms:
|
||||
selected_platforms.append(x)
|
||||
|
||||
if os.path.isdir('WORK') and not args.clean and not args.force:
|
||||
warning("Working directory WORK already exists. Please remove it (option -C or -c) before re-executing CMake "
|
||||
"to avoid conflicts between executions, or force execution (option -f) if you are aware of consequences.")
|
||||
if os.path.isfile('Makefile'):
|
||||
Popen("make help-prepare-options".split(" "))
|
||||
return 0
|
||||
|
||||
for platform in selected_platforms:
|
||||
target = targets[platform]
|
||||
|
||||
if args.clean:
|
||||
target.clean()
|
||||
else:
|
||||
retcode = prepare.run(target, args.debug, False, args.list_cmake_variables, args.force, additional_args)
|
||||
if retcode != 0:
|
||||
return retcode
|
||||
|
||||
if args.clean:
|
||||
if os.path.isfile('Makefile'):
|
||||
os.remove('Makefile')
|
||||
elif selected_platforms:
|
||||
# only generated makefile if we are using Ninja or Makefile
|
||||
if args.generator.endswith('Ninja'):
|
||||
if not check_is_installed("ninja", "it"):
|
||||
return 1
|
||||
generate_makefile(selected_platforms, 'ninja -C')
|
||||
info("You can now run 'make' to build.")
|
||||
elif args.generator.endswith("Unix Makefiles"):
|
||||
generate_makefile(selected_platforms, '$(MAKE) -C')
|
||||
info("You can now run 'make' to build.")
|
||||
else:
|
||||
warning("Not generating meta-makefile for generator {}.".format(target.generator))
|
||||
|
||||
return 0
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
43
submodules/externals/build/ffmpeg/CMakeLists.txt
vendored
Normal file
43
submodules/externals/build/ffmpeg/CMakeLists.txt
vendored
Normal file
|
@ -0,0 +1,43 @@
|
|||
############################################################################
|
||||
# CMakeLists.txt
|
||||
# Copyright (C) 2016 Belledonne Communications, Grenoble France
|
||||
#
|
||||
############################################################################
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
############################################################################
|
||||
|
||||
cmake_minimum_required(VERSION 3.0)
|
||||
project(ffmpegandroid LANGUAGES C)
|
||||
|
||||
include(GNUInstallDirs)
|
||||
|
||||
|
||||
find_library(AVCODEC_LIBRARY avcodec)
|
||||
find_library(AVUTIL_LIBRARY avutil)
|
||||
find_library(SWRESAMPLE_LIBRARY swresample)
|
||||
find_library(SWSCALE_LIBRARY swscale)
|
||||
|
||||
add_library(ffmpeg-linphone-${CMAKE_SYSTEM_PROCESSOR} MODULE)
|
||||
target_link_libraries(ffmpeg-linphone-${CMAKE_SYSTEM_PROCESSOR} LINK_PRIVATE "m" "-Wl,-whole-archive" ${AVCODEC_LIBRARY} ${AVUTIL_LIBRARY} ${SWRESAMPLE_LIBRARY} ${SWSCALE_LIBRARY} "-Wl,-no-whole-archive")
|
||||
set_target_properties(ffmpeg-linphone-${CMAKE_SYSTEM_PROCESSOR} PROPERTIES LINKER_LANGUAGE C)
|
||||
|
||||
install(TARGETS ffmpeg-linphone-${CMAKE_SYSTEM_PROCESSOR}
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
|
||||
)
|
|
@ -15,5 +15,5 @@
|
|||
# 'key.alias' for the name of the key to use.
|
||||
# The password will be asked during the build when you use the 'release' target.
|
||||
|
||||
tested.project.dir=.
|
||||
tested.project.dir=../
|
||||
test.runner=com.zutubi.android.junitreport.JUnitReportTestRunner
|
||||
|
|
|
@ -479,7 +479,7 @@ public class LinphoneTestManager implements LinphoneCoreListener{
|
|||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void friendListCreated(LinphoneCore lc, LinphoneFriendList list) {
|
||||
// TODO Auto-generated method stub
|
||||
|
|
Loading…
Reference in a new issue