1*c0909341SAndroid Build Coastguard Worker# Copyright © 2018-2019, VideoLAN and dav1d authors 2*c0909341SAndroid Build Coastguard Worker# All rights reserved. 3*c0909341SAndroid Build Coastguard Worker# 4*c0909341SAndroid Build Coastguard Worker# Redistribution and use in source and binary forms, with or without 5*c0909341SAndroid Build Coastguard Worker# modification, are permitted provided that the following conditions are met: 6*c0909341SAndroid Build Coastguard Worker# 7*c0909341SAndroid Build Coastguard Worker# 1. Redistributions of source code must retain the above copyright notice, this 8*c0909341SAndroid Build Coastguard Worker# list of conditions and the following disclaimer. 9*c0909341SAndroid Build Coastguard Worker# 10*c0909341SAndroid Build Coastguard Worker# 2. Redistributions in binary form must reproduce the above copyright notice, 11*c0909341SAndroid Build Coastguard Worker# this list of conditions and the following disclaimer in the documentation 12*c0909341SAndroid Build Coastguard Worker# and/or other materials provided with the distribution. 13*c0909341SAndroid Build Coastguard Worker# 14*c0909341SAndroid Build Coastguard Worker# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 15*c0909341SAndroid Build Coastguard Worker# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 16*c0909341SAndroid Build Coastguard Worker# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17*c0909341SAndroid Build Coastguard Worker# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 18*c0909341SAndroid Build Coastguard Worker# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 19*c0909341SAndroid Build Coastguard Worker# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 20*c0909341SAndroid Build Coastguard Worker# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 21*c0909341SAndroid Build Coastguard Worker# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22*c0909341SAndroid Build Coastguard Worker# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 23*c0909341SAndroid Build Coastguard Worker# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24*c0909341SAndroid Build Coastguard Worker 25*c0909341SAndroid Build Coastguard Worker# 26*c0909341SAndroid Build Coastguard Worker# Build definition for the dav1d library 27*c0909341SAndroid Build Coastguard Worker# 28*c0909341SAndroid Build Coastguard Worker 29*c0909341SAndroid Build Coastguard Worker# libdav1d source files 30*c0909341SAndroid Build Coastguard Workerlibdav1d_sources = files( 31*c0909341SAndroid Build Coastguard Worker 'cdf.c', 32*c0909341SAndroid Build Coastguard Worker 'cpu.c', 33*c0909341SAndroid Build Coastguard Worker 'ctx.c', 34*c0909341SAndroid Build Coastguard Worker 'data.c', 35*c0909341SAndroid Build Coastguard Worker 'decode.c', 36*c0909341SAndroid Build Coastguard Worker 'dequant_tables.c', 37*c0909341SAndroid Build Coastguard Worker 'getbits.c', 38*c0909341SAndroid Build Coastguard Worker 'intra_edge.c', 39*c0909341SAndroid Build Coastguard Worker 'itx_1d.c', 40*c0909341SAndroid Build Coastguard Worker 'lf_mask.c', 41*c0909341SAndroid Build Coastguard Worker 'lib.c', 42*c0909341SAndroid Build Coastguard Worker 'log.c', 43*c0909341SAndroid Build Coastguard Worker 'mem.c', 44*c0909341SAndroid Build Coastguard Worker 'msac.c', 45*c0909341SAndroid Build Coastguard Worker 'obu.c', 46*c0909341SAndroid Build Coastguard Worker 'pal.c', 47*c0909341SAndroid Build Coastguard Worker 'picture.c', 48*c0909341SAndroid Build Coastguard Worker 'qm.c', 49*c0909341SAndroid Build Coastguard Worker 'ref.c', 50*c0909341SAndroid Build Coastguard Worker 'refmvs.c', 51*c0909341SAndroid Build Coastguard Worker 'scan.c', 52*c0909341SAndroid Build Coastguard Worker 'tables.c', 53*c0909341SAndroid Build Coastguard Worker 'thread_task.c', 54*c0909341SAndroid Build Coastguard Worker 'warpmv.c', 55*c0909341SAndroid Build Coastguard Worker 'wedge.c', 56*c0909341SAndroid Build Coastguard Worker) 57*c0909341SAndroid Build Coastguard Worker 58*c0909341SAndroid Build Coastguard Worker# libdav1d bitdepth source files 59*c0909341SAndroid Build Coastguard Worker# These files are compiled for each bitdepth with 60*c0909341SAndroid Build Coastguard Worker# `BITDEPTH` defined to the currently built bitdepth. 61*c0909341SAndroid Build Coastguard Workerlibdav1d_tmpl_sources = files( 62*c0909341SAndroid Build Coastguard Worker 'cdef_apply_tmpl.c', 63*c0909341SAndroid Build Coastguard Worker 'cdef_tmpl.c', 64*c0909341SAndroid Build Coastguard Worker 'fg_apply_tmpl.c', 65*c0909341SAndroid Build Coastguard Worker 'filmgrain_tmpl.c', 66*c0909341SAndroid Build Coastguard Worker 'ipred_prepare_tmpl.c', 67*c0909341SAndroid Build Coastguard Worker 'ipred_tmpl.c', 68*c0909341SAndroid Build Coastguard Worker 'itx_tmpl.c', 69*c0909341SAndroid Build Coastguard Worker 'lf_apply_tmpl.c', 70*c0909341SAndroid Build Coastguard Worker 'loopfilter_tmpl.c', 71*c0909341SAndroid Build Coastguard Worker 'looprestoration_tmpl.c', 72*c0909341SAndroid Build Coastguard Worker 'lr_apply_tmpl.c', 73*c0909341SAndroid Build Coastguard Worker 'mc_tmpl.c', 74*c0909341SAndroid Build Coastguard Worker 'recon_tmpl.c', 75*c0909341SAndroid Build Coastguard Worker) 76*c0909341SAndroid Build Coastguard Worker 77*c0909341SAndroid Build Coastguard Workerlibdav1d_arch_tmpl_sources = {} 78*c0909341SAndroid Build Coastguard Worker 79*c0909341SAndroid Build Coastguard Workerlibdav1d_bitdepth_objs = [] 80*c0909341SAndroid Build Coastguard Worker 81*c0909341SAndroid Build Coastguard Worker# ASM specific sources 82*c0909341SAndroid Build Coastguard Workerlibdav1d_asm_objs = [] 83*c0909341SAndroid Build Coastguard Worker# Arch-specific flags 84*c0909341SAndroid Build Coastguard Workerarch_flags = {} 85*c0909341SAndroid Build Coastguard Workerif is_asm_enabled 86*c0909341SAndroid Build Coastguard Worker if (host_machine.cpu_family() == 'aarch64' or 87*c0909341SAndroid Build Coastguard Worker host_machine.cpu_family().startswith('arm')) 88*c0909341SAndroid Build Coastguard Worker 89*c0909341SAndroid Build Coastguard Worker libdav1d_sources += files( 90*c0909341SAndroid Build Coastguard Worker 'arm/cpu.c', 91*c0909341SAndroid Build Coastguard Worker ) 92*c0909341SAndroid Build Coastguard Worker if (host_machine.cpu_family() == 'aarch64' or 93*c0909341SAndroid Build Coastguard Worker host_machine.cpu() == 'arm64') 94*c0909341SAndroid Build Coastguard Worker libdav1d_sources_asm = files( 95*c0909341SAndroid Build Coastguard Worker # itx.S is used for both 8 and 16 bpc. 96*c0909341SAndroid Build Coastguard Worker 'arm/64/itx.S', 97*c0909341SAndroid Build Coastguard Worker 'arm/64/looprestoration_common.S', 98*c0909341SAndroid Build Coastguard Worker 'arm/64/msac.S', 99*c0909341SAndroid Build Coastguard Worker 'arm/64/refmvs.S', 100*c0909341SAndroid Build Coastguard Worker ) 101*c0909341SAndroid Build Coastguard Worker 102*c0909341SAndroid Build Coastguard Worker if dav1d_bitdepths.contains('8') 103*c0909341SAndroid Build Coastguard Worker libdav1d_sources_asm += files( 104*c0909341SAndroid Build Coastguard Worker 'arm/64/cdef.S', 105*c0909341SAndroid Build Coastguard Worker 'arm/64/filmgrain.S', 106*c0909341SAndroid Build Coastguard Worker 'arm/64/ipred.S', 107*c0909341SAndroid Build Coastguard Worker 'arm/64/loopfilter.S', 108*c0909341SAndroid Build Coastguard Worker 'arm/64/looprestoration.S', 109*c0909341SAndroid Build Coastguard Worker 'arm/64/mc.S', 110*c0909341SAndroid Build Coastguard Worker 'arm/64/mc_dotprod.S', 111*c0909341SAndroid Build Coastguard Worker ) 112*c0909341SAndroid Build Coastguard Worker endif 113*c0909341SAndroid Build Coastguard Worker 114*c0909341SAndroid Build Coastguard Worker if dav1d_bitdepths.contains('16') 115*c0909341SAndroid Build Coastguard Worker libdav1d_sources_asm += files( 116*c0909341SAndroid Build Coastguard Worker 'arm/64/cdef16.S', 117*c0909341SAndroid Build Coastguard Worker 'arm/64/filmgrain16.S', 118*c0909341SAndroid Build Coastguard Worker 'arm/64/ipred16.S', 119*c0909341SAndroid Build Coastguard Worker 'arm/64/itx16.S', 120*c0909341SAndroid Build Coastguard Worker 'arm/64/loopfilter16.S', 121*c0909341SAndroid Build Coastguard Worker 'arm/64/looprestoration16.S', 122*c0909341SAndroid Build Coastguard Worker 'arm/64/mc16.S', 123*c0909341SAndroid Build Coastguard Worker 'arm/64/mc16_sve.S', 124*c0909341SAndroid Build Coastguard Worker ) 125*c0909341SAndroid Build Coastguard Worker endif 126*c0909341SAndroid Build Coastguard Worker elif host_machine.cpu_family().startswith('arm') 127*c0909341SAndroid Build Coastguard Worker libdav1d_sources_asm = files( 128*c0909341SAndroid Build Coastguard Worker # itx.S is used for both 8 and 16 bpc. 129*c0909341SAndroid Build Coastguard Worker 'arm/32/itx.S', 130*c0909341SAndroid Build Coastguard Worker 'arm/32/looprestoration_common.S', 131*c0909341SAndroid Build Coastguard Worker 'arm/32/msac.S', 132*c0909341SAndroid Build Coastguard Worker 'arm/32/refmvs.S', 133*c0909341SAndroid Build Coastguard Worker ) 134*c0909341SAndroid Build Coastguard Worker 135*c0909341SAndroid Build Coastguard Worker if dav1d_bitdepths.contains('8') 136*c0909341SAndroid Build Coastguard Worker libdav1d_sources_asm += files( 137*c0909341SAndroid Build Coastguard Worker 'arm/32/cdef.S', 138*c0909341SAndroid Build Coastguard Worker 'arm/32/filmgrain.S', 139*c0909341SAndroid Build Coastguard Worker 'arm/32/ipred.S', 140*c0909341SAndroid Build Coastguard Worker 'arm/32/loopfilter.S', 141*c0909341SAndroid Build Coastguard Worker 'arm/32/looprestoration.S', 142*c0909341SAndroid Build Coastguard Worker 'arm/32/mc.S', 143*c0909341SAndroid Build Coastguard Worker ) 144*c0909341SAndroid Build Coastguard Worker endif 145*c0909341SAndroid Build Coastguard Worker 146*c0909341SAndroid Build Coastguard Worker if dav1d_bitdepths.contains('16') 147*c0909341SAndroid Build Coastguard Worker libdav1d_sources_asm += files( 148*c0909341SAndroid Build Coastguard Worker 'arm/32/cdef16.S', 149*c0909341SAndroid Build Coastguard Worker 'arm/32/filmgrain16.S', 150*c0909341SAndroid Build Coastguard Worker 'arm/32/ipred16.S', 151*c0909341SAndroid Build Coastguard Worker 'arm/32/itx16.S', 152*c0909341SAndroid Build Coastguard Worker 'arm/32/loopfilter16.S', 153*c0909341SAndroid Build Coastguard Worker 'arm/32/looprestoration16.S', 154*c0909341SAndroid Build Coastguard Worker 'arm/32/mc16.S', 155*c0909341SAndroid Build Coastguard Worker ) 156*c0909341SAndroid Build Coastguard Worker endif 157*c0909341SAndroid Build Coastguard Worker endif 158*c0909341SAndroid Build Coastguard Worker 159*c0909341SAndroid Build Coastguard Worker if use_gaspp 160*c0909341SAndroid Build Coastguard Worker libdav1d_asm_objs = gaspp_gen.process(libdav1d_sources_asm) 161*c0909341SAndroid Build Coastguard Worker else 162*c0909341SAndroid Build Coastguard Worker libdav1d_sources += libdav1d_sources_asm 163*c0909341SAndroid Build Coastguard Worker endif 164*c0909341SAndroid Build Coastguard Worker elif host_machine.cpu_family().startswith('x86') 165*c0909341SAndroid Build Coastguard Worker 166*c0909341SAndroid Build Coastguard Worker libdav1d_sources += files( 167*c0909341SAndroid Build Coastguard Worker 'x86/cpu.c', 168*c0909341SAndroid Build Coastguard Worker ) 169*c0909341SAndroid Build Coastguard Worker 170*c0909341SAndroid Build Coastguard Worker # NASM source files 171*c0909341SAndroid Build Coastguard Worker libdav1d_sources_asm = files( 172*c0909341SAndroid Build Coastguard Worker 'x86/cpuid.asm', 173*c0909341SAndroid Build Coastguard Worker 'x86/msac.asm', 174*c0909341SAndroid Build Coastguard Worker 'x86/pal.asm', 175*c0909341SAndroid Build Coastguard Worker 'x86/refmvs.asm', 176*c0909341SAndroid Build Coastguard Worker 'x86/itx_avx512.asm', 177*c0909341SAndroid Build Coastguard Worker 'x86/cdef_avx2.asm', 178*c0909341SAndroid Build Coastguard Worker 'x86/itx_avx2.asm', 179*c0909341SAndroid Build Coastguard Worker 'x86/cdef_sse.asm', 180*c0909341SAndroid Build Coastguard Worker 'x86/itx_sse.asm', 181*c0909341SAndroid Build Coastguard Worker ) 182*c0909341SAndroid Build Coastguard Worker 183*c0909341SAndroid Build Coastguard Worker if dav1d_bitdepths.contains('8') 184*c0909341SAndroid Build Coastguard Worker libdav1d_sources_asm += files( 185*c0909341SAndroid Build Coastguard Worker 'x86/cdef_avx512.asm', 186*c0909341SAndroid Build Coastguard Worker 'x86/filmgrain_avx512.asm', 187*c0909341SAndroid Build Coastguard Worker 'x86/ipred_avx512.asm', 188*c0909341SAndroid Build Coastguard Worker 'x86/loopfilter_avx512.asm', 189*c0909341SAndroid Build Coastguard Worker 'x86/looprestoration_avx512.asm', 190*c0909341SAndroid Build Coastguard Worker 'x86/mc_avx512.asm', 191*c0909341SAndroid Build Coastguard Worker 'x86/filmgrain_avx2.asm', 192*c0909341SAndroid Build Coastguard Worker 'x86/ipred_avx2.asm', 193*c0909341SAndroid Build Coastguard Worker 'x86/loopfilter_avx2.asm', 194*c0909341SAndroid Build Coastguard Worker 'x86/looprestoration_avx2.asm', 195*c0909341SAndroid Build Coastguard Worker 'x86/mc_avx2.asm', 196*c0909341SAndroid Build Coastguard Worker 'x86/filmgrain_sse.asm', 197*c0909341SAndroid Build Coastguard Worker 'x86/ipred_sse.asm', 198*c0909341SAndroid Build Coastguard Worker 'x86/loopfilter_sse.asm', 199*c0909341SAndroid Build Coastguard Worker 'x86/looprestoration_sse.asm', 200*c0909341SAndroid Build Coastguard Worker 'x86/mc_sse.asm', 201*c0909341SAndroid Build Coastguard Worker ) 202*c0909341SAndroid Build Coastguard Worker endif 203*c0909341SAndroid Build Coastguard Worker 204*c0909341SAndroid Build Coastguard Worker if dav1d_bitdepths.contains('16') 205*c0909341SAndroid Build Coastguard Worker libdav1d_sources_asm += files( 206*c0909341SAndroid Build Coastguard Worker 'x86/cdef16_avx512.asm', 207*c0909341SAndroid Build Coastguard Worker 'x86/filmgrain16_avx512.asm', 208*c0909341SAndroid Build Coastguard Worker 'x86/ipred16_avx512.asm', 209*c0909341SAndroid Build Coastguard Worker 'x86/itx16_avx512.asm', 210*c0909341SAndroid Build Coastguard Worker 'x86/loopfilter16_avx512.asm', 211*c0909341SAndroid Build Coastguard Worker 'x86/looprestoration16_avx512.asm', 212*c0909341SAndroid Build Coastguard Worker 'x86/mc16_avx512.asm', 213*c0909341SAndroid Build Coastguard Worker 'x86/cdef16_avx2.asm', 214*c0909341SAndroid Build Coastguard Worker 'x86/filmgrain16_avx2.asm', 215*c0909341SAndroid Build Coastguard Worker 'x86/ipred16_avx2.asm', 216*c0909341SAndroid Build Coastguard Worker 'x86/itx16_avx2.asm', 217*c0909341SAndroid Build Coastguard Worker 'x86/loopfilter16_avx2.asm', 218*c0909341SAndroid Build Coastguard Worker 'x86/looprestoration16_avx2.asm', 219*c0909341SAndroid Build Coastguard Worker 'x86/mc16_avx2.asm', 220*c0909341SAndroid Build Coastguard Worker 'x86/cdef16_sse.asm', 221*c0909341SAndroid Build Coastguard Worker 'x86/filmgrain16_sse.asm', 222*c0909341SAndroid Build Coastguard Worker 'x86/ipred16_sse.asm', 223*c0909341SAndroid Build Coastguard Worker 'x86/itx16_sse.asm', 224*c0909341SAndroid Build Coastguard Worker 'x86/loopfilter16_sse.asm', 225*c0909341SAndroid Build Coastguard Worker 'x86/looprestoration16_sse.asm', 226*c0909341SAndroid Build Coastguard Worker 'x86/mc16_sse.asm', 227*c0909341SAndroid Build Coastguard Worker ) 228*c0909341SAndroid Build Coastguard Worker endif 229*c0909341SAndroid Build Coastguard Worker 230*c0909341SAndroid Build Coastguard Worker # Compile the ASM sources with NASM 231*c0909341SAndroid Build Coastguard Worker libdav1d_asm_objs = nasm_gen.process(libdav1d_sources_asm) 232*c0909341SAndroid Build Coastguard Worker elif host_machine.cpu_family().startswith('loongarch') 233*c0909341SAndroid Build Coastguard Worker libdav1d_sources += files( 234*c0909341SAndroid Build Coastguard Worker 'loongarch/cpu.c', 235*c0909341SAndroid Build Coastguard Worker ) 236*c0909341SAndroid Build Coastguard Worker 237*c0909341SAndroid Build Coastguard Worker libdav1d_arch_tmpl_sources += {'default': files( 238*c0909341SAndroid Build Coastguard Worker 'loongarch/looprestoration_tmpl.c', 239*c0909341SAndroid Build Coastguard Worker )} 240*c0909341SAndroid Build Coastguard Worker 241*c0909341SAndroid Build Coastguard Worker libdav1d_sources_asm = files( 242*c0909341SAndroid Build Coastguard Worker 'loongarch/cdef.S', 243*c0909341SAndroid Build Coastguard Worker 'loongarch/ipred.S', 244*c0909341SAndroid Build Coastguard Worker 'loongarch/mc.S', 245*c0909341SAndroid Build Coastguard Worker 'loongarch/loopfilter.S', 246*c0909341SAndroid Build Coastguard Worker 'loongarch/looprestoration.S', 247*c0909341SAndroid Build Coastguard Worker 'loongarch/msac.S', 248*c0909341SAndroid Build Coastguard Worker 'loongarch/refmvs.S', 249*c0909341SAndroid Build Coastguard Worker 'loongarch/itx.S', 250*c0909341SAndroid Build Coastguard Worker ) 251*c0909341SAndroid Build Coastguard Worker libdav1d_asm_objs += libdav1d_sources_asm 252*c0909341SAndroid Build Coastguard Worker elif host_machine.cpu() == 'ppc64le' 253*c0909341SAndroid Build Coastguard Worker arch_flags += {'vsx': ['-maltivec', '-mvsx', '-DDAV1D_VSX']} 254*c0909341SAndroid Build Coastguard Worker libdav1d_sources += files( 255*c0909341SAndroid Build Coastguard Worker 'ppc/cpu.c', 256*c0909341SAndroid Build Coastguard Worker ) 257*c0909341SAndroid Build Coastguard Worker libdav1d_arch_tmpl_sources += {'vsx': files( 258*c0909341SAndroid Build Coastguard Worker 'ppc/cdef_tmpl.c', 259*c0909341SAndroid Build Coastguard Worker 'ppc/looprestoration_tmpl.c', 260*c0909341SAndroid Build Coastguard Worker )} 261*c0909341SAndroid Build Coastguard Worker arch_flags += {'pwr9': ['-mcpu=power9', '-DDAV1D_PWR9']} 262*c0909341SAndroid Build Coastguard Worker libdav1d_arch_tmpl_sources += {'pwr9': files( 263*c0909341SAndroid Build Coastguard Worker 'ppc/itx_tmpl.c', 264*c0909341SAndroid Build Coastguard Worker 'ppc/loopfilter_tmpl.c', 265*c0909341SAndroid Build Coastguard Worker )} 266*c0909341SAndroid Build Coastguard Worker elif host_machine.cpu_family().startswith('riscv') 267*c0909341SAndroid Build Coastguard Worker libdav1d_sources += files( 268*c0909341SAndroid Build Coastguard Worker 'riscv/cpu.c', 269*c0909341SAndroid Build Coastguard Worker ) 270*c0909341SAndroid Build Coastguard Worker if host_machine.cpu_family() == 'riscv64' 271*c0909341SAndroid Build Coastguard Worker libdav1d_sources += files( 272*c0909341SAndroid Build Coastguard Worker 'riscv/64/cdef.S', 273*c0909341SAndroid Build Coastguard Worker 'riscv/64/cpu.S', 274*c0909341SAndroid Build Coastguard Worker 'riscv/64/itx.S', 275*c0909341SAndroid Build Coastguard Worker 'riscv/64/pal.S', 276*c0909341SAndroid Build Coastguard Worker 'riscv/64/mc.S', 277*c0909341SAndroid Build Coastguard Worker ) 278*c0909341SAndroid Build Coastguard Worker 279*c0909341SAndroid Build Coastguard Worker if dav1d_bitdepths.contains('8') 280*c0909341SAndroid Build Coastguard Worker libdav1d_sources += files( 281*c0909341SAndroid Build Coastguard Worker 'riscv/64/cdef.S', 282*c0909341SAndroid Build Coastguard Worker 'riscv/64/ipred.S', 283*c0909341SAndroid Build Coastguard Worker ) 284*c0909341SAndroid Build Coastguard Worker endif 285*c0909341SAndroid Build Coastguard Worker 286*c0909341SAndroid Build Coastguard Worker if dav1d_bitdepths.contains('16') 287*c0909341SAndroid Build Coastguard Worker libdav1d_sources += files( 288*c0909341SAndroid Build Coastguard Worker 'riscv/64/cdef16.S', 289*c0909341SAndroid Build Coastguard Worker 'riscv/64/ipred16.S', 290*c0909341SAndroid Build Coastguard Worker ) 291*c0909341SAndroid Build Coastguard Worker endif 292*c0909341SAndroid Build Coastguard Worker endif 293*c0909341SAndroid Build Coastguard Worker endif 294*c0909341SAndroid Build Coastguard Workerendif 295*c0909341SAndroid Build Coastguard Worker 296*c0909341SAndroid Build Coastguard Worker 297*c0909341SAndroid Build Coastguard Worker 298*c0909341SAndroid Build Coastguard Workerlibdav1d_rc_obj = [] 299*c0909341SAndroid Build Coastguard Workerlibdav1d_flags = [] 300*c0909341SAndroid Build Coastguard Workerapi_export_flags = [] 301*c0909341SAndroid Build Coastguard Worker 302*c0909341SAndroid Build Coastguard Worker# 303*c0909341SAndroid Build Coastguard Worker# Windows .rc file and API export flags 304*c0909341SAndroid Build Coastguard Worker# 305*c0909341SAndroid Build Coastguard Worker 306*c0909341SAndroid Build Coastguard Workerif host_machine.system() == 'windows' 307*c0909341SAndroid Build Coastguard Worker if get_option('default_library') != 'static' 308*c0909341SAndroid Build Coastguard Worker rc_file = configure_file( 309*c0909341SAndroid Build Coastguard Worker input : 'dav1d.rc.in', 310*c0909341SAndroid Build Coastguard Worker output : 'dav1d.rc', 311*c0909341SAndroid Build Coastguard Worker configuration : rc_data 312*c0909341SAndroid Build Coastguard Worker ) 313*c0909341SAndroid Build Coastguard Worker 314*c0909341SAndroid Build Coastguard Worker libdav1d_rc_obj = winmod.compile_resources(rc_file) 315*c0909341SAndroid Build Coastguard Worker 316*c0909341SAndroid Build Coastguard Worker api_export_flags = ['-DDAV1D_BUILDING_DLL'] 317*c0909341SAndroid Build Coastguard Worker endif 318*c0909341SAndroid Build Coastguard Worker 319*c0909341SAndroid Build Coastguard Worker if (host_machine.cpu_family() == 'x86_64' and cc.get_id() == 'gcc') 320*c0909341SAndroid Build Coastguard Worker # We don't expect to reference data members from other DLLs without 321*c0909341SAndroid Build Coastguard Worker # dllimport attributes. Set the -mcmodel=small flag, which avoids 322*c0909341SAndroid Build Coastguard Worker # generating indirection via .refptr.<symname> for all potentially 323*c0909341SAndroid Build Coastguard Worker # dllimported variable references. 324*c0909341SAndroid Build Coastguard Worker libdav1d_flags += '-mcmodel=small' 325*c0909341SAndroid Build Coastguard Worker endif 326*c0909341SAndroid Build Coastguard Workerendif 327*c0909341SAndroid Build Coastguard Worker 328*c0909341SAndroid Build Coastguard Worker 329*c0909341SAndroid Build Coastguard Worker 330*c0909341SAndroid Build Coastguard Worker# 331*c0909341SAndroid Build Coastguard Worker# Library definitions 332*c0909341SAndroid Build Coastguard Worker# 333*c0909341SAndroid Build Coastguard Worker 334*c0909341SAndroid Build Coastguard Worker# Helper library for each bitdepth 335*c0909341SAndroid Build Coastguard Workerlibdav1d_bitdepth_objs = [] 336*c0909341SAndroid Build Coastguard Workerforeach bitdepth : dav1d_bitdepths 337*c0909341SAndroid Build Coastguard Worker libdav1d_bitdepth_objs += static_library( 338*c0909341SAndroid Build Coastguard Worker 'dav1d_bitdepth_@0@'.format(bitdepth), 339*c0909341SAndroid Build Coastguard Worker libdav1d_tmpl_sources, config_h_target, 340*c0909341SAndroid Build Coastguard Worker include_directories: dav1d_inc_dirs, 341*c0909341SAndroid Build Coastguard Worker dependencies : [stdatomic_dependencies], 342*c0909341SAndroid Build Coastguard Worker c_args : ['-DBITDEPTH=@0@'.format(bitdepth)] + libdav1d_flags, 343*c0909341SAndroid Build Coastguard Worker install : false, 344*c0909341SAndroid Build Coastguard Worker build_by_default : false, 345*c0909341SAndroid Build Coastguard Worker ).extract_all_objects(recursive: true) 346*c0909341SAndroid Build Coastguard Workerendforeach 347*c0909341SAndroid Build Coastguard Worker 348*c0909341SAndroid Build Coastguard Worker# Helper library for each bitdepth and architecture-specific flags 349*c0909341SAndroid Build Coastguard Workerforeach bitdepth : dav1d_bitdepths 350*c0909341SAndroid Build Coastguard Worker foreach subarch : libdav1d_arch_tmpl_sources.keys() 351*c0909341SAndroid Build Coastguard Worker libdav1d_bitdepth_objs += static_library( 352*c0909341SAndroid Build Coastguard Worker 'dav1d_arch_bitdepth_@0@_@1@'.format(bitdepth,subarch), 353*c0909341SAndroid Build Coastguard Worker libdav1d_arch_tmpl_sources[subarch], config_h_target, 354*c0909341SAndroid Build Coastguard Worker include_directories: dav1d_inc_dirs, 355*c0909341SAndroid Build Coastguard Worker dependencies : [stdatomic_dependencies], 356*c0909341SAndroid Build Coastguard Worker c_args : ['-DBITDEPTH=@0@'.format(bitdepth)] + libdav1d_flags + arch_flags.get(subarch, []), 357*c0909341SAndroid Build Coastguard Worker install : false, 358*c0909341SAndroid Build Coastguard Worker build_by_default : false, 359*c0909341SAndroid Build Coastguard Worker ).extract_all_objects(recursive: true) 360*c0909341SAndroid Build Coastguard Worker endforeach 361*c0909341SAndroid Build Coastguard Workerendforeach 362*c0909341SAndroid Build Coastguard Worker 363*c0909341SAndroid Build Coastguard Worker# The final dav1d library 364*c0909341SAndroid Build Coastguard Workerif host_machine.system() == 'windows' 365*c0909341SAndroid Build Coastguard Worker dav1d_soversion = '' 366*c0909341SAndroid Build Coastguard Workerelse 367*c0909341SAndroid Build Coastguard Worker dav1d_soversion = dav1d_api_version_major 368*c0909341SAndroid Build Coastguard Workerendif 369*c0909341SAndroid Build Coastguard Worker 370*c0909341SAndroid Build Coastguard Workerlibdav1d = library('dav1d', 371*c0909341SAndroid Build Coastguard Worker libdav1d_sources, 372*c0909341SAndroid Build Coastguard Worker libdav1d_asm_objs, 373*c0909341SAndroid Build Coastguard Worker libdav1d_rc_obj, 374*c0909341SAndroid Build Coastguard Worker rev_target, 375*c0909341SAndroid Build Coastguard Worker config_h_target, 376*c0909341SAndroid Build Coastguard Worker 377*c0909341SAndroid Build Coastguard Worker objects : [ 378*c0909341SAndroid Build Coastguard Worker libdav1d_bitdepth_objs, 379*c0909341SAndroid Build Coastguard Worker ], 380*c0909341SAndroid Build Coastguard Worker 381*c0909341SAndroid Build Coastguard Worker include_directories : dav1d_inc_dirs, 382*c0909341SAndroid Build Coastguard Worker dependencies : [ 383*c0909341SAndroid Build Coastguard Worker stdatomic_dependencies, 384*c0909341SAndroid Build Coastguard Worker thread_dependency, 385*c0909341SAndroid Build Coastguard Worker thread_compat_dep, 386*c0909341SAndroid Build Coastguard Worker libdl_dependency, 387*c0909341SAndroid Build Coastguard Worker ], 388*c0909341SAndroid Build Coastguard Worker c_args : [libdav1d_flags, api_export_flags], 389*c0909341SAndroid Build Coastguard Worker version : dav1d_soname_version, 390*c0909341SAndroid Build Coastguard Worker soversion : dav1d_soversion, 391*c0909341SAndroid Build Coastguard Worker install : true, 392*c0909341SAndroid Build Coastguard Worker) 393*c0909341SAndroid Build Coastguard Worker 394*c0909341SAndroid Build Coastguard Workerdav1d_dep = declare_dependency(link_with: libdav1d, 395*c0909341SAndroid Build Coastguard Worker include_directories : include_directories('../include') 396*c0909341SAndroid Build Coastguard Worker) 397*c0909341SAndroid Build Coastguard Worker 398*c0909341SAndroid Build Coastguard Worker# 399*c0909341SAndroid Build Coastguard Worker# Generate pkg-config .pc file 400*c0909341SAndroid Build Coastguard Worker# 401*c0909341SAndroid Build Coastguard Workerpkg_mod = import('pkgconfig') 402*c0909341SAndroid Build Coastguard Workerpkg_mod.generate(libraries: libdav1d, 403*c0909341SAndroid Build Coastguard Worker version: meson.project_version(), 404*c0909341SAndroid Build Coastguard Worker name: 'libdav1d', 405*c0909341SAndroid Build Coastguard Worker filebase: 'dav1d', 406*c0909341SAndroid Build Coastguard Worker description: 'AV1 decoding library' 407*c0909341SAndroid Build Coastguard Worker) 408