SVT-AV1: Enable NASM on x86 only, ASM on ARM only. Also force CMP0194 to make sure MSVC is not chosen for NASM or ASM.
diff --git a/CMakeLists.txt b/CMakeLists.txt index e5b9fa3..cd88a64 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -25,6 +25,12 @@ cmake_policy(SET CMP0169 OLD) endif() +# Disallow MSVC for ASM. +# https://cmake.org/cmake/help/latest/policy/CMP0194.html +if(POLICY CMP0194) + cmake_policy(SET CMP0194 NEW) +endif() + project(libavif LANGUAGES C VERSION 1.3.0) # The root directory of the avif source @@ -493,6 +499,16 @@ set(AVIF_PKG_CONFIG_EXTRA_REQUIRES_PRIVATE "${AVIF_PKG_CONFIG_EXTRA_REQUIRES_PRIVATE} rav1e") endif() +if(AVIF_CODEC_AVM) + # Avoid the following error: + # CMake Error: Error required internal CMake variable not set, cmake may not be built correctly. + # Missing variable is: CMAKE_ASM_COMPILE_OBJECT + # For some reason this must be done before check_avif_option(AVIF_CODEC_AOM TARGET aom PKG_NAME aom). + # See also https://gitlab.kitware.com/cmake/cmake/-/issues/25042. + # Enable ASM before NASM in SVT-AV1. + enable_language(ASM) +endif() + check_avif_option(AVIF_CODEC_SVT TARGET SvtAv1Enc PKG_NAME svt) if(AVIF_CODEC_SVT_ENABLED) target_compile_definitions(avif_obj PRIVATE -DAVIF_CODEC_SVT=1) @@ -503,15 +519,6 @@ set(AVIF_PKG_CONFIG_EXTRA_REQUIRES_PRIVATE "${AVIF_PKG_CONFIG_EXTRA_REQUIRES_PRIVATE} SvtAv1Enc") endif() -if(AVIF_CODEC_AVM) - # Avoid the following error: - # CMake Error: Error required internal CMake variable not set, cmake may not be built correctly. - # Missing variable is: CMAKE_ASM_COMPILE_OBJECT - # For some reason this must be done before check_avif_option(AVIF_CODEC_AOM TARGET aom PKG_NAME aom). - # See also https://gitlab.kitware.com/cmake/cmake/-/issues/25042. - enable_language(ASM) -endif() - check_avif_option(AVIF_CODEC_AOM TARGET aom PKG_NAME aom) if(AVIF_CODEC_AOM_ENABLED) target_compile_definitions(avif_obj PRIVATE -DAVIF_CODEC_AOM=1)
diff --git a/cmake/Modules/LocalSvt.cmake b/cmake/Modules/LocalSvt.cmake index c096efa..b6b0201 100644 --- a/cmake/Modules/LocalSvt.cmake +++ b/cmake/Modules/LocalSvt.cmake
@@ -22,21 +22,23 @@ 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) + if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64|AMD64|amd64)") + # NASM is only used on x86. + if(NOT CMAKE_ASM_NASM_COMPILER) + include(CheckLanguage) + check_language(ASM_NASM) + if(CMAKE_ASM_NASM_COMPILER) + enable_language(ASM_NASM) + endif() + endif() + elseif(NOT CMAKE_ASM_COMPILER) + # ASM is only used on ARM. 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