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_8bit", 134 defaults: [ 135 "libdav1d_defaults", 136 ], 137 cflags: [ 138 "-DBITDEPTH=8", 139 ], 140 srcs: libdav1d_tmpl_srcs, 141 142 arch: { 143 arm64: { 144 srcs: [ 145 "src/arm/64/cdef.S", 146 "src/arm/64/filmgrain.S", 147 "src/arm/64/ipred.S", 148 "src/arm/64/itx.S", 149 "src/arm/64/loopfilter.S", 150 "src/arm/64/looprestoration.S", 151 "src/arm/64/mc.S", 152 ], 153 }, 154 155 arm: { 156 srcs: [ 157 "src/arm/32/cdef.S", 158 "src/arm/32/filmgrain.S", 159 "src/arm/32/ipred.S", 160 "src/arm/32/itx.S", 161 "src/arm/32/loopfilter.S", 162 "src/arm/32/looprestoration.S", 163 "src/arm/32/mc.S", 164 ], 165 }, 166 }, 167} 168 169cc_library_static { 170 name: "libdav1d_16bit", 171 defaults: [ 172 "libdav1d_defaults", 173 ], 174 cflags: [ 175 "-DBITDEPTH=16", 176 ], 177 srcs: libdav1d_tmpl_srcs, 178 179 arch: { 180 arm64: { 181 srcs: [ 182 "src/arm/64/cdef16.S", 183 "src/arm/64/filmgrain16.S", 184 "src/arm/64/ipred16.S", 185 "src/arm/64/itx16.S", 186 "src/arm/64/loopfilter16.S", 187 "src/arm/64/looprestoration16.S", 188 "src/arm/64/mc16.S", 189 ], 190 }, 191 192 arm: { 193 srcs: [ 194 "src/arm/32/cdef16.S", 195 "src/arm/32/filmgrain16.S", 196 "src/arm/32/ipred16.S", 197 "src/arm/32/itx16.S", 198 "src/arm/32/loopfilter16.S", 199 "src/arm/32/looprestoration16.S", 200 "src/arm/32/mc16.S", 201 ], 202 }, 203 }, 204} 205 206cc_library_static { 207 name: "libdav1d", 208 defaults: [ 209 "libdav1d_defaults", 210 ], 211 212 srcs: [ 213 "src/cdf.c", 214 "src/cpu.c", 215 "src/data.c", 216 "src/decode.c", 217 "src/dequant_tables.c", 218 "src/getbits.c", 219 "src/intra_edge.c", 220 "src/itx_1d.c", 221 "src/lf_mask.c", 222 "src/lib.c", 223 "src/log.c", 224 "src/mem.c", 225 "src/msac.c", 226 "src/obu.c", 227 "src/pal.c", 228 "src/picture.c", 229 "src/qm.c", 230 "src/ref.c", 231 "src/refmvs.c", 232 "src/scan.c", 233 "src/tables.c", 234 "src/thread_task.c", 235 "src/warpmv.c", 236 "src/wedge.c", 237 ], 238 239 arch: { 240 arm64: { 241 srcs: [ 242 "src/arm/64/looprestoration_common.S", 243 "src/arm/64/msac.S", 244 "src/arm/64/refmvs.S", 245 "src/arm/cpu.c", 246 ], 247 }, 248 249 arm: { 250 srcs: [ 251 "src/arm/32/looprestoration_common.S", 252 "src/arm/32/msac.S", 253 "src/arm/32/refmvs.S", 254 "src/arm/cpu.c", 255 ], 256 }, 257 258 x86_64: { 259 srcs: [ 260 "src/x86/cpu.c", 261 ], 262 }, 263 264 x86: { 265 srcs: [ 266 "src/x86/cpu.c", 267 ], 268 }, 269 }, 270 271 whole_static_libs: [ 272 "libdav1d_8bit", 273 "libdav1d_16bit", 274 ], 275} 276 277cc_defaults { 278 name: "dav1d_test_defaults", 279 host_supported: true, 280 281 cflags: [ 282 "-Wno-error=unused-parameter", 283 ], 284 285 local_include_dirs: [ 286 "include", 287 "include/common", 288 "include/dav1d", 289 "src", 290 "tests/libfuzzer", 291 "tools", 292 "tools/input", 293 "tools/output", 294 ], 295 296 arch: { 297 arm64: { 298 local_include_dirs: [ 299 "config/arm64", 300 ], 301 302 }, 303 arm: { 304 local_include_dirs: [ 305 "config/arm32", 306 ], 307 308 }, 309 x86_64: { 310 local_include_dirs: [ 311 "config/x86_64", 312 ], 313 314 }, 315 x86: { 316 local_include_dirs: [ 317 "config/x86_32", 318 ], 319 320 }, 321 riscv64: { 322 local_include_dirs: [ 323 "config/riscv64", 324 ], 325 326 }, 327 }, 328 329 static_libs: [ 330 "libdav1d", 331 ], 332} 333 334cc_defaults { 335 name: "dav1d_fuzzer_defaults", 336 defaults: [ 337 "dav1d_test_defaults", 338 ], 339 srcs: [ 340 "tests/libfuzzer/dav1d_fuzzer.c", 341 ], 342 343 fuzz_config: { 344 cc: ["kyslov@google.com"], 345 componentid: 25690, 346 }, 347} 348 349cc_fuzz { 350 name: "dav1d_fuzzer", 351 defaults: [ 352 "dav1d_fuzzer_defaults", 353 ], 354} 355 356cc_fuzz { 357 name: "dav1d_fuzzer_mt", 358 defaults: [ 359 "dav1d_fuzzer_defaults", 360 ], 361 362 cflags: [ 363 "-DDAV1D_MT_FUZZING=1", 364 ], 365} 366 367cc_binary { 368 name: "dav1d", 369 defaults: [ 370 "dav1d_test_defaults", 371 ], 372 373 srcs: [ 374 "tools/dav1d.c", 375 "tools/dav1d_cli_parse.c", 376 "tools/input/annexb.c", 377 "tools/input/input.c", 378 "tools/input/ivf.c", 379 "tools/input/section5.c", 380 "tools/output/md5.c", 381 "tools/output/null.c", 382 "tools/output/output.c", 383 "tools/output/y4m2.c", 384 "tools/output/yuv.c", 385 ], 386} 387