xref: /aosp_15_r20/external/libdav1d/src/meson.build (revision c09093415860a1c2373dacd84c4fde00c507cdfd)
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