diff --git a/scripts/ffmpeg/build.sh b/scripts/ffmpeg/build.sh index 63a21c4..2cead38 100755 --- a/scripts/ffmpeg/build.sh +++ b/scripts/ffmpeg/build.sh @@ -39,11 +39,110 @@ DEP_LD_FLAGS="-L${BUILD_DIR_EXTERNAL}/${ANDROID_ABI}/lib $FFMPEG_EXTRA_LD_FLAGS" --nm=${FAM_NM} \ --ranlib=${FAM_RANLIB} \ --strip=${FAM_STRIP} \ - --extra-cflags="-O3 -fPIC $DEP_CFLAGS" \ + --extra-cflags="-O3 -fPIC -mcmodel=large $DEP_CFLAGS" \ --extra-ldflags="$DEP_LD_FLAGS" \ - --enable-shared \ - --disable-static \ + --disable-shared \ + --enable-static \ --disable-vulkan \ + --disable-symver \ + --disable-doc \ + --disable-htmlpages \ + --disable-manpages \ + --disable-podpages \ + --disable-txtpages \ + --disable-ffplay \ + --disable-ffmpeg \ + --disable-ffprobe \ + --disable-avdevice \ + --disable-bsfs \ + --disable-devices \ + --disable-protocols \ + --disable-postproc \ + --enable-protocol=file \ + --enable-protocol=concat \ + --disable-parsers \ + --disable-demuxers \ + --enable-demuxer=mov \ + --enable-demuxer=mp3 \ + --enable-demuxer=image2 \ + --enable-demuxer=gif \ + --enable-demuxer=wav \ + --enable-demuxer=asf \ + --enable-demuxer=flv \ + --enable-demuxer=avi \ + --enable-demuxer=webm_dash_manifest \ + --enable-demuxer=matroska \ + --enable-demuxer=mpegts \ + --disable-decoders \ + --enable-decoder=aac \ + --enable-decoder=png \ + --enable-decoder=h264 \ + --enable-decoder=mp3 \ + --enable-decoder=mjpeg \ + --enable-decoder=mpeg4 \ + --enable-decoder=gif \ + --enable-decoder=pcm_s16le \ + --enable-decoder=hevc \ + --enable-decoder=msmpeg4v1 \ + --enable-decoder=msmpeg4v2 \ + --enable-decoder=msmpeg4v3 \ + --enable-decoder=wmav1 \ + --enable-decoder=wmav2 \ + --enable-decoder=flv \ + --enable-decoder=adpcm_swf \ + --enable-decoder=ac3 \ + --enable-decoder=vp8 \ + --enable-decoder=vorbis \ + --enable-decoder=mpeg2video \ + --enable-decoder=mp2 \ + --enable-decoder=indeo4 \ + --enable-decoder=amrnb \ + --disable-muxers \ + --enable-muxer=mov \ + --enable-muxer=mp4 \ + --enable-muxer=image2 \ + --enable-muxer=mp3 \ + --enable-muxer=ipod \ + --enable-muxer=gif \ + --disable-encoders \ + --enable-encoder=aac \ + --enable-encoder=png \ + --enable-encoder=mjpeg \ + --enable-encoder=gif \ + --enable-swscale \ + --disable-filters \ + --enable-filter=crop \ + --enable-filter=scale \ + --enable-filter=afade \ + --enable-filter=atempo \ + --enable-filter=copy \ + --enable-filter=aformat \ + --enable-filter=overlay \ + --enable-filter=vflip \ + --enable-filter=hflip \ + --enable-filter=transpose \ + --enable-filter=volume \ + --enable-filter=rotate \ + --enable-filter=apad \ + --enable-filter=amerge \ + --enable-filter=aresample \ + --enable-filter=setpts \ + --enable-filter=fps \ + --enable-filter=palettegen \ + --enable-filter=paletteuse \ + --enable-filter=trim \ + --enable-filter=null \ + --enable-filter=overlay \ + --enable-filter=format \ + --enable-filter=atrim \ + --enable-filter=split \ + --enable-filter=amix \ + --enable-filter=anull \ + --enable-filter=adelay \ + --enable-zlib \ + --enable-jni \ + --enable-nonfree \ + --enable-mediacodec \ --pkg-config=${PKG_CONFIG_EXECUTABLE} \ ${EXTRA_BUILD_CONFIGURATION_FLAGS} \ $ADDITIONAL_COMPONENTS || exit 1 @@ -51,3 +150,187 @@ DEP_LD_FLAGS="-L${BUILD_DIR_EXTERNAL}/${ANDROID_ABI}/lib $FFMPEG_EXTRA_LD_FLAGS" ${MAKE_EXECUTABLE} clean ${MAKE_EXECUTABLE} -j${HOST_NPROC} ${MAKE_EXECUTABLE} install + +export STATIC_LIB_DIR=${BUILD_DIR_FFMPEG}/${ANDROID_ABI}/lib +echo STATIC_LIB_DIR=${STATIC_LIB_DIR} +echo INSTALL_DIR=${INSTALL_DIR} +echo FAM_CC=${FAM_CC} +echo SYSROOT_PATH=${SYSROOT_PATH} +${FAM_CC} --sysroot=${SYSROOT_PATH} \ + -shared -o ${STATIC_LIB_DIR}/libmerged.so \ + -Wl,--whole-archive \ + ${STATIC_LIB_DIR}/libavutil.a \ + ${STATIC_LIB_DIR}/libswscale.a \ + ${STATIC_LIB_DIR}/libswresample.a \ + ${STATIC_LIB_DIR}/libavcodec.a \ + ${STATIC_LIB_DIR}/libavformat.a \ + ${STATIC_LIB_DIR}/libavfilter.a \ + -Wl,--no-whole-archive -lm -lz #!/usr/bin/env bash + +case $ANDROID_ABI in + x86) + # Disabling assembler optimizations, because they have text relocations + EXTRA_BUILD_CONFIGURATION_FLAGS="$EXTRA_BUILD_CONFIGURATION_FLAGS --disable-asm" + ;; + x86_64) + EXTRA_BUILD_CONFIGURATION_FLAGS="$EXTRA_BUILD_CONFIGURATION_FLAGS --x86asmexe=${FAM_YASM}" + ;; +esac + +if [ "$FFMPEG_GPL_ENABLED" = true ] ; then + EXTRA_BUILD_CONFIGURATION_FLAGS="$EXTRA_BUILD_CONFIGURATION_FLAGS --enable-gpl" +fi + +# Preparing flags for enabling requested libraries +ADDITIONAL_COMPONENTS= +for LIBARY_NAME in ${FFMPEG_EXTERNAL_LIBRARIES[@]} +do + ADDITIONAL_COMPONENTS+=" --enable-$LIBARY_NAME" +done + +# Referencing dependencies without pkgconfig +DEP_CFLAGS="-I${BUILD_DIR_EXTERNAL}/${ANDROID_ABI}/include" +DEP_LD_FLAGS="-L${BUILD_DIR_EXTERNAL}/${ANDROID_ABI}/lib $FFMPEG_EXTRA_LD_FLAGS" + +./configure \ + --prefix=${BUILD_DIR_FFMPEG}/${ANDROID_ABI} \ + --enable-cross-compile \ + --target-os=android \ + --arch=${TARGET_TRIPLE_MACHINE_ARCH} \ + --sysroot=${SYSROOT_PATH} \ + --cc=${FAM_CC} \ + --cxx=${FAM_CXX} \ + --ld=${FAM_LD} \ + --ar=${FAM_AR} \ + --as=${FAM_CC} \ + --nm=${FAM_NM} \ + --ranlib=${FAM_RANLIB} \ + --strip=${FAM_STRIP} \ + --extra-cflags="-O3 -fPIC -Wl,-z,notext $DEP_CFLAGS" \ + --extra-ldflags="$DEP_LD_FLAGS" \ + --disable-shared \ + --enable-static \ + --disable-vulkan \ + --disable-symver \ + --disable-doc \ + --disable-htmlpages \ + --disable-manpages \ + --disable-podpages \ + --disable-txtpages \ + --disable-ffplay \ + --disable-ffmpeg \ + --disable-ffprobe \ + --disable-avdevice \ + --disable-bsfs \ + --disable-devices \ + --disable-protocols \ + --disable-postproc \ + --enable-protocol=file \ + --enable-protocol=concat \ + --disable-parsers \ + --disable-demuxers \ + --enable-demuxer=mov \ + --enable-demuxer=mp3 \ + --enable-demuxer=image2 \ + --enable-demuxer=gif \ + --enable-demuxer=wav \ + --enable-demuxer=asf \ + --enable-demuxer=flv \ + --enable-demuxer=avi \ + --enable-demuxer=webm_dash_manifest \ + --enable-demuxer=matroska \ + --enable-demuxer=mpegts \ + --disable-decoders \ + --enable-decoder=aac \ + --enable-decoder=png \ + --enable-decoder=h264 \ + --enable-decoder=mp3 \ + --enable-decoder=mjpeg \ + --enable-decoder=mpeg4 \ + --enable-decoder=gif \ + --enable-decoder=pcm_s16le \ + --enable-decoder=hevc \ + --enable-decoder=msmpeg4v1 \ + --enable-decoder=msmpeg4v2 \ + --enable-decoder=msmpeg4v3 \ + --enable-decoder=wmav1 \ + --enable-decoder=wmav2 \ + --enable-decoder=flv \ + --enable-decoder=adpcm_swf \ + --enable-decoder=ac3 \ + --enable-decoder=vp8 \ + --enable-decoder=vorbis \ + --enable-decoder=mpeg2video \ + --enable-decoder=mp2 \ + --enable-decoder=indeo4 \ + --enable-decoder=amrnb \ + --disable-muxers \ + --enable-muxer=mov \ + --enable-muxer=mp4 \ + --enable-muxer=image2 \ + --enable-muxer=mp3 \ + --enable-muxer=ipod \ + --enable-muxer=gif \ + --disable-encoders \ + --enable-encoder=aac \ + --enable-encoder=png \ + --enable-encoder=mjpeg \ + --enable-encoder=gif \ + --enable-swscale \ + --disable-filters \ + --enable-filter=crop \ + --enable-filter=scale \ + --enable-filter=afade \ + --enable-filter=atempo \ + --enable-filter=copy \ + --enable-filter=aformat \ + --enable-filter=overlay \ + --enable-filter=vflip \ + --enable-filter=hflip \ + --enable-filter=transpose \ + --enable-filter=volume \ + --enable-filter=rotate \ + --enable-filter=apad \ + --enable-filter=amerge \ + --enable-filter=aresample \ + --enable-filter=setpts \ + --enable-filter=fps \ + --enable-filter=palettegen \ + --enable-filter=paletteuse \ + --enable-filter=trim \ + --enable-filter=null \ + --enable-filter=overlay \ + --enable-filter=format \ + --enable-filter=atrim \ + --enable-filter=split \ + --enable-filter=amix \ + --enable-filter=anull \ + --enable-filter=adelay \ + --enable-zlib \ + --enable-jni \ + --enable-nonfree \ + --enable-mediacodec \ + --pkg-config=${PKG_CONFIG_EXECUTABLE} \ + ${EXTRA_BUILD_CONFIGURATION_FLAGS} \ + $ADDITIONAL_COMPONENTS || exit 1 + +${MAKE_EXECUTABLE} clean +${MAKE_EXECUTABLE} -j${HOST_NPROC} +${MAKE_EXECUTABLE} install + +export STATIC_LIB_DIR=${BUILD_DIR_FFMPEG}/${ANDROID_ABI}/lib +echo STATIC_LIB_DIR=${STATIC_LIB_DIR} +echo INSTALL_DIR=${INSTALL_DIR} +echo FAM_CC=${FAM_CC} +echo SYSROOT_PATH=${SYSROOT_PATH} +${FAM_CC} --sysroot=${SYSROOT_PATH} \ + -L${STATIC_LIB_DIR} \ + -shared -o ${STATIC_LIB_DIR}/libmerged.so \ + -Wl,--whole-archive \ + ${STATIC_LIB_DIR}/libavutil.a \ + ${STATIC_LIB_DIR}/libswscale.a \ + ${STATIC_LIB_DIR}/libswresample.a \ + ${STATIC_LIB_DIR}/libavcodec.a \ + ${STATIC_LIB_DIR}/libavformat.a \ + ${STATIC_LIB_DIR}/libavfilter.a \ + -Wl,--no-whole-archive -lm -lz