Warning, /graphics/krita/3rdparty/ext_ffmpeg/CMakeLists.txt is written in an unsupported language. File is not indexed.

0001 SET(PREFIX_ext_ffmpeg "${EXTPREFIX}")
0002 
0003 # ======================== AUDIO ===========================
0004 
0005 ExternalProject_Add(
0006     ext_libogg
0007     DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
0008     URL http://downloads.xiph.org/releases/ogg/libogg-1.3.5.tar.gz
0009     URL_HASH SHA256=0eb4b4b9420a0f51db142ba3f9c64b333f826532dc0f48c6410ae51f4799b664
0010 
0011     PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/0001-libogg-Fix-library-filename-on-Windows.patch
0012 
0013     CMAKE_ARGS ${LIBOGG_EXTRA_CMAKE_ARGS} -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=${PREFIX_ext_ffmpeg} -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} ${GLOBAL_PROFILE}
0014 
0015     UPDATE_COMMAND ""
0016 )
0017 
0018 ExternalProject_Add(
0019     ext_libvorbis
0020     DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
0021     URL http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.7.tar.xz
0022     URL_HASH SHA256=b33cc4934322bcbf6efcbacf49e3ca01aadbea4114ec9589d1b1e9d20f72954b
0023 
0024     PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/0001-libvorbis-Fix-empty-LIBRARY-tag-in-.def-files.patch
0025 
0026     CMAKE_ARGS ${LIBVORBIS_EXTRA_CMAKE_ARGS} -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=${PREFIX_ext_ffmpeg} -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} ${GLOBAL_PROFILE}
0027 
0028     UPDATE_COMMAND ""
0029 
0030     DEPENDS ${OGG_DEP}
0031 )
0032 
0033 ExternalProject_Add(
0034     ext_libtheora_meson
0035     DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
0036     URL https://wrapdb.mesonbuild.com/v2/theora_1.1.1-4/get_patch
0037     URL_HASH SHA256=210af99fbc5a1b34d0f32270c25ecfb6fae7e76c1ae9dc6971b063317c97a826
0038 
0039     DOWNLOAD_NAME "theora_1.1.1-4_patch.zip"
0040 
0041     BUILD_COMMAND ""
0042     CONFIGURE_COMMAND ""
0043     INSTALL_COMMAND ""
0044     UPDATE_COMMAND ""
0045 
0046     SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/theora_meson"
0047 )
0048 
0049 kis_ExternalProject_Add_with_separate_builds_apple(
0050     ext_libtheora
0051     MESON
0052 
0053     DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
0054     GIT_REPOSITORY https://gitlab.xiph.org/xiph/theora.git
0055     # gitlab-ci: Add scons build. Latest commit as of Nov 26, 2022
0056     GIT_TAG 7180717276af1ebc7da15c83162d6c5d6203aabf
0057 
0058     PATCH_COMMAND ${CMAKE_COMMAND} -E echo Deploying Meson wrap
0059         COMMAND ${CMAKE_COMMAND} -E copy_directory 
0060             ${CMAKE_CURRENT_BINARY_DIR}/theora_meson
0061             <SOURCE_DIR>
0062         COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/0010-theora-Update-to-1.2.0.patch
0063         COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/0011-theora-Add-Arm-support.patch
0064         COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/0001-libtheora-Fix-build-on-android-x86.patch
0065 
0066     CONFIGURE_ARGS --prefix=${PREFIX_ext_ffmpeg}
0067         -Ddoc=disabled
0068         -Dspec=disabled
0069         ${EXTRA_MESON_FLAGS}
0070 
0071     UPDATE_COMMAND ""
0072 
0073     DEPENDS ${MESON_DEP} ${PKG_CONFIG_DEP} ${OGG_DEP} ext_png ext_libvorbis ext_libtheora_meson
0074 )
0075 
0076 
0077 ExternalProject_Add(
0078     ext_flac
0079     DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
0080     # the official .tar.xz cannot be unpacked by CMake on macOS due to usage
0081     # of UTF-8 internationalized filenames in
0082     # test/flac-to-flac-metadata-test-files.
0083     GIT_REPOSITORY https://github.com/xiph/flac.git
0084     GIT_TAG 1.4.2
0085 
0086     # Emmet: if you need metaflac, please add:
0087     # -DIconv_IS_BUILT_IN=TRUE
0088     # -DBUILD_PROGRAMS=FALSE
0089     # and add ${ICONV_DEP} to DEPENDS.
0090     # otherwise CMake's FindIconv gets confused due to libiconv having
0091     # its headers in the include path
0092 
0093     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${PREFIX_ext_ffmpeg}
0094         -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE}
0095         -DBUILD_SHARED_LIBS=TRUE
0096         -DBUILD_PROGRAMS=FALSE
0097         -DBUILD_EXAMPLES=FALSE
0098         -DBUILD_TESTING=FALSE
0099         -DBUILD_DOCS=FALSE
0100         -DINSTALL_MANPAGES=FALSE
0101         ${GLOBAL_PROFILE}
0102 
0103     UPDATE_COMMAND ""
0104 
0105     DEPENDS ${OGG_DEP}
0106 )
0107 
0108 ExternalProject_Add(
0109     ext_opus
0110     DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
0111     # Official tarball has a missing opus_buildtype.cmake
0112     # The Git tag is complete
0113     GIT_REPOSITORY https://gitlab.xiph.org/xiph/opus.git
0114     GIT_TAG v1.3.1
0115 
0116     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${PREFIX_ext_ffmpeg}
0117         -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE}
0118         -DBUILD_SHARED_LIBS=TRUE
0119         -DOPUS_STACK_PROTECTOR=OFF
0120         ${GLOBAL_PROFILE}
0121 
0122     UPDATE_COMMAND ""
0123 )
0124 
0125 # ======================== VIDEO ===========================
0126 
0127 kis_ExternalProject_Add_with_separate_builds_apple(
0128     ext_libopenh264
0129     MESON
0130 
0131     DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
0132     URL https://github.com/cisco/openh264/archive/v2.3.1.tar.gz
0133     URL_HASH SHA256=453afa66dacb560bc5fd0468aabee90c483741571bca820a39a1c07f0362dc32
0134 
0135     PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/0001-libopenh264-Enable-PIC-for-the-assembler-code-on-x86.patch
0136 
0137     CONFIGURE_ARGS --prefix=${PREFIX_ext_ffmpeg}
0138             -Dtests=disabled
0139             ${EXTRA_MESON_FLAGS}
0140 
0141     DEPENDS ext_nasm ${MESON_DEP} ${PKG_CONFIG_DEP}
0142 )
0143 
0144 
0145 ExternalProject_Add(
0146     ext_libmp3lame_meson
0147     DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
0148     URL https://wrapdb.mesonbuild.com/v2/lame_3.100-9/get_patch
0149     URL_HASH SHA256=bedda639a621b2046fb04110a51870d6c9640f2f4282b5d877bc452e9943c22e
0150 
0151     DOWNLOAD_NAME "lame_3.100-9_patch.zip"
0152 
0153     BUILD_COMMAND ""
0154     CONFIGURE_COMMAND ""
0155     INSTALL_COMMAND ""
0156     UPDATE_COMMAND ""
0157 
0158     SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/lame_meson"
0159 )
0160 
0161 kis_ExternalProject_Add_with_separate_builds_apple(
0162     ext_libmp3lame
0163     MESON
0164 
0165     URL https://sourceforge.net/projects/lame/files/lame/3.100/lame-3.100.tar.gz
0166     URL_HASH SHA256=ddfe36cab873794038ae2c1210557ad34857a4b6bdc515785d1da9e175b1da1e
0167 
0168     PATCH_COMMAND ${CMAKE_COMMAND} -E echo Deploying Meson wrap
0169         COMMAND ${CMAKE_COMMAND} -E copy_directory 
0170             ${CMAKE_CURRENT_BINARY_DIR}/lame_meson
0171             <SOURCE_DIR>
0172         COMMAND ${CMAKE_COMMAND} -E echo Deploying patches
0173         COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/0002-lame-Install-pkg-config-file.patch
0174 
0175     CONFIGURE_ARGS --prefix=${PREFIX_ext_ffmpeg}
0176             ${EXTRA_MESON_FLAGS}
0177 
0178     DEPENDS ${MESON_DEP} ${PKG_CONFIG_DEP} ext_libmp3lame_meson
0179 )
0180 
0181 if (ANDROID)
0182     ExternalProject_Add(
0183         ext_sdl2
0184         DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
0185         GIT_REPOSITORY https://github.com/sh-zam/SDL-android-glue.git
0186         GIT_TAG 8babf290ece99a58a5354d52775bf79063cf7cf5
0187 
0188         CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${PREFIX_ext_ffmpeg}
0189             -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE}
0190             -DBUILD_SHARED_LIBS=TRUE -DSDL_ANDROID_AUDIO_STRIPPED=ON -DSDL_HAPTIC=OFF
0191             -DSDL_JOYSTICK=OFF -DSDL_VIDEO=OFF -DSDL_SENSOR=OFF -DSDL_MISC=OFF -DSDL_POWER=OFF
0192             -DSDL_LOCALE=OFF -DSDL_FILESYSTEM=OFF -DINSTALL_JARS_PATH=${PREFIX_ext_ffmpeg}/jar
0193             -DANDROID_SDK=${ANDROID_SDK_ROOT} -DANDROID_JAVA_PLATFORM_API=${ANDROID_SDK_COMPILE_API}
0194             ${GLOBAL_PROFILE}
0195 
0196 
0197         UPDATE_COMMAND ""
0198     )
0199 else()
0200     ExternalProject_Add(
0201         ext_sdl2
0202         DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
0203         URL https://github.com/libsdl-org/SDL/releases/download/release-2.26.0/SDL2-2.26.0.tar.gz
0204         URL_HASH SHA256=8000d7169febce93c84b6bdf376631f8179132fd69f7015d4dadb8b9c2bdb295
0205 
0206         CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${PREFIX_ext_ffmpeg}
0207             -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE}
0208             -DBUILD_SHARED_LIBS=TRUE
0209             ${GLOBAL_PROFILE}
0210 
0211         UPDATE_COMMAND ""
0212     )
0213 endif()
0214 
0215 
0216 if (ANDROID AND ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i686")
0217     set (_extra_meson_flags_orig  ${EXTRA_MESON_FLAGS})
0218     set (EXTRA_MESON_FLAGS -Dmultithread=disabled "${EXTRA_MESON_FLAGS}")
0219 endif()
0220 
0221 kis_ExternalProject_Add_with_separate_builds_apple(
0222     ext_vpx
0223     MESON
0224 
0225     DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
0226     GIT_REPOSITORY https://github.com/dimula73/libvpx.git
0227     GIT_TAG meson
0228 
0229     WORKING_DIRECTORY <BINARY_DIR>
0230 
0231     CONFIGURE_ARGS --prefix=${PREFIX_ext_ffmpeg}
0232             -Ddefault_library=shared
0233             -Dunit_tests=disabled
0234             -Dtools=disabled
0235             -Ddocs=disabled
0236             ${EXTRA_MESON_FLAGS}
0237 
0238     UPDATE_COMMAND ""
0239 
0240     DEPENDS ext_nasm ${MESON_DEP} ${PKG_CONFIG_DEP}
0241 )
0242 
0243 if (ANDROID AND ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i686")
0244     set (EXTRA_MESON_FLAGS ${_extra_meson_flags_orig})
0245     set(DISABLE_ASM_ON_ANDROID_x86_32 "-Dasm=disabled" "-Dinline_asm=disabled")
0246 endif()
0247 # IMPORTANT:
0248 # OpenSUSE's list of whitelisted encoders: https://build.opensuse.org/package/view_file/openSUSE:Factory/ffmpeg-5/enable_encoders
0249 # OpenSUSE's list of whitelisted decoders: https://build.opensuse.org/package/view_file/openSUSE:Factory/ffmpeg-5/enable_decoders
0250 # Above are the lists of codecs that have been approved for use by OpenSUSE's legal department.
0251 # Anything not enabled (missing or commented out) in these lists is considered unsafe and should NOT be used!
0252 # While unlikely, it's possible that these lists could change, so it's worth occasionally cross-referencing.
0253 
0254 if (NOT MSVC)
0255     set(_stack_guard_flag "-Denable-ssp=enabled")
0256 endif() 
0257 
0258 kis_ExternalProject_Add_with_separate_builds_apple(
0259     ext_ffmpeg
0260     MESON
0261     DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
0262     GIT_REPOSITORY https://gitlab.freedesktop.org/gstreamer/meson-ports/ffmpeg.git
0263     GIT_TAG meson-4.4
0264 
0265     # Workaround https://github.com/mesonbuild/meson/issues/11113
0266     # See https://gitlab.freedesktop.org/gstreamer/meson-ports/ffmpeg/-/issues/31
0267     PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/0001-meson-Fix-library-detection-in-prefixed-builds.patch
0268           COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/0001-ffmpeg-Add-an-option-to-disable-UB-in-av_uninit.patch
0269           COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/0002-ffmpeg-Fix-crashes-in-ff_seek_frame_binary-if-built-with-la.patch
0270           COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/0003-ffmpeg-Add-options-for-SSP-and-CFGuard.patch
0271           COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/0001-Disable-ebp_available-on-android.patch
0272           COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/0001-libavutil-Don-t-disable-PIC-on-x86_32.patch
0273           COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/0001-ffmpeg-Be-more-forceful-when-setting-PIC-on-x86_32.patch
0274           COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/0001-Copy-over-some-macros-from-libavutil-version.h.patch
0275 
0276     CONFIGURE_ARGS --prefix=${PREFIX_ext_ffmpeg}
0277             --libdir=lib
0278             -Dno_uninit_ub=true
0279             ${_stack_guard_flag}
0280             -Denable-cfguard=disabled # TODO: change to 'auto' when Krita enabled cfguard internally
0281             -Dbuildtype=$<IF:$<CONFIG:Debug>,debug,debugoptimized>
0282             -Ddefault_library=shared
0283             ${DISABLE_ASM_ON_ANDROID_x86_32}
0284             -Dcli=enabled
0285             -Dtests=disabled
0286             -Dffprobe=enabled
0287             -Dffplay=disabled
0288             -Davdevice=disabled
0289             -Davcodec=enabled
0290             -Davformat=enabled
0291             -Davutil=enabled
0292             -Davresample=enabled
0293             -Dswresample=enabled
0294             -Dswscale=enabled
0295             -Dpostproc=disabled
0296             -Dsdl2=enabled
0297             -Dlibaom=enabled
0298             -Dzlib=enabled
0299             -Dimage2_demuxer=enabled
0300             -Dimage2_alias_pix_demuxer=enabled
0301             -Dimage2_brender_pix_demuxer=enabled
0302             # ===================== Container Formats
0303             -Dwebm_muxer=enabled
0304             -Dmatroska_muxer=enabled
0305             -Dogg_muxer=enabled
0306             -Dapng_muxer=enabled
0307             # ===================== Image Formats
0308             -Dlibwebp=enabled
0309             -Dpng_encoder=enabled
0310             -Dpng_decoder=enabled
0311             -Dapng_encoder=enabled
0312             -Dapng_decoder=enabled
0313             # ===================== Video Codecs
0314             -Dlibaom_av1_encoder=enabled
0315             -Dlibvpx_vp9_encoder=auto
0316             -Dlibvpx_vp8_encoder=auto
0317             -Dlibopenh264=enabled
0318             -Dlibtheora=enabled
0319             # ===================== Audio Codecs
0320             -Dflac_encoder=enabled
0321             -Daac_encoder=enabled
0322             -Dlibmp3lame=enabled
0323             -Dlibopus=enabled
0324             -Dlibvorbis=enabled
0325             ${EXTRA_MESON_FLAGS}
0326 
0327     UPDATE_COMMAND ""
0328 
0329     DEPENDS ${FLAC_DEP} ${OPUS_DEP} ${SDL_DEP} ${VPX_DEP} ext_libvorbis ext_libtheora ext_libopenh264 ext_libmp3lame ext_libaom ext_webp ext_png ext_jpeg ${MESON_DEP} ${PKG_CONFIG_DEP}
0330 )