From d328cef71319eb6fda544b4228ffcbc909186080 Mon Sep 17 00:00:00 2001 From: Basilisk-Dev Date: Mon, 11 May 2026 10:16:34 -0400 Subject: [PATCH] Issue #888 - Enable dav1d SIMD on more architectures --- media/libdav1d/arm/moz.build | 79 +++++++++++++++++++ media/libdav1d/config/config.asm | 65 +++++++++++++++ media/libdav1d/config/config.h | 31 +++++++- media/libdav1d/moz.build | 7 ++ media/libdav1d/ppc/moz.build | 55 +++++++++++++ media/libdav1d/ppc/ppc_cdef_vsx_16bpc.c | 3 + media/libdav1d/ppc/ppc_cdef_vsx_8bpc.c | 3 + media/libdav1d/ppc/ppc_itx_pwr9_16bpc.c | 3 + media/libdav1d/ppc/ppc_itx_pwr9_8bpc.c | 3 + .../libdav1d/ppc/ppc_loopfilter_pwr9_16bpc.c | 3 + media/libdav1d/ppc/ppc_loopfilter_pwr9_8bpc.c | 3 + .../ppc/ppc_looprestoration_vsx_16bpc.c | 3 + .../ppc/ppc_looprestoration_vsx_8bpc.c | 3 + media/libdav1d/ppc/ppc_mc_pwr9_16bpc.c | 3 + media/libdav1d/ppc/ppc_mc_pwr9_8bpc.c | 3 + media/libdav1d/x86/moz.build | 79 +++++++++++++++++++ python/mozbuild/mozbuild/frontend/context.py | 11 +++ python/mozbuild/mozbuild/frontend/emitter.py | 8 ++ 18 files changed, 363 insertions(+), 2 deletions(-) create mode 100644 media/libdav1d/arm/moz.build create mode 100644 media/libdav1d/config/config.asm create mode 100644 media/libdav1d/ppc/moz.build create mode 100644 media/libdav1d/ppc/ppc_cdef_vsx_16bpc.c create mode 100644 media/libdav1d/ppc/ppc_cdef_vsx_8bpc.c create mode 100644 media/libdav1d/ppc/ppc_itx_pwr9_16bpc.c create mode 100644 media/libdav1d/ppc/ppc_itx_pwr9_8bpc.c create mode 100644 media/libdav1d/ppc/ppc_loopfilter_pwr9_16bpc.c create mode 100644 media/libdav1d/ppc/ppc_loopfilter_pwr9_8bpc.c create mode 100644 media/libdav1d/ppc/ppc_looprestoration_vsx_16bpc.c create mode 100644 media/libdav1d/ppc/ppc_looprestoration_vsx_8bpc.c create mode 100644 media/libdav1d/ppc/ppc_mc_pwr9_16bpc.c create mode 100644 media/libdav1d/ppc/ppc_mc_pwr9_8bpc.c create mode 100644 media/libdav1d/x86/moz.build diff --git a/media/libdav1d/arm/moz.build b/media/libdav1d/arm/moz.build new file mode 100644 index 0000000000..3b5864f811 --- /dev/null +++ b/media/libdav1d/arm/moz.build @@ -0,0 +1,79 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +SOURCES += [ + '/media/libdav1d/src/src/arm/cpu.c', +] + +if CONFIG['CPU_ARCH'] == 'aarch64': + SOURCES += [ + '/media/libdav1d/src/src/arm/64/cdef.S', + '/media/libdav1d/src/src/arm/64/cdef16.S', + '/media/libdav1d/src/src/arm/64/filmgrain.S', + '/media/libdav1d/src/src/arm/64/filmgrain16.S', + '/media/libdav1d/src/src/arm/64/ipred.S', + '/media/libdav1d/src/src/arm/64/ipred16.S', + '/media/libdav1d/src/src/arm/64/itx.S', + '/media/libdav1d/src/src/arm/64/itx16.S', + '/media/libdav1d/src/src/arm/64/loopfilter.S', + '/media/libdav1d/src/src/arm/64/loopfilter16.S', + '/media/libdav1d/src/src/arm/64/looprestoration.S', + '/media/libdav1d/src/src/arm/64/looprestoration16.S', + '/media/libdav1d/src/src/arm/64/looprestoration_common.S', + '/media/libdav1d/src/src/arm/64/mc.S', + '/media/libdav1d/src/src/arm/64/mc16.S', + '/media/libdav1d/src/src/arm/64/mc16_sve.S', + '/media/libdav1d/src/src/arm/64/mc_dotprod.S', + '/media/libdav1d/src/src/arm/64/msac.S', + '/media/libdav1d/src/src/arm/64/refmvs.S', + ] +else: + SOURCES += [ + '/media/libdav1d/src/src/arm/32/cdef.S', + '/media/libdav1d/src/src/arm/32/cdef16.S', + '/media/libdav1d/src/src/arm/32/filmgrain.S', + '/media/libdav1d/src/src/arm/32/filmgrain16.S', + '/media/libdav1d/src/src/arm/32/ipred.S', + '/media/libdav1d/src/src/arm/32/ipred16.S', + '/media/libdav1d/src/src/arm/32/itx.S', + '/media/libdav1d/src/src/arm/32/itx16.S', + '/media/libdav1d/src/src/arm/32/loopfilter.S', + '/media/libdav1d/src/src/arm/32/loopfilter16.S', + '/media/libdav1d/src/src/arm/32/looprestoration.S', + '/media/libdav1d/src/src/arm/32/looprestoration16.S', + '/media/libdav1d/src/src/arm/32/looprestoration_common.S', + '/media/libdav1d/src/src/arm/32/mc.S', + '/media/libdav1d/src/src/arm/32/mc16.S', + '/media/libdav1d/src/src/arm/32/msac.S', + '/media/libdav1d/src/src/arm/32/refmvs.S', + ] + +ASFLAGS += [ + '-I%s/media/libdav1d/config' % TOPSRCDIR, + '-I%s/media/libdav1d/src' % TOPSRCDIR, +] + +if CONFIG['CPU_ARCH'] == 'arm' and CONFIG['CLANG_CXX']: + ASFLAGS += [ + '-no-integrated-as', + ] + +LOCAL_INCLUDES += [ + '/media/libdav1d/config', + '/media/libdav1d/src', + '/media/libdav1d/src/include', + '/media/libdav1d/src/include/dav1d', +] + +FINAL_LIBRARY = 'gkmedias' + +ALLOW_COMPILER_WARNINGS = True + +if CONFIG['GNU_CC'] or CONFIG['CLANG_CL']: + CFLAGS += [ + '-Wno-sign-compare', + '-Wno-unused-function', + '-Wno-unused-parameter', + ] diff --git a/media/libdav1d/config/config.asm b/media/libdav1d/config/config.asm new file mode 100644 index 0000000000..7eeb23b042 --- /dev/null +++ b/media/libdav1d/config/config.asm @@ -0,0 +1,65 @@ +; Mozilla build configuration for bundled dav1d x86 assembly. + +%define private_prefix dav1d + +%ifndef ARCH_X86_64 + %ifidn __OUTPUT_FORMAT__,elf64 + %define ARCH_X86_64 1 + %elifidn __OUTPUT_FORMAT__,macho64 + %define ARCH_X86_64 1 + %elifidn __OUTPUT_FORMAT__,win64 + %define ARCH_X86_64 1 + %elifidn __OUTPUT_FORMAT__,x64 + %define ARCH_X86_64 1 + %else + %define ARCH_X86_64 0 + %endif +%endif + +%ifndef ARCH_X86_32 + %if ARCH_X86_64 + %define ARCH_X86_32 0 + %else + %define ARCH_X86_32 1 + %endif +%endif + +%ifndef STACK_ALIGNMENT + %if ARCH_X86_64 + %define STACK_ALIGNMENT 16 + %elifidn __OUTPUT_FORMAT__,elf + %define STACK_ALIGNMENT 16 + %elifidn __OUTPUT_FORMAT__,elf32 + %define STACK_ALIGNMENT 16 + %elifidn __OUTPUT_FORMAT__,macho + %define STACK_ALIGNMENT 16 + %elifidn __OUTPUT_FORMAT__,macho32 + %define STACK_ALIGNMENT 16 + %else + %define STACK_ALIGNMENT 4 + %endif +%endif + +%ifndef PIC + %ifidn __OUTPUT_FORMAT__,win32 + %define PIC 0 + %else + %define PIC 1 + %endif +%endif + +%ifndef FORCE_VEX_ENCODING + %define FORCE_VEX_ENCODING 0 +%endif + +%ifidn __OUTPUT_FORMAT__,win32 + %if ARCH_X86_32 + %define PREFIX 1 + %endif +%elifidn __OUTPUT_FORMAT__,macho + %define PREFIX 1 +%elifidn __OUTPUT_FORMAT__,macho32 + %define PREFIX 1 +%elifidn __OUTPUT_FORMAT__,macho64 + %define PREFIX 1 +%endif diff --git a/media/libdav1d/config/config.h b/media/libdav1d/config/config.h index 1620816bba..f4877a8aca 100644 --- a/media/libdav1d/config/config.h +++ b/media/libdav1d/config/config.h @@ -36,7 +36,10 @@ # define ARCH_LOONGARCH64 0 #endif -#if defined(__powerpc64__) && defined(_LITTLE_ENDIAN) +#if defined(__powerpc64__) && \ + (defined(_LITTLE_ENDIAN) || defined(__LITTLE_ENDIAN__) || \ + (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && \ + __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) # define ARCH_PPC64LE 1 #else # define ARCH_PPC64LE 0 @@ -58,13 +61,37 @@ #define CONFIG_16BPC 1 #define CONFIG_LOG 0 #define CONFIG_MACOS_KPERF 0 -#if ARCH_LOONGARCH64 +#if ARCH_AARCH64 || ARCH_ARM || ARCH_LOONGARCH64 || ARCH_PPC64LE || ARCH_X86 # define HAVE_ASM 1 #else # define HAVE_ASM 0 #endif #define TRIM_DSP_FUNCTIONS 0 +#define HAVE_AS_FUNC 0 +#if ARCH_AARCH64 +# define HAVE_AS_ARCH_DIRECTIVE 1 +# define AS_ARCH_LEVEL armv8-a +# define HAVE_AS_ARCHEXT_DOTPROD_DIRECTIVE 1 +# define HAVE_AS_ARCHEXT_I8MM_DIRECTIVE 1 +# define HAVE_AS_ARCHEXT_SVE_DIRECTIVE 1 +# define HAVE_AS_ARCHEXT_SVE2_DIRECTIVE 1 +# define HAVE_DOTPROD 1 +# define HAVE_I8MM 1 +# define HAVE_SVE 1 +# define HAVE_SVE2 1 +#else +# define HAVE_AS_ARCH_DIRECTIVE 0 +# define HAVE_AS_ARCHEXT_DOTPROD_DIRECTIVE 0 +# define HAVE_AS_ARCHEXT_I8MM_DIRECTIVE 0 +# define HAVE_AS_ARCHEXT_SVE_DIRECTIVE 0 +# define HAVE_AS_ARCHEXT_SVE2_DIRECTIVE 0 +# define HAVE_DOTPROD 0 +# define HAVE_I8MM 0 +# define HAVE_SVE 0 +# define HAVE_SVE2 0 +#endif + #define HAVE_ALIGNED_ALLOC 0 #define HAVE_DLSYM 0 #define HAVE_ELF_AUX_INFO 0 diff --git a/media/libdav1d/moz.build b/media/libdav1d/moz.build index edbd3e3ad1..be2d23aec4 100644 --- a/media/libdav1d/moz.build +++ b/media/libdav1d/moz.build @@ -66,6 +66,13 @@ bitdepth_sources = [ SOURCES += common_sources SOURCES += bitdepth_sources +if CONFIG['CPU_ARCH'].startswith('x86'): + DIRS += ['x86'] +elif CONFIG['CPU_ARCH'] in ('arm', 'aarch64'): + DIRS += ['arm'] +elif CONFIG['CPU_ARCH'] == 'ppc64' and CONFIG['TARGET_ENDIANNESS'] == 'little': + DIRS += ['ppc'] + if CONFIG['OS_TARGET'] == 'WINNT': SOURCES += [ '/media/libdav1d/src/src/win32/thread.c', diff --git a/media/libdav1d/ppc/moz.build b/media/libdav1d/ppc/moz.build new file mode 100644 index 0000000000..b907bf4274 --- /dev/null +++ b/media/libdav1d/ppc/moz.build @@ -0,0 +1,55 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +vsx_sources = [ + 'ppc_cdef_vsx_16bpc.c', + 'ppc_cdef_vsx_8bpc.c', + 'ppc_looprestoration_vsx_16bpc.c', + 'ppc_looprestoration_vsx_8bpc.c', +] + +pwr9_sources = [ + 'ppc_itx_pwr9_16bpc.c', + 'ppc_itx_pwr9_8bpc.c', + 'ppc_loopfilter_pwr9_16bpc.c', + 'ppc_loopfilter_pwr9_8bpc.c', + 'ppc_mc_pwr9_16bpc.c', + 'ppc_mc_pwr9_8bpc.c', +] + +SOURCES += [ + '/media/libdav1d/src/src/ppc/cpu.c', +] +SOURCES += pwr9_sources +SOURCES += vsx_sources + +for f in pwr9_sources: + SOURCES[f].flags += [ + '-mcpu=power9', + ] + +for f in vsx_sources: + SOURCES[f].flags += [ + '-maltivec', + '-mvsx', + ] + +LOCAL_INCLUDES += [ + '/media/libdav1d/config', + '/media/libdav1d/src', + '/media/libdav1d/src/include', + '/media/libdav1d/src/include/dav1d', +] + +FINAL_LIBRARY = 'gkmedias' + +ALLOW_COMPILER_WARNINGS = True + +if CONFIG['GNU_CC'] or CONFIG['CLANG_CL']: + CFLAGS += [ + '-Wno-sign-compare', + '-Wno-unused-function', + '-Wno-unused-parameter', + ] diff --git a/media/libdav1d/ppc/ppc_cdef_vsx_16bpc.c b/media/libdav1d/ppc/ppc_cdef_vsx_16bpc.c new file mode 100644 index 0000000000..dff3c281e4 --- /dev/null +++ b/media/libdav1d/ppc/ppc_cdef_vsx_16bpc.c @@ -0,0 +1,3 @@ +#define BITDEPTH 16 +#define DAV1D_VSX 1 +#include "../src/src/ppc/cdef_tmpl.c" diff --git a/media/libdav1d/ppc/ppc_cdef_vsx_8bpc.c b/media/libdav1d/ppc/ppc_cdef_vsx_8bpc.c new file mode 100644 index 0000000000..226cedbd30 --- /dev/null +++ b/media/libdav1d/ppc/ppc_cdef_vsx_8bpc.c @@ -0,0 +1,3 @@ +#define BITDEPTH 8 +#define DAV1D_VSX 1 +#include "../src/src/ppc/cdef_tmpl.c" diff --git a/media/libdav1d/ppc/ppc_itx_pwr9_16bpc.c b/media/libdav1d/ppc/ppc_itx_pwr9_16bpc.c new file mode 100644 index 0000000000..dd604a9877 --- /dev/null +++ b/media/libdav1d/ppc/ppc_itx_pwr9_16bpc.c @@ -0,0 +1,3 @@ +#define BITDEPTH 16 +#define DAV1D_PWR9 1 +#include "../src/src/ppc/itx_tmpl.c" diff --git a/media/libdav1d/ppc/ppc_itx_pwr9_8bpc.c b/media/libdav1d/ppc/ppc_itx_pwr9_8bpc.c new file mode 100644 index 0000000000..2de3d00dc6 --- /dev/null +++ b/media/libdav1d/ppc/ppc_itx_pwr9_8bpc.c @@ -0,0 +1,3 @@ +#define BITDEPTH 8 +#define DAV1D_PWR9 1 +#include "../src/src/ppc/itx_tmpl.c" diff --git a/media/libdav1d/ppc/ppc_loopfilter_pwr9_16bpc.c b/media/libdav1d/ppc/ppc_loopfilter_pwr9_16bpc.c new file mode 100644 index 0000000000..1cb479c783 --- /dev/null +++ b/media/libdav1d/ppc/ppc_loopfilter_pwr9_16bpc.c @@ -0,0 +1,3 @@ +#define BITDEPTH 16 +#define DAV1D_PWR9 1 +#include "../src/src/ppc/loopfilter_tmpl.c" diff --git a/media/libdav1d/ppc/ppc_loopfilter_pwr9_8bpc.c b/media/libdav1d/ppc/ppc_loopfilter_pwr9_8bpc.c new file mode 100644 index 0000000000..fe51f8ca3f --- /dev/null +++ b/media/libdav1d/ppc/ppc_loopfilter_pwr9_8bpc.c @@ -0,0 +1,3 @@ +#define BITDEPTH 8 +#define DAV1D_PWR9 1 +#include "../src/src/ppc/loopfilter_tmpl.c" diff --git a/media/libdav1d/ppc/ppc_looprestoration_vsx_16bpc.c b/media/libdav1d/ppc/ppc_looprestoration_vsx_16bpc.c new file mode 100644 index 0000000000..43c9cd4814 --- /dev/null +++ b/media/libdav1d/ppc/ppc_looprestoration_vsx_16bpc.c @@ -0,0 +1,3 @@ +#define BITDEPTH 16 +#define DAV1D_VSX 1 +#include "../src/src/ppc/looprestoration_tmpl.c" diff --git a/media/libdav1d/ppc/ppc_looprestoration_vsx_8bpc.c b/media/libdav1d/ppc/ppc_looprestoration_vsx_8bpc.c new file mode 100644 index 0000000000..3d50ae1ff6 --- /dev/null +++ b/media/libdav1d/ppc/ppc_looprestoration_vsx_8bpc.c @@ -0,0 +1,3 @@ +#define BITDEPTH 8 +#define DAV1D_VSX 1 +#include "../src/src/ppc/looprestoration_tmpl.c" diff --git a/media/libdav1d/ppc/ppc_mc_pwr9_16bpc.c b/media/libdav1d/ppc/ppc_mc_pwr9_16bpc.c new file mode 100644 index 0000000000..5c50bc06f1 --- /dev/null +++ b/media/libdav1d/ppc/ppc_mc_pwr9_16bpc.c @@ -0,0 +1,3 @@ +#define BITDEPTH 16 +#define DAV1D_PWR9 1 +#include "../src/src/ppc/mc_tmpl.c" diff --git a/media/libdav1d/ppc/ppc_mc_pwr9_8bpc.c b/media/libdav1d/ppc/ppc_mc_pwr9_8bpc.c new file mode 100644 index 0000000000..9e142bf2fe --- /dev/null +++ b/media/libdav1d/ppc/ppc_mc_pwr9_8bpc.c @@ -0,0 +1,3 @@ +#define BITDEPTH 8 +#define DAV1D_PWR9 1 +#include "../src/src/ppc/mc_tmpl.c" diff --git a/media/libdav1d/x86/moz.build b/media/libdav1d/x86/moz.build new file mode 100644 index 0000000000..87f637b632 --- /dev/null +++ b/media/libdav1d/x86/moz.build @@ -0,0 +1,79 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +SOURCES += [ + '/media/libdav1d/src/src/x86/cdef16_avx2.asm', + '/media/libdav1d/src/src/x86/cdef16_avx512.asm', + '/media/libdav1d/src/src/x86/cdef16_sse.asm', + '/media/libdav1d/src/src/x86/cdef_avx2.asm', + '/media/libdav1d/src/src/x86/cdef_avx512.asm', + '/media/libdav1d/src/src/x86/cdef_sse.asm', + '/media/libdav1d/src/src/x86/cpuid.asm', + '/media/libdav1d/src/src/x86/cpu.c', + '/media/libdav1d/src/src/x86/filmgrain16_avx2.asm', + '/media/libdav1d/src/src/x86/filmgrain16_avx512.asm', + '/media/libdav1d/src/src/x86/filmgrain16_sse.asm', + '/media/libdav1d/src/src/x86/filmgrain_avx2.asm', + '/media/libdav1d/src/src/x86/filmgrain_avx512.asm', + '/media/libdav1d/src/src/x86/filmgrain_sse.asm', + '/media/libdav1d/src/src/x86/ipred16_avx2.asm', + '/media/libdav1d/src/src/x86/ipred16_avx512.asm', + '/media/libdav1d/src/src/x86/ipred16_sse.asm', + '/media/libdav1d/src/src/x86/ipred_avx2.asm', + '/media/libdav1d/src/src/x86/ipred_avx512.asm', + '/media/libdav1d/src/src/x86/ipred_sse.asm', + '/media/libdav1d/src/src/x86/itx16_avx2.asm', + '/media/libdav1d/src/src/x86/itx16_avx512.asm', + '/media/libdav1d/src/src/x86/itx16_sse.asm', + '/media/libdav1d/src/src/x86/itx_avx2.asm', + '/media/libdav1d/src/src/x86/itx_avx512.asm', + '/media/libdav1d/src/src/x86/itx_sse.asm', + '/media/libdav1d/src/src/x86/loopfilter16_avx2.asm', + '/media/libdav1d/src/src/x86/loopfilter16_avx512.asm', + '/media/libdav1d/src/src/x86/loopfilter16_sse.asm', + '/media/libdav1d/src/src/x86/loopfilter_avx2.asm', + '/media/libdav1d/src/src/x86/loopfilter_avx512.asm', + '/media/libdav1d/src/src/x86/loopfilter_sse.asm', + '/media/libdav1d/src/src/x86/looprestoration16_avx2.asm', + '/media/libdav1d/src/src/x86/looprestoration16_avx512.asm', + '/media/libdav1d/src/src/x86/looprestoration16_sse.asm', + '/media/libdav1d/src/src/x86/looprestoration_avx2.asm', + '/media/libdav1d/src/src/x86/looprestoration_avx512.asm', + '/media/libdav1d/src/src/x86/looprestoration_sse.asm', + '/media/libdav1d/src/src/x86/mc16_avx2.asm', + '/media/libdav1d/src/src/x86/mc16_avx512.asm', + '/media/libdav1d/src/src/x86/mc16_sse.asm', + '/media/libdav1d/src/src/x86/mc_avx2.asm', + '/media/libdav1d/src/src/x86/mc_avx512.asm', + '/media/libdav1d/src/src/x86/mc_sse.asm', + '/media/libdav1d/src/src/x86/msac.asm', + '/media/libdav1d/src/src/x86/pal.asm', + '/media/libdav1d/src/src/x86/refmvs.asm', +] + +USE_NASM = True + +ASFLAGS += [ + '-I%s/media/libdav1d/config/' % TOPSRCDIR, + '-I%s/media/libdav1d/src/src/' % TOPSRCDIR, +] + +LOCAL_INCLUDES += [ + '/media/libdav1d/config', + '/media/libdav1d/src', + '/media/libdav1d/src/include', + '/media/libdav1d/src/include/dav1d', +] + +FINAL_LIBRARY = 'gkmedias' + +ALLOW_COMPILER_WARNINGS = True + +if CONFIG['GNU_CC'] or CONFIG['CLANG_CL']: + CFLAGS += [ + '-Wno-sign-compare', + '-Wno-unused-function', + '-Wno-unused-parameter', + ] diff --git a/python/mozbuild/mozbuild/frontend/context.py b/python/mozbuild/mozbuild/frontend/context.py index ef9406ea5b..4fdca1365b 100644 --- a/python/mozbuild/mozbuild/frontend/context.py +++ b/python/mozbuild/mozbuild/frontend/context.py @@ -1803,6 +1803,17 @@ VARIABLES = { If yasm is not available on this system, or does not support the current target architecture, an error will be raised. """), + + 'USE_NASM': (bool, bool, + """Use the nasm assembler to assemble assembly files from SOURCES. + + By default, the build will use the toolchain assembler, $(AS), to + assemble source files in assembly language (.s or .asm files). Setting + this value to ``True`` will cause it to use nasm instead. + + If nasm is not available on this system, or does not support the + current target architecture, an error will be raised. + """), } # Sanity check: we don't want any variable above to have a list as storage type. diff --git a/python/mozbuild/mozbuild/frontend/emitter.py b/python/mozbuild/mozbuild/frontend/emitter.py index 6220cd4b4b..92dc4cade0 100644 --- a/python/mozbuild/mozbuild/frontend/emitter.py +++ b/python/mozbuild/mozbuild/frontend/emitter.py @@ -1006,6 +1006,14 @@ class TreeMetadataEmitter(LoggingMixin): passthru.variables['ASFLAGS'] = context.config.substs.get('YASM_ASFLAGS') passthru.variables['AS_DASH_C_FLAG'] = '' + if context.get('USE_NASM') is True: + nasm = context.config.substs.get('NASM') + if not nasm or not context.config.substs.get('HAVE_NASM'): + raise SandboxValidationError('nasm 2.14 or later is not available', context) + passthru.variables['AS'] = nasm + passthru.variables['ASFLAGS'] = context.config.substs.get('NASM_ASFLAGS') + passthru.variables['AS_DASH_C_FLAG'] = '' + for (symbol, cls) in [ ('ANDROID_RES_DIRS', AndroidResDirs), ('ANDROID_EXTRA_RES_DIRS', AndroidExtraResDirs),