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