diff --git a/TMessagesProj/jni/CMakeLists.txt b/TMessagesProj/jni/CMakeLists.txt index ab5740fb2..77059f188 100644 --- a/TMessagesProj/jni/CMakeLists.txt +++ b/TMessagesProj/jni/CMakeLists.txt @@ -12,7 +12,7 @@ ${CMAKE_HOME_DIRECTORY}/ffmpeg/build/${ANDROID_ABI}/lib/libavcodec.a, ${CMAKE_HOME_DIRECTORY}/ffmpeg/build/${ANDROID_ABI}/lib/libavresample.a, ${CMAKE_HOME_DIRECTORY}/ffmpeg/build/${ANDROID_ABI}/lib/libavutil.a, ${CMAKE_HOME_DIRECTORY}/ffmpeg/build/${ANDROID_ABI}/lib/libswresample.a, -${CMAKE_HOME_DIRECTORY}/ffmpeg/${ANDROID_ABI}/libvpx.a, +${CMAKE_HOME_DIRECTORY}/libvpx/build/${ANDROID_ABI}/lib/libvpx.a, ${CMAKE_HOME_DIRECTORY}/boringssl/build/${ANDROID_ABI}/ssl/libssl.a, ${CMAKE_HOME_DIRECTORY}/boringssl/build/${ANDROID_ABI}/crypto/libcrypto.a") @@ -60,7 +60,7 @@ add_library(ssl STATIC IMPORTED) set_target_properties(ssl PROPERTIES IMPORTED_LOCATION ${CMAKE_HOME_DIRECTORY}/boringssl/build/${ANDROID_ABI}/ssl/libssl.a) add_library(libvpx STATIC IMPORTED) -set_target_properties(libvpx PROPERTIES IMPORTED_LOCATION ${CMAKE_HOME_DIRECTORY}/ffmpeg/${ANDROID_ABI}/libvpx.a) +set_target_properties(libvpx PROPERTIES IMPORTED_LOCATION ${CMAKE_HOME_DIRECTORY}/libvpx/build/${ANDROID_ABI}/lib/libvpx.a) #tgnet diff --git a/TMessagesProj/jni/build_boringssl.sh b/TMessagesProj/jni/build_boringssl.sh index 81ead408c..d194fb170 100755 --- a/TMessagesProj/jni/build_boringssl.sh +++ b/TMessagesProj/jni/build_boringssl.sh @@ -7,31 +7,38 @@ function build_one { cd ${CPU} echo "Configuring..." - cmake -DANDROID_NATIVE_API_LEVEL=${API} -DANDROID_ABI=${CPU} -DCMAKE_BUILD_TYPE=Release -DANDROID_NDK=${NDK} -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake -GNinja -DCMAKE_MAKE_PROGRAM=${NINJA_PATH} ../.. - + cmake \ + -DANDROID_NATIVE_API_LEVEL=${API} \ + -DANDROID_ABI=${CPU} \ + -DCMAKE_BUILD_TYPE=Release \ + -DANDROID_NDK=${NDK} \ + -DCMAKE_TOOLCHAIN_FILE=${NDK}/build/cmake/android.toolchain.cmake \ + -GNinja -DCMAKE_MAKE_PROGRAM=${NINJA_PATH} \ + ../.. + echo "Building..." cmake --build . - + cd .. } function checkPreRequisites { - if ! [ -d "boringssl" ] || ! [ "$(ls -A boringssl)" ]; then - echo -e "\033[31mFailed! Submodule 'boringssl' not found!\033[0m" - echo -e "\033[31mTry to run: 'git submodule init && git submodule update'\033[0m" - exit - fi + if ! [ -d "boringssl" ] || ! [ "$(ls -A boringssl)" ]; then + echo -e "\033[31mFailed! Submodule 'boringssl' not found!\033[0m" + echo -e "\033[31mTry to run: 'git submodule init && git submodule update'\033[0m" + exit + fi - if [ -z "$NDK" -a "$NDK" == "" ]; then - echo -e "\033[31mFailed! NDK is empty. Run 'export NDK=[PATH_TO_NDK]'\033[0m" - exit - fi - - if [ -z "$NINJA_PATH" -a "$NINJA_PATH" == "" ]; then - echo -e "\033[31mFailed! NINJA_PATH is empty. Run 'export NINJA_PATH=[PATH_TO_NINJA]'\033[0m" - exit - fi + if [ -z "$NDK" -a "$NDK" == "" ]; then + echo -e "\033[31mFailed! NDK is empty. Run 'export NDK=[PATH_TO_NDK]'\033[0m" + exit + fi + + if [ -z "$NINJA_PATH" -a "$NINJA_PATH" == "" ]; then + echo -e "\033[31mFailed! NINJA_PATH is empty. Run 'export NINJA_PATH=[PATH_TO_NINJA]'\033[0m" + exit + fi } ANDROID_NDK=$NDK @@ -39,20 +46,41 @@ checkPreRequisites cd boringssl +rm -rf build mkdir build cd build -API=16 +function build { + for arg in "$@"; do + case "${arg}" in + x86_64) + API=21 + CPU=x86_64 + build_one + ;; + arm64) + API=21 + CPU=arm64-v8a + build_one + ;; + arm) + API=16 + CPU=armeabi-v7a + build_one + ;; + x86) + API=16 + CPU=x86 + build_one + ;; + *) + ;; + esac + done +} -CPU=armeabi-v7a -build_one - -CPU=x86 -build_one - -API=21 -CPU=arm64-v8a -build_one - -CPU=x86_64 -build_one +if (( $# == 0 )); then + build x86_64 arm64 arm x86 +else + build $@ +fi diff --git a/TMessagesProj/jni/build_ffmpeg_clang.sh b/TMessagesProj/jni/build_ffmpeg_clang.sh index 1c3eb800f..febae416e 100755 --- a/TMessagesProj/jni/build_ffmpeg_clang.sh +++ b/TMessagesProj/jni/build_ffmpeg_clang.sh @@ -1,32 +1,36 @@ #!/bin/bash set -e function build_one { - CC="${CROSS_PREFIX}clang" - CXX="${CROSS_PREFIX}clang++" - AS="${CROSS_PREFIX}clang" - AR="${CROSS_PREFIX}ar" - LD="${CROSS_PREFIX}ld" - NM="${CROSS_PREFIX}nm" - STRIP="${CROSS_PREFIX}strip" + echo "Building ${ARCH}..." + + PREBUILT=${NDK}/toolchains/${PREBUILT_ARCH}${PREBUILT_MIDDLE}-${VERSION}/prebuilt/${BUILD_PLATFORM} + PLATFORM=${NDK}/platforms/android-${ANDROID_API}/arch-${ARCH} + + TOOLS_PREFIX="${LLVM_BIN}/${ARCH_NAME}-linux-${BIN_MIDDLE}-" + + LD=${TOOLS_PREFIX}ld + AR=${TOOLS_PREFIX}ar + STRIP=${TOOLS_PREFIX}strip + NM=${TOOLS_PREFIX}nm + + CC_PREFIX="${LLVM_BIN}/${CLANG_PREFIX}-linux-${BIN_MIDDLE}${ANDROID_API}-" + + CC=${CC_PREFIX}clang + CXX=${CC_PREFIX}clang++ + CROSS_PREFIX=${PREBUILT}/bin/${ARCH_NAME}-linux-${BIN_MIDDLE}- + + INCLUDES=" -I${LIBVPXPREFIX}/include" + LIBS=" -L${LIBVPXPREFIX}/lib" echo "Cleaning..." rm -f config.h make clean || true - rm -rf ${TOOLCHAIN_PREFIX} - - echo "Toolchain..." - python $NDK/build/tools/make_standalone_toolchain.py \ - --arch ${ARCH} \ - --api ${ANDROID_API} \ - --stl libc++ \ - --install-dir=${TOOLCHAIN_PREFIX} echo "Configuring..." ./configure \ --nm=${NM} \ --ar=${AR} \ - --as=${CROSS_PREFIX}gcc \ --strip=${STRIP} \ --cc=${CC} \ --cxx=${CXX} \ @@ -34,17 +38,18 @@ function build_one { --arch=$ARCH \ --target-os=linux \ --enable-cross-compile \ - --x86asmexe=$NDK/prebuilt/$BUILD_PLATFORM/bin/yasm \ + --x86asmexe=$NDK/prebuilt/${BUILD_PLATFORM}/bin/yasm \ --prefix=$PREFIX \ --enable-pic \ --disable-shared \ --enable-static \ - --enable-asm \ - --enable-inline-asm \ - --enable-x86asm \ + --enable-asm \ + --enable-inline-asm \ + --enable-x86asm \ --cross-prefix=$CROSS_PREFIX \ - --sysroot=$SYSROOT \ + --sysroot="${LLVM_PREFIX}/sysroot" \ --extra-cflags="-Wl,-Bsymbolic -Os -DCONFIG_LINUX_PERF=0 -DANDROID $OPTIMIZE_CFLAGS -fPIE -pie --static -fPIC" \ + --extra-cxxflags="-Wl,-Bsymbolic -Os -DCONFIG_LINUX_PERF=0 -DANDROID $OPTIMIZE_CFLAGS -fPIE -pie --static -fPIC" \ --extra-ldflags="-Wl,-Bsymbolic -Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -fPIC" \ \ --enable-version3 \ @@ -58,13 +63,14 @@ function build_one { \ --disable-everything \ --disable-network \ + --enable-libvpx \ + --enable-decoder=libvpx_vp9 \ --disable-zlib \ --disable-avfilter \ --disable-avdevice \ --disable-postproc \ --disable-debug \ --disable-programs \ - --disable-network \ --disable-ffplay \ --disable-ffprobe \ --disable-postproc \ @@ -84,6 +90,7 @@ function build_one { --enable-demuxer=mov \ --enable-demuxer=gif \ --enable-demuxer=ogg \ + --enable-demuxer=matroska \ --enable-hwaccels \ $ADDITIONAL_CONFIGURE_FLAG @@ -95,40 +102,40 @@ function build_one { function setCurrentPlatform { - PLATFORM="$(uname -s)" - case "${PLATFORM}" in - Darwin*) - BUILD_PLATFORM=darwin-x86_64 - COMPILATION_PROC_COUNT=`sysctl -n hw.physicalcpu` - ;; - Linux*) - BUILD_PLATFORM=linux-x86_64 - COMPILATION_PROC_COUNT=$(nproc) - ;; - *) - echo -e "\033[33mWarning! Unknown platform ${PLATFORM}! falling back to linux-x86_64\033[0m" - BUILD_PLATFORM=linux-x86_64 - COMPILATION_PROC_COUNT=1 - ;; - esac + CURRENT_PLATFORM="$(uname -s)" + case "${CURRENT_PLATFORM}" in + Darwin*) + BUILD_PLATFORM=darwin-x86_64 + COMPILATION_PROC_COUNT=`sysctl -n hw.physicalcpu` + ;; + Linux*) + BUILD_PLATFORM=linux-x86_64 + COMPILATION_PROC_COUNT=$(nproc) + ;; + *) + echo -e "\033[33mWarning! Unknown platform ${CURRENT_PLATFORM}! falling back to linux-x86_64\033[0m" + BUILD_PLATFORM=linux-x86_64 + COMPILATION_PROC_COUNT=1 + ;; + esac - echo "build platform: ${BUILD_PLATFORM}" - echo "parallel jobs: ${COMPILATION_PROC_COUNT}" + echo "Build platform: ${BUILD_PLATFORM}" + echo "Parallel jobs: ${COMPILATION_PROC_COUNT}" } function checkPreRequisites { - if ! [ -d "ffmpeg" ] || ! [ "$(ls -A ffmpeg)" ]; then - echo -e "\033[31mFailed! Submodule 'ffmpeg' not found!\033[0m" - echo -e "\033[31mTry to run: 'git submodule init && git submodule update'\033[0m" - exit - fi + if ! [ -d "ffmpeg" ] || ! [ "$(ls -A ffmpeg)" ]; then + echo -e "\033[31mFailed! Submodule 'ffmpeg' not found!\033[0m" + echo -e "\033[31mTry to run: 'git submodule init && git submodule update'\033[0m" + exit + fi - if [ -z "$NDK" -a "$NDK" == "" ]; then - echo -e "\033[31mFailed! NDK is empty. Run 'export NDK=[PATH_TO_NDK]'\033[0m" - exit - fi + if [ -z "$NDK" -a "$NDK" == "" ]; then + echo -e "\033[31mFailed! NDK is empty. Run 'export NDK=[PATH_TO_NDK]'\033[0m" + exit + fi } setCurrentPlatform @@ -139,56 +146,85 @@ checkPreRequisites cd ffmpeg -BASEDIR=`pwd` -TOOLCHAIN_PREFIX=${BASEDIR}/toolchain-android - ## common -SYSROOT=${TOOLCHAIN_PREFIX}/sysroot +LLVM_PREFIX="${NDK}/toolchains/llvm/prebuilt/linux-x86_64" +LLVM_BIN="${LLVM_PREFIX}/bin" +VERSION="4.9" -#x86_64 -ANDROID_API=21 -PREBUILT=$NDK/toolchains/x86_64-4.9/prebuilt/$BUILD_PLATFORM -PLATFORM=$NDK/platforms/android-21/arch-x86_64 -CROSS_PREFIX=${TOOLCHAIN_PREFIX}/bin/x86_64-linux-android- -ARCH=x86_64 -CPU=x86_64 -PREFIX=./build/$CPU -ADDITIONAL_CONFIGURE_FLAG="--disable-asm" -build_one +function build { + for arg in "$@"; do + case "${arg}" in + x86_64) + ANDROID_API=21 -#arm64-v8a -ANDROID_API=21 -PREBUILT=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/$BUILD_PLATFORM -PLATFORM=$NDK/platforms/android-21/arch-arm64 -CROSS_PREFIX=${TOOLCHAIN_PREFIX}/bin/aarch64-linux-android- -ARCH=arm64 -CPU=arm64-v8a -OPTIMIZE_CFLAGS= -PREFIX=./build/$CPU -ADDITIONAL_CONFIGURE_FLAG="--enable-neon --enable-optimizations" -build_one + ARCH=x86_64 + ARCH_NAME=x86_64 + PREBUILT_ARCH=x86_64 + PREBUILT_MIDDLE= + CLANG_PREFIX=x86_64 + BIN_MIDDLE=android + CPU=x86_64 + PREFIX=./build/$CPU + LIBVPXPREFIX=../libvpx/build/$ARCH_NAME + ADDITIONAL_CONFIGURE_FLAG="--disable-asm" + build_one + ;; + arm64) + ANDROID_API=21 + ARCH=arm64 + ARCH_NAME=aarch64 + PREBUILT_ARCH=aarch64 + PREBUILT_MIDDLE="-linux-android" + CLANG_PREFIX=aarch64 + BIN_MIDDLE=android + CPU=arm64-v8a + OPTIMIZE_CFLAGS= + PREFIX=./build/$CPU + LIBVPXPREFIX=../libvpx/build/$CPU + ADDITIONAL_CONFIGURE_FLAG="--enable-neon --enable-optimizations" + build_one + ;; + arm) + ANDROID_API=16 -#arm v7n -ANDROID_API=16 -PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/$BUILD_PLATFORM -PLATFORM=$NDK/platforms/android-16/arch-arm -CROSS_PREFIX=${TOOLCHAIN_PREFIX}/bin/arm-linux-androideabi- -ARCH=arm -CPU=armv7-a -OPTIMIZE_CFLAGS="-marm -march=$CPU" -PREFIX=./build/armeabi-v7a -ADDITIONAL_CONFIGURE_FLAG="--enable-neon" -build_one + ARCH=arm + ARCH_NAME=arm + PREBUILT_ARCH=arm + PREBUILT_MIDDLE="-linux-androideabi" + CLANG_PREFIX=armv7a + BIN_MIDDLE=androideabi + CPU=armv7-a + OPTIMIZE_CFLAGS="-marm -march=$CPU" + PREFIX=./build/armeabi-v7a + LIBVPXPREFIX=../libvpx/build/armeabi-v7a + ADDITIONAL_CONFIGURE_FLAG=--enable-neon + build_one + ;; + x86) + ANDROID_API=16 -#x86 platform -ANDROID_API=16 -PREBUILT=$NDK/toolchains/x86-4.9/prebuilt/$BUILD_PLATFORM -PLATFORM=$NDK/platforms/android-16/arch-x86 -CROSS_PREFIX=${TOOLCHAIN_PREFIX}/bin/i686-linux-android- -ARCH=x86 -CPU=i686 -OPTIMIZE_CFLAGS="-march=$CPU" -PREFIX=./build/x86 -ADDITIONAL_CONFIGURE_FLAG="--disable-x86asm --disable-inline-asm --disable-asm" -build_one + ARCH=x86 + ARCH_NAME=i686 + PREBUILT_ARCH=x86 + PREBUILT_MIDDLE= + CLANG_PREFIX=i686 + BIN_MIDDLE=android + CPU=i686 + OPTIMIZE_CFLAGS="-march=$CPU" + PREFIX=./build/$ARCH + LIBVPXPREFIX=../libvpx/build/$ARCH_NAME + ADDITIONAL_CONFIGURE_FLAG="--disable-x86asm --disable-inline-asm --disable-asm" + build_one + ;; + *) + ;; + esac + done +} + +if (( $# == 0 )); then + build x86_64 arm64 arm x86 +else + build $@ +fi diff --git a/TMessagesProj/jni/build_libvpx_clang.sh b/TMessagesProj/jni/build_libvpx_clang.sh index 8ef9333da..44970bc1a 100755 --- a/TMessagesProj/jni/build_libvpx_clang.sh +++ b/TMessagesProj/jni/build_libvpx_clang.sh @@ -40,398 +40,28 @@ function build_one { --libc="${LLVM_PREFIX}/sysroot" \ --prefix=${PREFIX} \ --target=${TARGET} \ - --enable-runtime-cpu-detect \ + ${CPU_DETECT} \ --as=yasm \ --enable-static \ --enable-pic \ --disable-docs \ - --disable-libyuv \ + --enable-libyuv \ + --enable-small \ + --enable-optimizations \ + --enable-better-hw-compatibility \ --disable-examples \ --disable-tools \ --disable-debug \ --disable-unit-tests \ --disable-install-docs \ --enable-realtime-only \ - --enable-vp9-postproc \ - --enable-vp9-highbitdepth \ - --disable-webm-io \ - --enable-postproc \ - --enable-multi-res-encoding \ - --enable-temporal-denoising \ - --enable-vp9-temporal-denoising \ - --disable-avx512 + --enable-vp8 \ + --enable-vp9 \ + --disable-webm-io make -j$COMPILATION_PROC_COUNT install } -function cutX86 { - pushd $PREFIX/lib - - $AR dv libvpx.a vp9_job_queue.c.o - $AR dv libvpx.a vp9_dsubexp.c.o - $AR dv libvpx.a vp9_decoder.c.o - $AR dv libvpx.a vp9_detokenize.c.o - $AR dv libvpx.a vp9_decodeframe.c.o - $AR dv libvpx.a vp9_decodemv.c.o - $AR dv libvpx.a vp9_dx_iface.c.o - $AR dv libvpx.a vp9_denoiser_sse2.c.o - $AR dv libvpx.a vp9_dct_intrin_sse2.c.o - $AR dv libvpx.a vp9_highbd_block_error_intrin_sse2.c.o - $AR dv libvpx.a vp9_quantize_sse2.c.o - $AR dv libvpx.a vp9_ext_ratectrl.c.o - $AR dv libvpx.a vp9_noise_estimate.c.o - $AR dv libvpx.a vp9_skin_detection.c.o - $AR dv libvpx.a vp9_aq_cyclicrefresh.c.o - $AR dv libvpx.a vp9_treewriter.c.o - $AR dv libvpx.a vp9_tokenize.c.o - $AR dv libvpx.a vp9_resize.c.o - $AR dv libvpx.a vp9_svc_layercontext.c.o - $AR dv libvpx.a vp9_subexp.c.o - $AR dv libvpx.a vp9_speed_features.c.o - $AR dv libvpx.a vp9_segmentation.c.o - $AR dv libvpx.a vp9_pickmode.c.o - $AR dv libvpx.a vp9_rdopt.c.o - $AR dv libvpx.a vp9_rd.c.o - $AR dv libvpx.a vp9_ratectrl.c.o - $AR dv libvpx.a vp9_quantize.c.o - $AR dv libvpx.a vp9_picklpf.c.o - $AR dv libvpx.a vp9_encoder.c.o - $AR dv libvpx.a vp9_mcomp.c.o - $AR dv libvpx.a vp9_multi_thread.c.o - $AR dv libvpx.a vp9_lookahead.c.o - $AR dv libvpx.a vp9_frame_scale.c.o - $AR dv libvpx.a vp9_extend.c.o - $AR dv libvpx.a vp9_ethread.c.o - $AR dv libvpx.a vp9_encodemv.c.o - $AR dv libvpx.a vp9_encodemb.c.o - $AR dv libvpx.a vp9_encodeframe.c.o - $AR dv libvpx.a vp9_denoiser.c.o - $AR dv libvpx.a vp9_dct.c.o - $AR dv libvpx.a vp9_cost.c.o - $AR dv libvpx.a vp9_context_tree.c.o - $AR dv libvpx.a vp9_bitstream.c.o - $AR dv libvpx.a vp9_cx_iface.c.o - $AR dv libvpx.a vp9_idct_intrin_sse2.c.o - $AR dv libvpx.a vp9_mfqe.c.o - $AR dv libvpx.a vp9_postproc.c.o - $AR dv libvpx.a vp9_scan.c.o - $AR dv libvpx.a vp9_common_data.c.o - $AR dv libvpx.a vp9_reconintra.c.o - $AR dv libvpx.a vp9_reconinter.c.o - $AR dv libvpx.a vp9_quant_common.c.o - $AR dv libvpx.a vp9_mvref_common.c.o - $AR dv libvpx.a vp9_thread_common.c.o - $AR dv libvpx.a vp9_loopfilter.c.o - $AR dv libvpx.a vp9_tile_common.c.o - $AR dv libvpx.a vp9_seg_common.c.o - $AR dv libvpx.a vp9_scale.c.o - $AR dv libvpx.a vp9_rtcd.c.o - $AR dv libvpx.a vp9_pred_common.c.o - $AR dv libvpx.a vp9_filter.c.o - $AR dv libvpx.a vp9_idct.c.o - $AR dv libvpx.a vp9_frame_buffers.c.o - $AR dv libvpx.a vp9_entropymv.c.o - $AR dv libvpx.a vp9_entropymode.c.o - $AR dv libvpx.a vp9_entropy.c.o - $AR dv libvpx.a vp9_blockd.c.o - $AR dv libvpx.a vp9_alloccommon.c.o - $AR dv libvpx.a vp9_iface_common.c.o - $AR dv libvpx.a threading.c.o - $AR dv libvpx.a onyxd_if.c.o - $AR dv libvpx.a detokenize.c.o - $AR dv libvpx.a decodeframe.c.o - $AR dv libvpx.a decodemv.c.o - $AR dv libvpx.a dboolhuff.c.o - $AR dv libvpx.a vp8_dx_iface.c.o - $AR dv libvpx.a vp8_enc_stubs_sse2.c.o - $AR dv libvpx.a denoising_sse2.c.o - $AR dv libvpx.a vp8_quantize_sse2.c.o - $AR dv libvpx.a mr_dissim.c.o - $AR dv libvpx.a treewriter.c.o - $AR dv libvpx.a tokenize.c.o - $AR dv libvpx.a vp8_skin_detection.c.o - $AR dv libvpx.a segmentation.c.o - $AR dv libvpx.a rdopt.c.o - $AR dv libvpx.a ratectrl.c.o - $AR dv libvpx.a vp8_quantize.c.o - $AR dv libvpx.a picklpf.c.o - $AR dv libvpx.a pickinter.c.o - $AR dv libvpx.a onyx_if.c.o - $AR dv libvpx.a modecosts.c.o - $AR dv libvpx.a mcomp.c.o - $AR dv libvpx.a lookahead.c.o - $AR dv libvpx.a denoising.c.o - $AR dv libvpx.a ethreading.c.o - $AR dv libvpx.a encodemv.c.o - $AR dv libvpx.a encodemb.c.o - $AR dv libvpx.a encodeintra.c.o - $AR dv libvpx.a encodeframe.c.o - $AR dv libvpx.a boolhuff.c.o - $AR dv libvpx.a bitstream.c.o - $AR dv libvpx.a vp8_cx_iface.c.o - $AR dv libvpx.a bilinear_filter_sse2.c.o - $AR dv libvpx.a idct_blk_sse2.c.o - $AR dv libvpx.a idct_blk_mmx.c.o - $AR dv libvpx.a postproc.c.o - $AR dv libvpx.a mfqe.c.o - $AR dv libvpx.a loopfilter_x86.c.o - $AR dv libvpx.a vp8_asm_stubs.c.o - $AR dv libvpx.a treecoder.c.o - $AR dv libvpx.a setupintrarecon.c.o - $AR dv libvpx.a reconintra4x4.c.o - $AR dv libvpx.a reconintra.c.o - $AR dv libvpx.a reconinter.c.o - $AR dv libvpx.a quant_common.c.o - $AR dv libvpx.a modecont.c.o - $AR dv libvpx.a mbpitch.c.o - $AR dv libvpx.a vp8_loopfilter.c.o - $AR dv libvpx.a rtcd.c.o - $AR dv libvpx.a idctllm.c.o - $AR dv libvpx.a systemdependent.c.o - $AR dv libvpx.a findnearmv.c.o - $AR dv libvpx.a filter.c.o - $AR dv libvpx.a extend.c.o - $AR dv libvpx.a entropymv.c.o - $AR dv libvpx.a entropymode.c.o - $AR dv libvpx.a entropy.c.o - $AR dv libvpx.a blockd.c.o - $AR dv libvpx.a alloccommon.c.o - $AR dv libvpx.a vpx_thread.c.o - $AR dv libvpx.a vpx_dsp_rtcd.c.o - $AR dv libvpx.a highbd_variance_sse2.c.o - $AR dv libvpx.a variance_sse2.c.o - $AR dv libvpx.a avg_pred_sse2.c.o - $AR dv libvpx.a variance.c.o - $AR dv libvpx.a sum_squares_sse2.c.o - $AR dv libvpx.a subtract.c.o - $AR dv libvpx.a sad.c.o - $AR dv libvpx.a skin_detection.c.o - $AR dv libvpx.a avg_intrin_sse2.c.o - $AR dv libvpx.a avg.c.o - $AR dv libvpx.a highbd_quantize_intrin_sse2.c.o - $AR dv libvpx.a quantize_sse2.c.o - $AR dv libvpx.a quantize.c.o - $AR dv libvpx.a highbd_idct32x32_add_sse2.c.o - $AR dv libvpx.a highbd_idct16x16_add_sse2.c.o - $AR dv libvpx.a highbd_idct8x8_add_sse2.c.o - $AR dv libvpx.a highbd_idct4x4_add_sse2.c.o - $AR dv libvpx.a inv_txfm_sse2.c.o - $AR dv libvpx.a inv_txfm.c.o - $AR dv libvpx.a fwd_txfm_sse2.c.o - $AR dv libvpx.a fwd_txfm.c.o - $AR dv libvpx.a highbd_loopfilter_sse2.c.o - $AR dv libvpx.a loopfilter_sse2.c.o - $AR dv libvpx.a vpx_subpixel_4t_intrin_sse2.c.o - $AR dv libvpx.a vpx_convolve.c.o - $AR dv libvpx.a post_proc_sse2.c.o - $AR dv libvpx.a deblock.c.o - $AR dv libvpx.a add_noise.c.o - $AR dv libvpx.a highbd_intrapred_intrin_sse2.c.o - $AR dv libvpx.a intrapred.c.o - $AR dv libvpx.a bitreader_buffer.c.o - $AR dv libvpx.a bitreader.c.o - $AR dv libvpx.a psnr.c.o - $AR dv libvpx.a bitwriter_buffer.c.o - $AR dv libvpx.a bitwriter.c.o - $AR dv libvpx.a prob.c.o - $AR dv libvpx.a emms_mmx.c.o - $AR dv libvpx.a vpx_scale_rtcd.c.o - $AR dv libvpx.a gen_scalers.c.o - $AR dv libvpx.a yv12extend.c.o - $AR dv libvpx.a yv12config.c.o - $AR dv libvpx.a vpx_scale.c.o - $AR dv libvpx.a vpx_mem.c.o - $AR dv libvpx.a vpx_image.c.o - $AR dv libvpx.a vpx_codec.c.o - $AR dv libvpx.a vpx_encoder.c.o - $AR dv libvpx.a vpx_decoder.c.o - - popd -} - -function cutX8664 { - pushd $PREFIX/lib - $AR dv libvpx.a vp9_job_queue.c.o - $AR dv libvpx.a vp9_dsubexp.c.o - $AR dv libvpx.a vp9_decoder.c.o - $AR dv libvpx.a vp9_detokenize.c.o - $AR dv libvpx.a vp9_decodeframe.c.o - $AR dv libvpx.a vp9_decodemv.c.o - $AR dv libvpx.a vp9_dx_iface.c.o - $AR dv libvpx.a vp9_denoiser_sse2.c.o - $AR dv libvpx.a vp9_dct_intrin_sse2.c.o - $AR dv libvpx.a vp9_highbd_block_error_intrin_sse2.c.o - $AR dv libvpx.a vp9_quantize_sse2.c.o - $AR dv libvpx.a vp9_ext_ratectrl.c.o - $AR dv libvpx.a vp9_noise_estimate.c.o - $AR dv libvpx.a vp9_skin_detection.c.o - $AR dv libvpx.a vp9_aq_cyclicrefresh.c.o - $AR dv libvpx.a vp9_treewriter.c.o - $AR dv libvpx.a vp9_tokenize.c.o - $AR dv libvpx.a vp9_resize.c.o - $AR dv libvpx.a vp9_svc_layercontext.c.o - $AR dv libvpx.a vp9_subexp.c.o - $AR dv libvpx.a vp9_speed_features.c.o - $AR dv libvpx.a vp9_segmentation.c.o - $AR dv libvpx.a vp9_pickmode.c.o - $AR dv libvpx.a vp9_rdopt.c.o - $AR dv libvpx.a vp9_rd.c.o - $AR dv libvpx.a vp9_ratectrl.c.o - $AR dv libvpx.a vp9_quantize.c.o - $AR dv libvpx.a vp9_picklpf.c.o - $AR dv libvpx.a vp9_encoder.c.o - $AR dv libvpx.a vp9_mcomp.c.o - $AR dv libvpx.a vp9_multi_thread.c.o - $AR dv libvpx.a vp9_lookahead.c.o - $AR dv libvpx.a vp9_frame_scale.c.o - $AR dv libvpx.a vp9_extend.c.o - $AR dv libvpx.a vp9_ethread.c.o - $AR dv libvpx.a vp9_encodemv.c.o - $AR dv libvpx.a vp9_encodemb.c.o - $AR dv libvpx.a vp9_encodeframe.c.o - $AR dv libvpx.a vp9_denoiser.c.o - $AR dv libvpx.a vp9_dct.c.o - $AR dv libvpx.a vp9_cost.c.o - $AR dv libvpx.a vp9_context_tree.c.o - $AR dv libvpx.a vp9_bitstream.c.o - $AR dv libvpx.a vp9_cx_iface.c.o - $AR dv libvpx.a vp9_idct_intrin_sse2.c.o - $AR dv libvpx.a vp9_mfqe.c.o - $AR dv libvpx.a vp9_postproc.c.o - $AR dv libvpx.a vp9_scan.c.o - $AR dv libvpx.a vp9_common_data.c.o - $AR dv libvpx.a vp9_reconintra.c.o - $AR dv libvpx.a vp9_reconinter.c.o - $AR dv libvpx.a vp9_quant_common.c.o - $AR dv libvpx.a vp9_mvref_common.c.o - $AR dv libvpx.a vp9_thread_common.c.o - $AR dv libvpx.a vp9_loopfilter.c.o - $AR dv libvpx.a vp9_tile_common.c.o - $AR dv libvpx.a vp9_seg_common.c.o - $AR dv libvpx.a vp9_scale.c.o - $AR dv libvpx.a vp9_rtcd.c.o - $AR dv libvpx.a vp9_pred_common.c.o - $AR dv libvpx.a vp9_filter.c.o - $AR dv libvpx.a vp9_idct.c.o - $AR dv libvpx.a vp9_frame_buffers.c.o - $AR dv libvpx.a vp9_entropymv.c.o - $AR dv libvpx.a vp9_entropymode.c.o - $AR dv libvpx.a vp9_entropy.c.o - $AR dv libvpx.a vp9_blockd.c.o - $AR dv libvpx.a vp9_alloccommon.c.o - $AR dv libvpx.a vp9_iface_common.c.o - $AR dv libvpx.a threading.c.o - $AR dv libvpx.a onyxd_if.c.o - $AR dv libvpx.a detokenize.c.o - $AR dv libvpx.a decodeframe.c.o - $AR dv libvpx.a decodemv.c.o - $AR dv libvpx.a dboolhuff.c.o - $AR dv libvpx.a vp8_dx_iface.c.o - $AR dv libvpx.a vp8_enc_stubs_sse2.c.o - $AR dv libvpx.a denoising_sse2.c.o - $AR dv libvpx.a vp8_quantize_sse2.c.o - $AR dv libvpx.a mr_dissim.c.o - $AR dv libvpx.a treewriter.c.o - $AR dv libvpx.a tokenize.c.o - $AR dv libvpx.a vp8_skin_detection.c.o - $AR dv libvpx.a segmentation.c.o - $AR dv libvpx.a rdopt.c.o - $AR dv libvpx.a ratectrl.c.o - $AR dv libvpx.a vp8_quantize.c.o - $AR dv libvpx.a picklpf.c.o - $AR dv libvpx.a pickinter.c.o - $AR dv libvpx.a onyx_if.c.o - $AR dv libvpx.a modecosts.c.o - $AR dv libvpx.a mcomp.c.o - $AR dv libvpx.a lookahead.c.o - $AR dv libvpx.a denoising.c.o - $AR dv libvpx.a ethreading.c.o - $AR dv libvpx.a encodemv.c.o - $AR dv libvpx.a encodemb.c.o - $AR dv libvpx.a encodeintra.c.o - $AR dv libvpx.a encodeframe.c.o - $AR dv libvpx.a boolhuff.c.o - $AR dv libvpx.a bitstream.c.o - $AR dv libvpx.a vp8_cx_iface.c.o - $AR dv libvpx.a bilinear_filter_sse2.c.o - $AR dv libvpx.a idct_blk_sse2.c.o - $AR dv libvpx.a idct_blk_mmx.c.o - $AR dv libvpx.a postproc.c.o - $AR dv libvpx.a mfqe.c.o - $AR dv libvpx.a loopfilter_x86.c.o - $AR dv libvpx.a vp8_asm_stubs.c.o - $AR dv libvpx.a treecoder.c.o - $AR dv libvpx.a setupintrarecon.c.o - $AR dv libvpx.a reconintra4x4.c.o - $AR dv libvpx.a reconintra.c.o - $AR dv libvpx.a reconinter.c.o - $AR dv libvpx.a quant_common.c.o - $AR dv libvpx.a modecont.c.o - $AR dv libvpx.a mbpitch.c.o - $AR dv libvpx.a vp8_loopfilter.c.o - $AR dv libvpx.a rtcd.c.o - $AR dv libvpx.a idctllm.c.o - $AR dv libvpx.a systemdependent.c.o - $AR dv libvpx.a findnearmv.c.o - $AR dv libvpx.a filter.c.o - $AR dv libvpx.a extend.c.o - $AR dv libvpx.a entropymv.c.o - $AR dv libvpx.a entropymode.c.o - $AR dv libvpx.a entropy.c.o - $AR dv libvpx.a blockd.c.o - $AR dv libvpx.a alloccommon.c.o - $AR dv libvpx.a vpx_thread.c.o - $AR dv libvpx.a vpx_dsp_rtcd.c.o - $AR dv libvpx.a highbd_variance_sse2.c.o - $AR dv libvpx.a variance_sse2.c.o - $AR dv libvpx.a avg_pred_sse2.c.o - $AR dv libvpx.a variance.c.o - $AR dv libvpx.a sum_squares_sse2.c.o - $AR dv libvpx.a subtract.c.o - $AR dv libvpx.a sad.c.o - $AR dv libvpx.a skin_detection.c.o - $AR dv libvpx.a avg_intrin_sse2.c.o - $AR dv libvpx.a avg.c.o - $AR dv libvpx.a highbd_quantize_intrin_sse2.c.o - $AR dv libvpx.a quantize_sse2.c.o - $AR dv libvpx.a quantize.c.o - $AR dv libvpx.a highbd_idct32x32_add_sse2.c.o - $AR dv libvpx.a highbd_idct16x16_add_sse2.c.o - $AR dv libvpx.a highbd_idct8x8_add_sse2.c.o - $AR dv libvpx.a highbd_idct4x4_add_sse2.c.o - $AR dv libvpx.a inv_txfm_sse2.c.o - $AR dv libvpx.a inv_txfm.c.o - $AR dv libvpx.a fwd_txfm_sse2.c.o - $AR dv libvpx.a fwd_txfm.c.o - $AR dv libvpx.a highbd_loopfilter_sse2.c.o - $AR dv libvpx.a loopfilter_sse2.c.o - $AR dv libvpx.a vpx_subpixel_4t_intrin_sse2.c.o - $AR dv libvpx.a vpx_convolve.c.o - $AR dv libvpx.a post_proc_sse2.c.o - $AR dv libvpx.a deblock.c.o - $AR dv libvpx.a add_noise.c.o - $AR dv libvpx.a highbd_intrapred_intrin_sse2.c.o - $AR dv libvpx.a intrapred.c.o - $AR dv libvpx.a bitreader_buffer.c.o - $AR dv libvpx.a bitreader.c.o - $AR dv libvpx.a psnr.c.o - $AR dv libvpx.a bitwriter_buffer.c.o - $AR dv libvpx.a bitwriter.c.o - $AR dv libvpx.a prob.c.o - $AR dv libvpx.a vpx_scale_rtcd.c.o - $AR dv libvpx.a gen_scalers.c.o - $AR dv libvpx.a yv12extend.c.o - $AR dv libvpx.a yv12config.c.o - $AR dv libvpx.a vpx_scale.c.o - $AR dv libvpx.a vpx_mem.c.o - $AR dv libvpx.a vpx_image.c.o - $AR dv libvpx.a vpx_codec.c.o - $AR dv libvpx.a vpx_encoder.c.o - $AR dv libvpx.a vpx_decoder.c.o - - popd -} - function setCurrentPlatform { CURRENT_PLATFORM="$(uname -s)" @@ -479,13 +109,12 @@ cd libvpx LLVM_PREFIX="${NDK}/toolchains/llvm/prebuilt/linux-x86_64" LLVM_BIN="${LLVM_PREFIX}/bin" VERSION="4.9" +ANDROID_API=21 function build { for arg in "$@"; do case "${arg}" in x86_64) - ANDROID_API=21 - ARCH=x86_64 ARCH_NAME=x86_64 PREBUILT_ARCH=x86_64 @@ -495,15 +124,10 @@ function build { OPTIMIZE_CFLAGS="-O3 -march=x86-64 -mtune=intel -msse4.2 -mpopcnt -m64 -fPIC" TARGET="x86_64-android-gcc" PREFIX=./build/$CPU + CPU_DETECT="--enable-runtime-cpu-detect" build_one - cutX8664 - cp $PREFIX/lib/libvpx.a ../third_party/libvpx/source/libvpx/vpx_dsp/x86/libvpx_x86_64_yasm.a ;; x86) - # fails with but should be 16? - #ANDROID_API=16 - ANDROID_API=21 - ARCH=x86 ARCH_NAME=i686 PREBUILT_ARCH=x86 @@ -513,9 +137,34 @@ function build { OPTIMIZE_CFLAGS="-O3 -march=i686 -mtune=intel -msse3 -mfpmath=sse -m32 -fPIC" TARGET="x86-android-gcc" PREFIX=./build/$CPU + CPU_DETECT="--enable-runtime-cpu-detect" + build_one + ;; + arm64) + ARCH=arm64 + ARCH_NAME=aarch64 + PREBUILT_ARCH=aarch64 + CLANG_PREFIX=aarch64 + BIN_MIDDLE=android + CPU=arm64-v8a + OPTIMIZE_CFLAGS="-O3 -march=armv8-a" + TARGET="arm64-android-gcc" + PREFIX=./build/$CPU + CPU_DETECT="--disable-runtime-cpu-detect" + build_one + ;; + arm) + ARCH=arm + ARCH_NAME=arm + PREBUILT_ARCH=arm + CLANG_PREFIX=armv7a + BIN_MIDDLE=androideabi + CPU=armeabi-v7a + OPTIMIZE_CFLAGS="-Os -march=armv7-a -mfloat-abi=softfp -mfpu=neon -mtune=cortex-a8 -mthumb -D__thumb__" + TARGET="armv7-android-gcc --enable-neon --disable-neon-asm" + PREFIX=./build/$CPU + CPU_DETECT="--disable-runtime-cpu-detect" build_one - cutX86 - cp $PREFIX/lib/libvpx.a ../third_party/libvpx/source/libvpx/vpx_dsp/x86/libvpx_x86_yasm.a ;; *) ;; @@ -524,7 +173,7 @@ function build { } if (( $# == 0 )); then - build x86_64 x86 + build x86_64 x86 arm arm64 else build $@ fi diff --git a/TMessagesProj/jni/patch_ffmpeg.sh b/TMessagesProj/jni/patch_ffmpeg.sh index d895bdfd8..f2882690c 100755 --- a/TMessagesProj/jni/patch_ffmpeg.sh +++ b/TMessagesProj/jni/patch_ffmpeg.sh @@ -5,6 +5,10 @@ set -e patch -d ffmpeg -p1 < patches/ffmpeg/0001-compilation-magic.patch patch -d ffmpeg -p1 < patches/ffmpeg/0002-compilation-magic-2.patch +function cp { + install -D $@ +} + cp ffmpeg/libavformat/dv.h ffmpeg/build/arm64-v8a/include/libavformat/dv.h cp ffmpeg/libavformat/isom.h ffmpeg/build/arm64-v8a/include/libavformat/isom.h cp ffmpeg/libavformat/dv.h ffmpeg/build/armeabi-v7a/include/libavformat/dv.h