set(AVIF_SVT_GIT_TAG "v3.1.2") set(LIB_FILENAME "${AVIF_SOURCE_DIR}/ext/SVT-AV1/Bin/Release/${AVIF_LIBRARY_PREFIX}SvtAv1Enc${CMAKE_STATIC_LIBRARY_SUFFIX}") if(EXISTS "${LIB_FILENAME}") message(STATUS "libavif(AVIF_CODEC_SVT=LOCAL): compiled library found at ${LIB_FILENAME}") add_library(SvtAv1Enc STATIC IMPORTED GLOBAL) set_target_properties(SvtAv1Enc PROPERTIES IMPORTED_LOCATION "${LIB_FILENAME}" AVIF_LOCAL ON) target_include_directories(SvtAv1Enc INTERFACE "${AVIF_SOURCE_DIR}/ext/SVT-AV1/include") else() message(STATUS "libavif(AVIF_CODEC_SVT=LOCAL): compiled library not found at ${LIB_FILENAME}; using FetchContent") if(EXISTS "${AVIF_SOURCE_DIR}/ext/SVT-AV1") message(STATUS "libavif(AVIF_CODEC_SVT=LOCAL): ext/SVT-AV1 found; using as FetchContent SOURCE_DIR") set(FETCHCONTENT_SOURCE_DIR_SVT "${AVIF_SOURCE_DIR}/ext/SVT-AV1") message(CHECK_START "libavif(AVIF_CODEC_SVT=LOCAL): configuring SVT-AV1") else() message(CHECK_START "libavif(AVIF_CODEC_SVT=LOCAL): fetching and configuring SVT-AV1") endif() set(SVT_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/svt-build") if(ANDROID_ABI) set(SVT_BINARY_DIR "${SVT_BINARY_DIR}/${ANDROID_ABI}") endif() # Workaround https://gitlab.kitware.com/cmake/cmake/-/issues/25042 by enabling ASM before ASM_NASM if(NOT CMAKE_ASM_COMPILER) include(CheckLanguage) check_language(ASM) if(CMAKE_ASM_COMPILER) enable_language(ASM) endif() endif() if(NOT CMAKE_ASM_NASM_COMPILER AND CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64|AMD64|amd64)") include(CheckLanguage) check_language(ASM_NASM) if(CMAKE_ASM_NASM_COMPILER) enable_language(ASM_NASM) endif() endif() FetchContent_Declare( svt GIT_REPOSITORY "https://gitlab.com/AOMediaCodec/SVT-AV1.git" BINARY_DIR "${SVT_BINARY_DIR}" GIT_TAG "${AVIF_SVT_GIT_TAG}" UPDATE_COMMAND "" GIT_SHALLOW ON ) set(BUILD_DEC OFF CACHE BOOL "") set(BUILD_APPS OFF CACHE BOOL "") set(NATIVE OFF CACHE BOOL "") set(CMAKE_BUILD_TYPE_ORIG ${CMAKE_BUILD_TYPE}) set(CMAKE_BUILD_TYPE Release CACHE INTERNAL "") set(CMAKE_OUTPUT_DIRECTORY_ORIG "${CMAKE_OUTPUT_DIRECTORY}") set(CMAKE_OUTPUT_DIRECTORY "${SVT_BINARY_DIR}" CACHE INTERNAL "") if(CMAKE_INTERPROCEDURAL_OPTIMIZATION) set(SVT_AV1_LTO ON) else() set(SVT_AV1_LTO OFF) endif() avif_fetchcontent_populate_cmake(svt) set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE_ORIG} CACHE STRING "" FORCE) set(CMAKE_OUTPUT_DIRECTORY ${CMAKE_OUTPUT_DIRECTORY_ORIG} CACHE STRING "" FORCE) set(SVT_INCLUDE_DIR ${SVT_BINARY_DIR}/include) file(MAKE_DIRECTORY ${SVT_INCLUDE_DIR}/svt-av1) file(GLOB _svt_header_files ${svt_SOURCE_DIR}/Source/API/*.h) set(_svt_header_byproducts) foreach(_svt_header_file ${_svt_header_files}) get_filename_component(_svt_header_name "${_svt_header_file}" NAME) set(_svt_header_output ${SVT_INCLUDE_DIR}/svt-av1/${_svt_header_name}) add_custom_command( OUTPUT ${_svt_header_output} COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_svt_header_file} ${_svt_header_output} DEPENDS ${_svt_header_file} VERBATIM ) list(APPEND _svt_header_byproducts ${_svt_header_output}) endforeach() add_custom_target(_svt_install_headers DEPENDS ${_svt_header_byproducts}) add_dependencies(SvtAv1Enc _svt_install_headers) set_target_properties(SvtAv1Enc PROPERTIES AVIF_LOCAL ON) target_include_directories(SvtAv1Enc INTERFACE ${SVT_INCLUDE_DIR}) message(CHECK_PASS "complete") endif() if(EXISTS "${AVIF_SOURCE_DIR}/ext/SVT-AV1") set_target_properties(SvtAv1Enc PROPERTIES FOLDER "ext/SVT-AV1") endif()