diff --git a/media-libs/svt-av1/Manifest b/media-libs/svt-av1/Manifest index 5ca9a9a7e7d9b..8dcb73ac3ca06 100644 --- a/media-libs/svt-av1/Manifest +++ b/media-libs/svt-av1/Manifest @@ -2,3 +2,5 @@ DIST SVT-AV1-v2.1.2.tar.bz2 11764554 BLAKE2B ad9b7a732ce3991ddbe796e52db1559928c DIST SVT-AV1-v3.0.2.tar.bz2 10202794 BLAKE2B 29ccaa27e1c8e94e1cbe32922a5b17984d0979acf4be39556c0846e4493f00232db269d64315b0cedb94ef04f6928bb4ec295b0c977b70e47af55e6f5a998062 SHA512 dfe110011d0c249d3541c3950e96b8e1c6c3b5041cb7eee0f64a3414b8c7439bddac15e3de36305da89f05b418f2a54025fe2513c5377d2eefa4bd778ebbafb9 DIST SVT-AV1-v3.1.0.tar.bz2 10203101 BLAKE2B df479f1657383fe5585ea5b4299998e13ec56523da489186807f83a59f8365a903c424926986306f872427277cf8e7d61b6b536e3f908b96f25fa3c17b9a689a SHA512 e4195fd2ad16d218b9da9ac65a22749d922d3573764c944ffb935cf7a6af732ad9839bf81c3f060cce2ae6fb3c4c1b7bfd3ab280784605c81bd7a74179b89c7c DIST SVT-AV1-v3.1.2.tar.bz2 10203273 BLAKE2B 4a7e43e74e3cf76f920b46224a7ddb82dd9633de2af66c93094b06ec83948d76e6cca63df049e4b2af38de8372a1fabd5fbe8a8a92792e9408220991180ea903 SHA512 d23327cf348d576643d6385f756d9354ed93801c99bf63c4fb049902f4fd2b81c816cacdcab71dffb1cc330385c89c5abef67b8f81d2abd69a70f01a3e55b25a +DIST SVT-AV1-v4.0.1.tar.bz2 10225189 BLAKE2B 27219cf2e6d36b95955a730338a9257e69fb4d64d5dc941b5cf0e83ac568a0d6881ce9f254d953ae94174e5abe029be700d1f524044cec640a566c028a089078 SHA512 29ee892117c26b582f25089e528a4a10c9b7295c29e8559b42ebef5edf2dd7afb023ab5246671d86353cf5cbb8bda1b05ea58c29e9ebe44a49bdc603a00223f2 +DIST svt-av1-stefan_sif.y4m 38017846 BLAKE2B 4965ea26a877134b301fa13e0865fca03141e4f15f7ebdaed7556295a660a132cc46ec5888e981d7361311c9267442447cf2100ef46340db8d5b21b31007d57f SHA512 9c37404dcba369fe8f46398b9d571138beeed738f62d00fca2ea2469818f06b6ba0ad1489943e151a8d9b3791d712a019af4422de40e6a9d3319dbf9be3f4d55 diff --git a/media-libs/svt-av1/metadata.xml b/media-libs/svt-av1/metadata.xml index cc3d7275c7966..cb63c4f163ab8 100644 --- a/media-libs/svt-av1/metadata.xml +++ b/media-libs/svt-av1/metadata.xml @@ -7,4 +7,8 @@ AOMediaCodec/SVT-AV1 + + Optimize the build using Profile Guided Optimization (PGO) + Build SvtAv1EncApp + diff --git a/media-libs/svt-av1/svt-av1-4.0.1.ebuild b/media-libs/svt-av1/svt-av1-4.0.1.ebuild new file mode 100644 index 0000000000000..1a92d0f6fe680 --- /dev/null +++ b/media-libs/svt-av1/svt-av1-4.0.1.ebuild @@ -0,0 +1,115 @@ +# Copyright 2020-2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit cmake-multilib edo multiprocessing + +DESCRIPTION="Scalable Video Technology for AV1 (SVT-AV1 Encoder)" +HOMEPAGE="https://gitlab.com/AOMediaCodec/SVT-AV1" + +if [[ ${PV} = 9999 ]]; then + inherit git-r3 + EGIT_REPO_URI="https://gitlab.com/AOMediaCodec/SVT-AV1.git" +else + SRC_URI="https://gitlab.com/AOMediaCodec/SVT-AV1/-/archive/v${PV}/SVT-AV1-v${PV}.tar.bz2" + KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86" + S="${WORKDIR}/SVT-AV1-v${PV}" +fi + +# Build/obj1fastdownloader.cmake +PROFILING_VIDEO="stefan_sif.y4m" +SRC_URI+=" pgo? ( https://media.xiph.org/video/derf/y4m/${PROFILING_VIDEO} -> svt-av1-${PROFILING_VIDEO} )" + +# Also see "Alliance for Open Media Patent License 1.0" +LICENSE="BSD-2 Apache-2.0 BSD ISC LGPL-2.1+ MIT" +SLOT="0/$(ver_cut 1)" + +IUSE="cpu_flags_x86_avx512vl pgo test tools" +RESTRICT="!test? ( test )" + +BDEPEND=" + amd64? ( dev-lang/yasm ) + test? ( dev-util/gtest-parallel ) +" + +PATCHES=( + "${FILESDIR}"/${PN}-3.1.2-fortify-no-override.patch +) + +src_prepare() { + # Unused project that triggers the cmake eclasses minimum required cmake check + rm -rf gstreamer-plugin || die + + cmake_src_prepare + + # Lets not install tests + sed -e '/install(/d' -i test/CMakeLists.txt || die + + # Needs more setup to run in the ebuild + cmake_run_in test cmake_comment_add_subdirectory api_test + # Tries to download stuff for this test + cmake_run_in test cmake_comment_add_subdirectory e2e_test +} + +multilib_src_configure() { + local mycmakeargs=( + # Upstream only supports 64-bit and specially amd64 and arm64. + # Other enviroments will fail to build due to missing symbols. + -DBUILD_TESTING=$(multilib_native_usex test) + -DCMAKE_OUTPUT_DIRECTORY="${BUILD_DIR}" + -DENABLE_AVX512=$(usex cpu_flags_x86_avx512vl) + -DSVT_AV1_PGO=$(usex pgo) + + -DBUILD_APPS=$(multilib_native_usex tools ON $(usex pgo)) + + -DCOVERAGE=OFF + + # Use cflags instead + -DNATIVE=OFF + -DSVT_AV1_LTO=OFF + ) + + use pgo && mycmakeargs+=( -DSVT_AV1_PGO_DIR="${T}/${ARCH}-pgo" ) + + cmake_src_configure +} + +multilib_src_compile() { + if use pgo; then + mkdir -p "${BUILD_DIR}/objective-1-fast/" || die + cp "${DISTDIR}/svt-av1-${PROFILING_VIDEO}" "${BUILD_DIR}/objective-1-fast/${PROFILING_VIDEO}" || die + + ## Run the targets separately for more verbose output + + # equivalent to the target PGOCompileGen + edo cmake "${BUILD_DIR}" -DSVT_INTERNAL_PGO_GENERATE=ON -DSVT_INTERNAL_PGO_USE=OFF + cmake_build SvtAv1EncApp + + cmake_build PGOGenerateProfile + + # equivalent to the target PGOCompileUse + edo cmake "${BUILD_DIR}" -DSVT_INTERNAL_PGO_GENERATE=OFF -DSVT_INTERNAL_PGO_USE=ON + cmake_build SvtAv1EncApp + fi + + cmake_src_compile +} + +multilib_src_test() { + if multilib_is_native_abi; then + # Upstream uses this, and this gives a significant time save in running these tests. + # 2025-05-19T19:39:25 >>> media-libs/svt-av1-3.0.2: 1:46:14 + # 2025-05-20T16:10:34 >>> media-libs/svt-av1-3.0.2: 20'35″ + edo gtest-parallel --workers "$(get_makeopts_jobs)" "${BUILD_DIR}"/SvtAv1UnitTests + fi +} + +multilib_src_install() { + cmake_src_install + + # tool needed for pgo, remove it if not requested. + if [[ -f "${ED}/usr/bin/SvtAv1EncApp" ]] && use !tools ; then + rm "${ED}/usr/bin/SvtAv1EncApp" || die + fi +} diff --git a/media-libs/svt-av1/svt-av1-9999.ebuild b/media-libs/svt-av1/svt-av1-9999.ebuild index 011ff45b3d6bf..1a92d0f6fe680 100644 --- a/media-libs/svt-av1/svt-av1-9999.ebuild +++ b/media-libs/svt-av1/svt-av1-9999.ebuild @@ -1,4 +1,4 @@ -# Copyright 2020-2025 Gentoo Authors +# Copyright 2020-2026 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 @@ -17,11 +17,15 @@ else S="${WORKDIR}/SVT-AV1-v${PV}" fi +# Build/obj1fastdownloader.cmake +PROFILING_VIDEO="stefan_sif.y4m" +SRC_URI+=" pgo? ( https://media.xiph.org/video/derf/y4m/${PROFILING_VIDEO} -> svt-av1-${PROFILING_VIDEO} )" + # Also see "Alliance for Open Media Patent License 1.0" LICENSE="BSD-2 Apache-2.0 BSD ISC LGPL-2.1+ MIT" SLOT="0/$(ver_cut 1)" -IUSE="test" +IUSE="cpu_flags_x86_avx512vl pgo test tools" RESTRICT="!test? ( test )" BDEPEND=" @@ -54,18 +58,58 @@ multilib_src_configure() { # Other enviroments will fail to build due to missing symbols. -DBUILD_TESTING=$(multilib_native_usex test) -DCMAKE_OUTPUT_DIRECTORY="${BUILD_DIR}" + -DENABLE_AVX512=$(usex cpu_flags_x86_avx512vl) + -DSVT_AV1_PGO=$(usex pgo) + + -DBUILD_APPS=$(multilib_native_usex tools ON $(usex pgo)) + + -DCOVERAGE=OFF + + # Use cflags instead + -DNATIVE=OFF + -DSVT_AV1_LTO=OFF ) - [[ ${ABI} != amd64 ]] && mycmakeargs+=( -DCOMPILE_C_ONLY=ON ) + use pgo && mycmakeargs+=( -DSVT_AV1_PGO_DIR="${T}/${ARCH}-pgo" ) cmake_src_configure } +multilib_src_compile() { + if use pgo; then + mkdir -p "${BUILD_DIR}/objective-1-fast/" || die + cp "${DISTDIR}/svt-av1-${PROFILING_VIDEO}" "${BUILD_DIR}/objective-1-fast/${PROFILING_VIDEO}" || die + + ## Run the targets separately for more verbose output + + # equivalent to the target PGOCompileGen + edo cmake "${BUILD_DIR}" -DSVT_INTERNAL_PGO_GENERATE=ON -DSVT_INTERNAL_PGO_USE=OFF + cmake_build SvtAv1EncApp + + cmake_build PGOGenerateProfile + + # equivalent to the target PGOCompileUse + edo cmake "${BUILD_DIR}" -DSVT_INTERNAL_PGO_GENERATE=OFF -DSVT_INTERNAL_PGO_USE=ON + cmake_build SvtAv1EncApp + fi + + cmake_src_compile +} + multilib_src_test() { if multilib_is_native_abi; then # Upstream uses this, and this gives a significant time save in running these tests. # 2025-05-19T19:39:25 >>> media-libs/svt-av1-3.0.2: 1:46:14 - # 2025-05-20T16:10:34 >>> media-libs/svt-av1-3.0.2: 20′35″ - edo gtest-parallel --workers "$(makeopts_jobs)" "${BUILD_DIR}"/SvtAv1UnitTests + # 2025-05-20T16:10:34 >>> media-libs/svt-av1-3.0.2: 20'35″ + edo gtest-parallel --workers "$(get_makeopts_jobs)" "${BUILD_DIR}"/SvtAv1UnitTests + fi +} + +multilib_src_install() { + cmake_src_install + + # tool needed for pgo, remove it if not requested. + if [[ -f "${ED}/usr/bin/SvtAv1EncApp" ]] && use !tools ; then + rm "${ED}/usr/bin/SvtAv1EncApp" || die fi }