xref: /aosp_15_r20/external/libdav1d/Android.bp (revision c09093415860a1c2373dacd84c4fde00c507cdfd)
1// Copyright 2023 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//      http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package {
16    default_applicable_licenses: ["external_libdav1d_license"],
17}
18
19license {
20    name: "external_libdav1d_license",
21    visibility: [":__subpackages__"],
22    license_kinds: [
23        "SPDX-license-identifier-Apache-2.0",
24    ],
25    license_text: [
26        "LICENSE",
27    ],
28}
29
30cc_defaults {
31    name: "libdav1d_defaults",
32    host_supported: true,
33    vendor_available: true,
34
35    export_include_dirs: [
36        "include",
37    ],
38
39    local_include_dirs: [
40        "include",
41        "include/common",
42        "include/dav1d",
43        "src",
44    ],
45
46    cflags: [
47        "-D_FILE_OFFSET_BITS=64",
48        "-D_ISOC99_SOURCE",
49        "-Wall",
50        "-Werror",
51        "-Werror=vla",
52        "-Wextra",
53        "-Winvalid-pch",
54        "-Wno-error=unused-parameter",
55        "-Wno-incompatible-pointer-types",
56        "-Wno-missing-field-initializers",
57        "-Wundef",
58        "-fPIC",
59        "-ffast-math",
60        "-std=c99",
61    ],
62
63    arch: {
64        arm64: {
65            local_include_dirs: [
66                "config/arm64",
67                "src/arm",
68            ],
69        },
70
71        arm: {
72            local_include_dirs: [
73                "config/arm32",
74                "src/arm",
75            ],
76        },
77
78        x86_64: {
79            local_include_dirs: [
80                "config/x86_64",
81                "src/x86",
82            ],
83        },
84
85        x86: {
86            local_include_dirs: [
87                "config/x86_32",
88                "src/x86",
89            ],
90        },
91
92        riscv64: {
93            local_include_dirs: [
94                "config/riscv64",
95            ],
96        },
97    },
98
99    sanitize: {
100        integer_overflow: true,
101        misc_undefined: ["bounds"],
102        cfi: true,
103        config: {
104            cfi_assembly_support: true,
105        },
106        blocklist: "libdav1d_blocklist.txt",
107    },
108
109    min_sdk_version: "29",
110    apex_available: [
111        "//apex_available:platform",
112        "com.android.media.swcodec",
113    ],
114}
115
116libdav1d_tmpl_srcs = [
117    "src/cdef_apply_tmpl.c",
118    "src/cdef_tmpl.c",
119    "src/fg_apply_tmpl.c",
120    "src/filmgrain_tmpl.c",
121    "src/ipred_prepare_tmpl.c",
122    "src/ipred_tmpl.c",
123    "src/itx_tmpl.c",
124    "src/lf_apply_tmpl.c",
125    "src/loopfilter_tmpl.c",
126    "src/looprestoration_tmpl.c",
127    "src/lr_apply_tmpl.c",
128    "src/mc_tmpl.c",
129    "src/recon_tmpl.c",
130]
131
132cc_library_static {
133    name: "libdav1d_dotprod_i8mm",
134    defaults: [
135        "libdav1d_defaults",
136    ],
137    vendor_available: true,
138    visibility: ["//visibility:private"],
139
140    cflags: [
141        "-Xclang -target-feature",
142        // This comment prevents bpfmt from sorting the flags incorrectly.
143        "-Xclang +dotprod",
144        // This comment prevents bpfmt from sorting the flags incorrectly.
145        "-Xclang -target-feature",
146        // This comment prevents bpfmt from sorting the flags incorrectly.
147        "-Xclang +i8mm",
148    ],
149
150    arch: {
151        arm64: {
152            srcs: [
153                "src/arm/64/mc_dotprod.S",
154            ],
155        },
156    },
157}
158
159cc_library_static {
160    name: "libdav1d_sve2",
161    defaults: [
162        "libdav1d_defaults",
163    ],
164    vendor_available: true,
165    visibility: ["//visibility:private"],
166
167    cflags: [
168        "-Xclang -target-feature",
169        // This comment prevents bpfmt from sorting the flags incorrectly.
170        "-Xclang +sve2",
171    ],
172
173    arch: {
174        arm64: {
175            srcs: [
176                "src/arm/64/mc16_sve.S",
177            ],
178        },
179    },
180}
181
182cc_library_static {
183    name: "libdav1d_8bit",
184    defaults: [
185        "libdav1d_defaults",
186    ],
187    cflags: [
188        "-DBITDEPTH=8",
189    ],
190    srcs: libdav1d_tmpl_srcs,
191
192    arch: {
193        arm64: {
194            srcs: [
195                "src/arm/64/cdef.S",
196                "src/arm/64/filmgrain.S",
197                "src/arm/64/ipred.S",
198                "src/arm/64/itx.S",
199                "src/arm/64/loopfilter.S",
200                "src/arm/64/looprestoration.S",
201                "src/arm/64/mc.S",
202            ],
203        },
204
205        arm: {
206            srcs: [
207                "src/arm/32/cdef.S",
208                "src/arm/32/filmgrain.S",
209                "src/arm/32/ipred.S",
210                "src/arm/32/itx.S",
211                "src/arm/32/loopfilter.S",
212                "src/arm/32/looprestoration.S",
213                "src/arm/32/mc.S",
214            ],
215        },
216    },
217}
218
219cc_library_static {
220    name: "libdav1d_16bit",
221    defaults: [
222        "libdav1d_defaults",
223    ],
224    cflags: [
225        "-DBITDEPTH=16",
226    ],
227    srcs: libdav1d_tmpl_srcs,
228
229    arch: {
230        arm64: {
231            srcs: [
232                "src/arm/64/cdef16.S",
233                "src/arm/64/filmgrain16.S",
234                "src/arm/64/ipred16.S",
235                "src/arm/64/itx16.S",
236                "src/arm/64/loopfilter16.S",
237                "src/arm/64/looprestoration16.S",
238                "src/arm/64/mc16.S",
239            ],
240        },
241
242        arm: {
243            srcs: [
244                "src/arm/32/cdef16.S",
245                "src/arm/32/filmgrain16.S",
246                "src/arm/32/ipred16.S",
247                "src/arm/32/itx16.S",
248                "src/arm/32/loopfilter16.S",
249                "src/arm/32/looprestoration16.S",
250                "src/arm/32/mc16.S",
251            ],
252        },
253    },
254}
255
256cc_library_static {
257    name: "libdav1d",
258    defaults: [
259        "libdav1d_defaults",
260    ],
261
262    srcs: [
263        "src/cdf.c",
264        "src/ctx.c",
265        "src/cpu.c",
266        "src/data.c",
267        "src/decode.c",
268        "src/dequant_tables.c",
269        "src/getbits.c",
270        "src/intra_edge.c",
271        "src/itx_1d.c",
272        "src/lf_mask.c",
273        "src/lib.c",
274        "src/log.c",
275        "src/mem.c",
276        "src/msac.c",
277        "src/obu.c",
278        "src/pal.c",
279        "src/picture.c",
280        "src/qm.c",
281        "src/ref.c",
282        "src/refmvs.c",
283        "src/scan.c",
284        "src/tables.c",
285        "src/thread_task.c",
286        "src/warpmv.c",
287        "src/wedge.c",
288    ],
289
290    arch: {
291        arm64: {
292            srcs: [
293                "src/arm/64/looprestoration_common.S",
294                "src/arm/64/msac.S",
295                "src/arm/64/refmvs.S",
296                "src/arm/cpu.c",
297            ],
298        },
299
300        arm: {
301            srcs: [
302                "src/arm/32/looprestoration_common.S",
303                "src/arm/32/msac.S",
304                "src/arm/32/refmvs.S",
305                "src/arm/cpu.c",
306            ],
307        },
308
309        x86_64: {
310            srcs: [
311                "src/x86/cpu.c",
312            ],
313        },
314
315        x86: {
316            srcs: [
317                "src/x86/cpu.c",
318            ],
319        },
320    },
321
322    whole_static_libs: [
323        "libdav1d_8bit",
324        "libdav1d_16bit",
325        "libdav1d_dotprod_i8mm",
326        "libdav1d_sve2",
327    ],
328}
329
330cc_defaults {
331    name: "dav1d_test_defaults",
332    host_supported: true,
333
334    cflags: [
335        "-Wno-error=unused-parameter",
336    ],
337
338    local_include_dirs: [
339        "include",
340        "include/common",
341        "include/dav1d",
342        "src",
343        "tests/libfuzzer",
344        "tools",
345        "tools/input",
346        "tools/output",
347    ],
348
349    arch: {
350        arm64: {
351            local_include_dirs: [
352                "config/arm64",
353            ],
354
355        },
356        arm: {
357            local_include_dirs: [
358                "config/arm32",
359            ],
360
361        },
362        x86_64: {
363            local_include_dirs: [
364                "config/x86_64",
365            ],
366
367        },
368        x86: {
369            local_include_dirs: [
370                "config/x86_32",
371            ],
372
373        },
374        riscv64: {
375            local_include_dirs: [
376                "config/riscv64",
377            ],
378
379        },
380    },
381
382    static_libs: [
383        "libdav1d",
384    ],
385}
386
387cc_defaults {
388    name: "dav1d_fuzzer_defaults",
389    defaults: [
390        "dav1d_test_defaults",
391    ],
392    srcs: [
393        "tests/libfuzzer/dav1d_fuzzer.c",
394    ],
395
396    fuzz_config: {
397        cc: ["[email protected]"],
398        componentid: 25690,
399    },
400}
401
402cc_fuzz {
403    name: "dav1d_fuzzer",
404    defaults: [
405        "dav1d_fuzzer_defaults",
406    ],
407}
408
409cc_fuzz {
410    name: "dav1d_fuzzer_mt",
411    defaults: [
412        "dav1d_fuzzer_defaults",
413    ],
414
415    cflags: [
416        "-DDAV1D_MT_FUZZING=1",
417    ],
418}
419
420cc_binary {
421    name: "dav1d",
422    defaults: [
423        "dav1d_test_defaults",
424    ],
425
426    srcs: [
427        "tools/dav1d.c",
428        "tools/dav1d_cli_parse.c",
429        "tools/input/annexb.c",
430        "tools/input/input.c",
431        "tools/input/ivf.c",
432        "tools/input/section5.c",
433        "tools/output/md5.c",
434        "tools/output/null.c",
435        "tools/output/output.c",
436        "tools/output/y4m2.c",
437        "tools/output/yuv.c",
438    ],
439}
440