# -*- Mode: python; indent-tabs-mode: nil; tab-width: 4 -*- # vim: set filetype=python: # 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/. # ASM enabled ASFLAGS += [ '-I%s/third_party/dav1d/src/' % TOPSRCDIR, '-DHAVE_AVX512ICL=1', ] LOCAL_INCLUDES += [ '/third_party/dav1d/', '/third_party/dav1d/include/', '/third_party/dav1d/src/', ] # Don't export DAV1D_API symbols from libxul # see: third_party/dav1d/include/dav1d/common.h DEFINES['DAV1D_API'] = '' CFLAGS += [ # find the config.h file. '-I%s/dist/include/dav1d/' % TOPOBJDIR, ] # Store the stack alignment that will be used. stack_alignment = 0 # Attaching config.asm file if CONFIG['TARGET_CPU'] == 'x86': # Default stack alignment can be 4 bytes. if CONFIG['OS_TARGET'] == 'WINNT': stack_alignment = 4 ASFLAGS += ['-I%s/media/libdav1d/asm/x86_32/win/' % TOPSRCDIR] else: ASFLAGS += ['-I%s/media/libdav1d/asm/x86_32/' % TOPSRCDIR] stack_alignment = 16 # Change stack alignment to 16 bytes. if CONFIG['CC_TYPE'] == 'clang': CFLAGS += ['-mstack-alignment=16'] elif CONFIG['CC_TYPE'] == 'gcc': CFLAGS += ['-mpreferred-stack-boundary=4'] elif CONFIG['TARGET_CPU'] == 'x86_64': # Default stack aligment is 16 bytes. stack_alignment = 16 if CONFIG['OS_TARGET'] == 'Darwin': ASFLAGS += ['-I%s/media/libdav1d/asm/x86_64/osx/' % TOPSRCDIR] elif CONFIG['OS_TARGET'] == 'WINNT': ASFLAGS += ['-I%s/media/libdav1d/asm/x86_64/win/' % TOPSRCDIR] else: # The rest of the platforms are all Linux-like: plain Linux # Android, OpenBSD, NetBSD, FreeBSD, DragonFly, SunOS ASFLAGS += ['-I%s/media/libdav1d/asm/x86_64/linux/' % TOPSRCDIR] elif CONFIG['TARGET_CPU'] == 'aarch64': stack_alignment = 16 ASFLAGS += ['-I%s/dist/include/dav1d/' % TOPOBJDIR] else: error('Cpu arch %s is not expected' % CONFIG['TARGET_CPU']) # Set the macro here instead of config.h if stack_alignment == 0: error('Stack alignment cannot be zero.') DEFINES['STACK_ALIGNMENT'] = stack_alignment if CONFIG['TARGET_CPU'] in ('x86', 'x86_64'): ASFLAGS += ['-Dprivate_prefix=dav1d'] SOURCES += [ '../../../third_party/dav1d/src/x86/cpu.c', ] EXPORTS.dav1d += [ '../../../third_party/dav1d/src/x86/cpu.h', '../../../third_party/dav1d/src/x86/msac.h', ] # ASM source files if CONFIG['TARGET_CPU'] == 'x86_64': # Empty file on all other archs. Nasm produces # an error when it compiles empty files. SOURCES += [ '../../../third_party/dav1d/src/x86/cdef16_avx2.asm', # moved from autovendored '../../../third_party/dav1d/src/x86/cdef16_avx512.asm', '../../../third_party/dav1d/src/x86/cdef_avx2.asm', '../../../third_party/dav1d/src/x86/cdef_avx512.asm', '../../../third_party/dav1d/src/x86/filmgrain16_avx2.asm', '../../../third_party/dav1d/src/x86/filmgrain16_avx512.asm', '../../../third_party/dav1d/src/x86/filmgrain_avx2.asm', '../../../third_party/dav1d/src/x86/filmgrain_avx512.asm', # '../../../third_party/dav1d/src/x86/filmgrain_common.asm', # ^ filmgrain_common.asm must *not* be in SOURCES because it's only # used as an %include for other .asm files. Trying to assemble it # will result in a nasm error: parser: instruction expected '../../../third_party/dav1d/src/x86/ipred16_avx512.asm', '../../../third_party/dav1d/src/x86/ipred_avx2.asm', '../../../third_party/dav1d/src/x86/ipred_avx512.asm', '../../../third_party/dav1d/src/x86/itx16_avx2.asm', '../../../third_party/dav1d/src/x86/itx16_avx512.asm', '../../../third_party/dav1d/src/x86/itx_avx2.asm', '../../../third_party/dav1d/src/x86/itx_avx512.asm', '../../../third_party/dav1d/src/x86/loopfilter16_avx2.asm', '../../../third_party/dav1d/src/x86/loopfilter16_avx512.asm', '../../../third_party/dav1d/src/x86/loopfilter_avx2.asm', '../../../third_party/dav1d/src/x86/loopfilter_avx512.asm', '../../../third_party/dav1d/src/x86/looprestoration16_avx2.asm', '../../../third_party/dav1d/src/x86/looprestoration16_avx512.asm', '../../../third_party/dav1d/src/x86/looprestoration_avx2.asm', '../../../third_party/dav1d/src/x86/looprestoration_avx512.asm', '../../../third_party/dav1d/src/x86/mc16_avx2.asm', '../../../third_party/dav1d/src/x86/mc16_avx512.asm', '../../../third_party/dav1d/src/x86/mc_avx2.asm', '../../../third_party/dav1d/src/x86/mc_avx512.asm', ] SOURCES += [ '../../../third_party/dav1d/src/x86/cdef16_sse.asm', '../../../third_party/dav1d/src/x86/cdef_sse.asm', '../../../third_party/dav1d/src/x86/cpuid.asm', '../../../third_party/dav1d/src/x86/filmgrain16_sse.asm', '../../../third_party/dav1d/src/x86/filmgrain_sse.asm', '../../../third_party/dav1d/src/x86/ipred16_avx2.asm', '../../../third_party/dav1d/src/x86/ipred16_sse.asm', '../../../third_party/dav1d/src/x86/ipred_sse.asm', '../../../third_party/dav1d/src/x86/itx16_sse.asm', '../../../third_party/dav1d/src/x86/itx_sse.asm', '../../../third_party/dav1d/src/x86/loopfilter16_sse.asm', '../../../third_party/dav1d/src/x86/loopfilter_sse.asm', '../../../third_party/dav1d/src/x86/looprestoration16_sse.asm', # moved from autovendored '../../../third_party/dav1d/src/x86/looprestoration_sse.asm', '../../../third_party/dav1d/src/x86/mc16_sse.asm', '../../../third_party/dav1d/src/x86/mc_sse.asm', '../../../third_party/dav1d/src/x86/msac.asm', '../../../third_party/dav1d/src/x86/pal.asm', '../../../third_party/dav1d/src/x86/refmvs.asm', ] # BITDEPTH # All the files here should be *_tmpl.c, and the should not appear in SOURCES, # since they require BITDEPTH to be defined relative_path = '../../../third_party/dav1d/src/x86/' bitdepth_basenames = [ ] for f in bitdepth_basenames: SOURCES += [ '!16bd_%s' % f ] GeneratedFile('16bd_%s' % f, script='../generate_source.py', entry_point='add_define', inputs=[relative_path + f], flags=['BITDEPTH', '16']) SOURCES += [ '!8bd_%s' % f ] GeneratedFile('8bd_%s' % f, script='../generate_source.py', entry_point='add_define', inputs=[relative_path + f], flags=['BITDEPTH', '8']) elif CONFIG['TARGET_CPU'] == 'arm' or CONFIG['TARGET_CPU'] == 'aarch64': SOURCES += [ '../../../third_party/dav1d/src/arm/cpu.c', ] EXPORTS += [ '../../../third_party/dav1d/src/arm/asm-offsets.h', '../../../third_party/dav1d/src/arm/cpu.h', '../../../third_party/dav1d/src/arm/msac.h', ] # BITDEPTH c file # All the files here should be *_tmpl.c, and the should not appear in SOURCES, # since they require BITDEPTH to be defined relative_path = '../../../third_party/dav1d/src/arm/' bitdepth_basenames = [ ] for f in bitdepth_basenames: SOURCES += [ '!16bd_%s' % f ] GeneratedFile('16bd_%s' % f, script='../generate_source.py', entry_point='add_define', inputs=[relative_path + f], flags=['BITDEPTH', '16']) SOURCES += [ '!8bd_%s' % f ] GeneratedFile('8bd_%s' % f, script='../generate_source.py', entry_point='add_define', inputs=[relative_path + f], flags=['BITDEPTH', '8']) # BITDEPTH .S files if CONFIG['TARGET_CPU'] == 'aarch64': SOURCES += [ '../../../third_party/dav1d/src/arm/64/cdef.S', '../../../third_party/dav1d/src/arm/64/cdef16.S', '../../../third_party/dav1d/src/arm/64/cdef_tmpl.S', '../../../third_party/dav1d/src/arm/64/filmgrain.S', '../../../third_party/dav1d/src/arm/64/filmgrain16.S', '../../../third_party/dav1d/src/arm/64/ipred.S', '../../../third_party/dav1d/src/arm/64/ipred16.S', # itx.S is used for both 8 and 16 bpc. '../../../third_party/dav1d/src/arm/64/itx.S', '../../../third_party/dav1d/src/arm/64/itx16.S', '../../../third_party/dav1d/src/arm/64/loopfilter.S', '../../../third_party/dav1d/src/arm/64/loopfilter16.S', '../../../third_party/dav1d/src/arm/64/looprestoration.S', '../../../third_party/dav1d/src/arm/64/looprestoration16.S', '../../../third_party/dav1d/src/arm/64/looprestoration_common.S', '../../../third_party/dav1d/src/arm/64/looprestoration_tmpl.S', '../../../third_party/dav1d/src/arm/64/mc.S', '../../../third_party/dav1d/src/arm/64/mc16.S', '../../../third_party/dav1d/src/arm/64/msac.S', '../../../third_party/dav1d/src/arm/64/refmvs.S', ] elif CONFIG['TARGET_CPU'] == 'arm': SOURCES += [ '../../../third_party/dav1d/src/arm/32/cdef.S', '../../../third_party/dav1d/src/arm/32/cdef16.S', '../../../third_party/dav1d/src/arm/32/cdef_tmpl.S', '../../../third_party/dav1d/src/arm/32/filmgrain.S', '../../../third_party/dav1d/src/arm/32/filmgrain16.S', '../../../third_party/dav1d/src/arm/32/ipred.S', '../../../third_party/dav1d/src/arm/32/ipred16.S', '../../../third_party/dav1d/src/arm/32/itx.S', '../../../third_party/dav1d/src/arm/32/itx16.S', '../../../third_party/dav1d/src/arm/32/loopfilter.S', '../../../third_party/dav1d/src/arm/32/loopfilter16.S', '../../../third_party/dav1d/src/arm/32/looprestoration.S', '../../../third_party/dav1d/src/arm/32/looprestoration16.S', '../../../third_party/dav1d/src/arm/32/looprestoration_common.S', '../../../third_party/dav1d/src/arm/32/looprestoration_tmpl.S', '../../../third_party/dav1d/src/arm/32/mc.S', '../../../third_party/dav1d/src/arm/32/mc16.S', '../../../third_party/dav1d/src/arm/32/msac.S', '../../../third_party/dav1d/src/arm/32/refmvs.S', ] if CONFIG['TARGET_CPU'] in ('x86', 'x86_64'): USE_NASM = True elif CONFIG['TARGET_CPU'] == 'aarch64' and CONFIG['OS_TARGET'] == 'WINNT': USE_INTEGRATED_CLANGCL_AS = True FINAL_LIBRARY = 'gkmedias' # We allow warnings for third-party code that can be updated from upstream. AllowCompilerWarnings()