This is a refresh of our current FFmpeg 5.0.0 (unchanged) version with the following changes: * libvpx all platforms: enable SSE3/4/AVX/AVX2 instruction sets. libvpx has a proper CPUID check in place and will not call the faster kernels unless it is sure the CPU supports it. So we can safely enable this, this partially resolves T95743 (completely on Linux and macOS). * libvpx Windows - threading was disabled due to a shared dependency on libwinpthreads.dll which we prefer not to distribute. However when configure cannot find pthreads it will happily fall back on a win32 threads based emulation layer. This also resolves the final part of T95743. * libaom-av1 - new dependency required for D14920, this is a somewhat odd dependency, it's cmake based, but still needs the perl environment setup, so we have to setup the env and call cmake our selves for the configure, build and install commands. This dep has the same libwinpthreads issue as vpx on Windows, however since it's cmake based, it's easier to prevent cmake from detecting it. Differential Revision: https://developer.blender.org/D15399
151 lines
4.9 KiB
CMake
151 lines
4.9 KiB
CMake
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
set(FFMPEG_CFLAGS "-I${mingw_LIBDIR}/lame/include -I${mingw_LIBDIR}/openjpeg/include/ -I${mingw_LIBDIR}/ogg/include -I${mingw_LIBDIR}/vorbis/include -I${mingw_LIBDIR}/theora/include -I${mingw_LIBDIR}/opus/include -I${mingw_LIBDIR}/vpx/include -I${mingw_LIBDIR}/x264/include -I${mingw_LIBDIR}/xvidcore/include -I${mingw_LIBDIR}/zlib/include -I${mingw_LIBDIR}/aom/include")
|
|
set(FFMPEG_LDFLAGS "-L${mingw_LIBDIR}/lame/lib -L${mingw_LIBDIR}/openjpeg/lib -L${mingw_LIBDIR}/ogg/lib -L${mingw_LIBDIR}/vorbis/lib -L${mingw_LIBDIR}/theora/lib -L${mingw_LIBDIR}/opus/lib -L${mingw_LIBDIR}/vpx/lib -L${mingw_LIBDIR}/x264/lib -L${mingw_LIBDIR}/xvidcore/lib -L${mingw_LIBDIR}/zlib/lib -L${mingw_LIBDIR}/aom/lib")
|
|
set(FFMPEG_EXTRA_FLAGS --pkg-config-flags=--static --extra-cflags=${FFMPEG_CFLAGS} --extra-ldflags=${FFMPEG_LDFLAGS})
|
|
set(FFMPEG_ENV PKG_CONFIG_PATH=${mingw_LIBDIR}/openjpeg/lib/pkgconfig:${mingw_LIBDIR}/x264/lib/pkgconfig:${mingw_LIBDIR}/vorbis/lib/pkgconfig:${mingw_LIBDIR}/ogg/lib/pkgconfig:${mingw_LIBDIR}:${mingw_LIBDIR}/vpx/lib/pkgconfig:${mingw_LIBDIR}/theora/lib/pkgconfig:${mingw_LIBDIR}/openjpeg/lib/pkgconfig:${mingw_LIBDIR}/opus/lib/pkgconfig:${mingw_LIBDIR}/aom/lib/pkgconfig:)
|
|
|
|
if(WIN32)
|
|
set(FFMPEG_ENV set ${FFMPEG_ENV} &&)
|
|
set(FFMPEG_EXTRA_FLAGS
|
|
${FFMPEG_EXTRA_FLAGS}
|
|
--disable-static
|
|
--enable-shared
|
|
--enable-w32threads
|
|
--disable-pthreads
|
|
--enable-libopenjpeg
|
|
--disable-mediafoundation
|
|
)
|
|
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "4")
|
|
set(FFMPEG_EXTRA_FLAGS
|
|
${FFMPEG_EXTRA_FLAGS}
|
|
--x86asmexe=yasm
|
|
)
|
|
endif()
|
|
else()
|
|
set(FFMPEG_EXTRA_FLAGS
|
|
${FFMPEG_EXTRA_FLAGS}
|
|
--enable-static
|
|
--disable-shared
|
|
--enable-libopenjpeg
|
|
)
|
|
endif()
|
|
|
|
if(APPLE)
|
|
set(FFMPEG_EXTRA_FLAGS
|
|
${FFMPEG_EXTRA_FLAGS}
|
|
--target-os=darwin
|
|
--x86asmexe=${LIBDIR}/nasm/bin/nasm
|
|
)
|
|
elseif(UNIX)
|
|
set(FFMPEG_EXTRA_FLAGS
|
|
${FFMPEG_EXTRA_FLAGS}
|
|
--x86asmexe=${LIBDIR}/nasm/bin/nasm
|
|
)
|
|
endif()
|
|
|
|
ExternalProject_Add(external_ffmpeg
|
|
URL file://${PACKAGE_DIR}/${FFMPEG_FILE}
|
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
|
URL_HASH ${FFMPEG_HASH_TYPE}=${FFMPEG_HASH}
|
|
# OpenJpeg is compiled with pthread support on Linux, which is all fine and is what we
|
|
# want for maximum runtime performance, but due to static nature of that library we
|
|
# need to force ffmpeg to link against pthread, otherwise test program used by autoconf
|
|
# will fail. This patch does that in a way that is compatible with multiple distributions.
|
|
PATCH_COMMAND ${PATCH_CMD} --verbose -p 1 -N -d ${BUILD_DIR}/ffmpeg/src/external_ffmpeg < ${PATCH_DIR}/ffmpeg.diff
|
|
PREFIX ${BUILD_DIR}/ffmpeg
|
|
CONFIGURE_COMMAND ${CONFIGURE_ENV_NO_PERL} &&
|
|
cd ${BUILD_DIR}/ffmpeg/src/external_ffmpeg/ &&
|
|
${FFMPEG_ENV} ${CONFIGURE_COMMAND_NO_TARGET} ${FFMPEG_EXTRA_FLAGS}
|
|
--disable-lzma
|
|
--disable-avfilter
|
|
--disable-vdpau
|
|
--disable-bzlib
|
|
--disable-libgsm
|
|
--disable-libspeex
|
|
--enable-libvpx
|
|
--enable-libopus
|
|
--prefix=${LIBDIR}/ffmpeg
|
|
--enable-libtheora
|
|
--enable-libvorbis
|
|
--enable-zlib
|
|
--enable-stripping
|
|
--enable-runtime-cpudetect
|
|
--disable-vaapi
|
|
--disable-nonfree
|
|
--enable-gpl
|
|
--disable-postproc
|
|
--enable-libmp3lame
|
|
--disable-librtmp
|
|
--enable-libx264
|
|
--enable-libxvid
|
|
--enable-libaom
|
|
--disable-libopencore-amrnb
|
|
--disable-libopencore-amrwb
|
|
--disable-libdc1394
|
|
--disable-version3
|
|
--disable-debug
|
|
--enable-optimizations
|
|
--enable-ffplay
|
|
--disable-openssl
|
|
--disable-securetransport
|
|
--disable-indev=avfoundation
|
|
--disable-indev=qtkit
|
|
--disable-sdl2
|
|
--disable-gnutls
|
|
--disable-videotoolbox
|
|
--disable-libxcb
|
|
--disable-xlib
|
|
--disable-audiotoolbox
|
|
--disable-cuvid
|
|
--disable-nvenc
|
|
--disable-indev=jack
|
|
--disable-indev=alsa
|
|
--disable-outdev=alsa
|
|
--disable-crystalhd
|
|
--disable-sndio
|
|
BUILD_COMMAND ${CONFIGURE_ENV_NO_PERL} && cd ${BUILD_DIR}/ffmpeg/src/external_ffmpeg/ && make -j${MAKE_THREADS}
|
|
INSTALL_COMMAND ${CONFIGURE_ENV_NO_PERL} && cd ${BUILD_DIR}/ffmpeg/src/external_ffmpeg/ && make install
|
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/ffmpeg ${DEFAULT_CMAKE_FLAGS}
|
|
INSTALL_DIR ${LIBDIR}/ffmpeg
|
|
)
|
|
|
|
if(MSVC)
|
|
set_target_properties(external_ffmpeg PROPERTIES FOLDER Mingw)
|
|
endif()
|
|
|
|
add_dependencies(
|
|
external_ffmpeg
|
|
external_zlib
|
|
external_openjpeg
|
|
external_xvidcore
|
|
external_x264
|
|
external_opus
|
|
external_vpx
|
|
external_theora
|
|
external_vorbis
|
|
external_ogg
|
|
external_lame
|
|
external_aom
|
|
)
|
|
if(WIN32)
|
|
add_dependencies(
|
|
external_ffmpeg
|
|
external_zlib_mingw
|
|
)
|
|
endif()
|
|
if(UNIX)
|
|
add_dependencies(
|
|
external_ffmpeg
|
|
external_nasm
|
|
)
|
|
endif()
|
|
|
|
if(BUILD_MODE STREQUAL Release AND WIN32)
|
|
ExternalProject_Add_Step(external_ffmpeg after_install
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/ffmpeg/include ${HARVEST_TARGET}/ffmpeg/include
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/ffmpeg/bin ${HARVEST_TARGET}/ffmpeg/lib
|
|
DEPENDEES install
|
|
)
|
|
endif()
|