1load("//bazel:flags.bzl", "selects", "string_flag_with_values") 2load( 3 "//bazel:skia_rules.bzl", 4 "exports_files_legacy", 5 "generate_cpp_files_for_headers", 6 "select_multi", 7 "skia_cc_deps", 8 "skia_cc_library", 9 "skia_filegroup", 10 "split_srcs_and_hdrs", 11) 12 13package( 14 default_applicable_licenses = ["//:license"], 15) 16 17licenses(["notice"]) 18 19exports_files_legacy() 20 21CORE_FILES = [ 22 "SkCodec.cpp", 23 "SkCodecImageGenerator.cpp", 24 "SkCodecImageGenerator.h", 25 "SkCodecPriv.h", 26 "SkColorPalette.cpp", 27 "SkColorPalette.h", 28 "SkExif.cpp", 29 "SkFrameHolder.h", 30 "SkGainmapInfo.cpp", 31 "SkImageGenerator_FromEncoded.cpp", 32 "SkMaskSwizzler.cpp", 33 "SkMaskSwizzler.h", 34 "SkPixmapUtils.cpp", 35 "SkPixmapUtilsPriv.h", 36 "SkSampler.cpp", 37 "SkSampler.h", 38 "SkSwizzler.cpp", 39 "SkSwizzler.h", 40 "SkTiffUtility.cpp", 41 "SkTiffUtility.h", 42] 43 44split_srcs_and_hdrs( 45 name = "core", 46 files = CORE_FILES, 47) 48 49DECODE_ANDROID_FILES = [ 50 "SkAndroidCodec.cpp", 51 "SkAndroidCodecAdapter.cpp", 52 "SkAndroidCodecAdapter.h", 53 "SkSampledCodec.cpp", 54 "SkSampledCodec.h", 55] 56 57split_srcs_and_hdrs( 58 name = "decode_android", 59 files = DECODE_ANDROID_FILES, 60) 61 62DECODE_BMP_FILES = [ 63 "SkBmpBaseCodec.cpp", 64 "SkBmpBaseCodec.h", 65 "SkBmpCodec.cpp", 66 "SkBmpCodec.h", 67 "SkBmpMaskCodec.cpp", 68 "SkBmpMaskCodec.h", 69 "SkBmpRLECodec.cpp", 70 "SkBmpRLECodec.h", 71 "SkBmpStandardCodec.cpp", 72 "SkBmpStandardCodec.h", 73 "SkWbmpCodec.cpp", 74 "SkWbmpCodec.h", 75] 76 77split_srcs_and_hdrs( 78 name = "decode_bmp", 79 files = DECODE_BMP_FILES, 80) 81 82DECODE_GIF_FILES = [ 83 "SkScalingCodec.h", 84 "SkWuffsCodec.cpp", 85] 86 87split_srcs_and_hdrs( 88 name = "decode_gif", 89 files = DECODE_GIF_FILES, 90) 91 92DECODE_JPEG_FILES = [ 93 "SkEncodedInfo.cpp", 94 "SkJpegCodec.cpp", 95 "SkJpegCodec.h", 96 "SkJpegDecoderMgr.cpp", 97 "SkJpegDecoderMgr.h", 98 "SkJpegMetadataDecoderImpl.cpp", 99 "SkJpegMetadataDecoderImpl.h", 100 "SkJpegSourceMgr.cpp", 101 "SkJpegSourceMgr.h", 102 "SkJpegUtility.cpp", 103 "SkJpegUtility.h", 104 "SkParseEncodedOrigin.cpp", 105 "SkParseEncodedOrigin.h", 106] 107 108split_srcs_and_hdrs( 109 name = "decode_jpeg", 110 files = DECODE_JPEG_FILES, 111) 112 113skia_filegroup( 114 name = "shared_jpeg_hdrs", # needed for both encoding and decoding 115 srcs = [ 116 "SkJpegConstants.h", 117 ], 118 visibility = ["//src/encode:__pkg__"], 119) 120 121skia_filegroup( 122 name = "xmp_srcs", 123 srcs = [ 124 "SkXmp.cpp", 125 ], 126) 127 128split_srcs_and_hdrs( 129 name = "jpeg_xmp", 130 files = [ 131 "SkJpegXmp.cpp", 132 "SkJpegXmp.h", 133 ], 134) 135 136DECODE_PNG_FILES = [ 137 "SkEncodedInfo.cpp", 138 "SkIcoCodec.cpp", 139 "SkIcoCodec.h", 140 "SkPngCodec.cpp", 141 "SkPngCodec.h", 142] 143 144split_srcs_and_hdrs( 145 name = "decode_png", 146 files = DECODE_PNG_FILES, 147) 148 149DECODE_RAW_FILES = [ 150 "SkRawCodec.cpp", 151 "SkRawCodec.h", 152] 153 154split_srcs_and_hdrs( 155 name = "decode_raw", 156 files = DECODE_RAW_FILES, 157) 158 159DECODE_WEBP_FILES = [ 160 "SkEncodedInfo.cpp", 161 "SkParseEncodedOrigin.cpp", 162 "SkParseEncodedOrigin.h", 163 "SkScalingCodec.h", 164 "SkWebpCodec.cpp", 165 "SkWebpCodec.h", 166] 167 168split_srcs_and_hdrs( 169 name = "decode_webp", 170 files = DECODE_WEBP_FILES, 171) 172 173split_srcs_and_hdrs( 174 name = "decode_avif", 175 files = [ 176 "SkAvifCodec.cpp", 177 "SkAvifCodec.h", 178 "SkScalingCodec.h", 179 ], 180) 181 182split_srcs_and_hdrs( 183 name = "decode_jxl", 184 files = [ 185 "SkJpegxlCodec.cpp", 186 "SkJpegxlCodec.h", 187 "SkScalingCodec.h", 188 ], 189) 190 191string_flag_with_values( 192 name = "include_decoder", 193 multiple = True, 194 values = [ 195 "avif_decode_codec", 196 "gif_decode_codec", 197 "jpeg_decode_codec", 198 "jxl_decode_codec", 199 "png_decode_codec", 200 "raw_decode_codec", 201 "webp_decode_codec", 202 ], 203) 204 205selects.config_setting_group( 206 name = "needs_jpeg", 207 match_any = [ 208 ":jpeg_decode_codec", 209 ":raw_decode_codec", 210 ], 211) 212 213selects.config_setting_group( 214 name = "needs_jpeg_priv", 215 match_any = [ 216 ":needs_jpeg", 217 "//src/encode:jpeg_encode_codec", 218 ], 219) 220 221selects.config_setting_group( 222 name = "needs_png_priv", 223 match_any = [ 224 ":png_decode_codec", 225 "//src/encode:png_encode_codec", 226 ], 227) 228 229skia_filegroup( 230 name = "srcs", 231 srcs = [ 232 ":core_srcs", 233 ":decode_android_srcs", 234 ":decode_bmp_srcs", 235 ":xmp_srcs", # TODO: Make this optional 236 ] + select_multi( 237 { 238 ":avif_decode_codec": [":decode_avif_srcs"], 239 ":gif_decode_codec": [":decode_gif_srcs"], 240 ":needs_jpeg": [":decode_jpeg_srcs"], 241 ":jxl_decode_codec": [":decode_jxl_srcs"], 242 ":png_decode_codec": [":decode_png_srcs"], 243 ":raw_decode_codec": [":decode_raw_srcs"], 244 ":webp_decode_codec": [":decode_webp_srcs"], 245 }, 246 ), 247 visibility = ["//src:__pkg__"], 248) 249 250skia_filegroup( 251 name = "private_hdrs", 252 srcs = [ 253 ":core_hdrs", 254 ":decode_android_hdrs", 255 ":decode_bmp_hdrs", 256 ] + select({ 257 ":needs_jpeg_priv": ["SkJpegPriv.h"], # used by src/encode/SkJPEGWriteUtility 258 "//conditions:default": [], 259 }) + select({ 260 ":needs_png_priv": ["SkPngPriv.h"], # used by src/encode/SkPngEncoder 261 "//conditions:default": [], 262 }) + select_multi( 263 { 264 ":avif_decode_codec": [":decode_avif_hdrs"], 265 ":gif_decode_codec": [":decode_gif_hdrs"], 266 ":needs_jpeg": [ 267 ":decode_jpeg_hdrs", 268 ":shared_jpeg_hdrs", 269 ], 270 ":jxl_decode_codec": [":decode_jxl_hdrs"], 271 ":png_decode_codec": [":decode_png_hdrs"], 272 ":raw_decode_codec": [":decode_raw_hdrs"], 273 ":webp_decode_codec": [":decode_webp_hdrs"], 274 }, 275 ), 276 visibility = ["//src:__pkg__"], 277) 278 279skia_cc_deps( 280 name = "deps", 281 visibility = ["//src:__pkg__"], 282 deps = select_multi( 283 { 284 ":avif_decode_codec": ["@libavif"], 285 ":gif_decode_codec": ["@wuffs"], 286 ":needs_jpeg": ["@libjpeg_turbo"], 287 "jxl_decode_codec": ["@libjxl"], 288 ":png_decode_codec": ["@libpng"], 289 ":raw_decode_codec": [ 290 "@dng_sdk", 291 "@piex", 292 ], 293 ":webp_decode_codec": ["@libwebp"], 294 }, 295 ), 296) 297 298PRIVATE_CODEC_HEADERS = [ 299 "SkCodecPriv.h", 300 "SkColorPalette.h", 301 "SkFrameHolder.h", 302 "SkMaskSwizzler.h", 303 "SkParseEncodedOrigin.h", 304 "SkSampler.h", 305 "SkScalingCodec.h", 306 "SkSwizzler.h", 307 "SkPixmapUtilsPriv.h", 308 "//include/private:decode_srcs", 309] 310 311# We put any file that is used by more than one codec here to avoid potential issues if clients 312# depend on multiple codecs. This is not a problem for a statically linked binary, but could maybe 313# cause issues with producing a shared library (e.g. duplicate symbols showing up). 314skia_cc_library( 315 name = "any_decoder", 316 srcs = [ 317 "SkCodec.cpp", 318 "SkCodecImageGenerator.cpp", 319 "SkCodecImageGenerator.h", 320 "SkColorPalette.cpp", 321 "SkEncodedInfo.cpp", 322 "SkExif.cpp", 323 "SkGainmapInfo.cpp", 324 "SkImageGenerator_FromEncoded.cpp", 325 "SkMaskSwizzler.cpp", 326 "SkParseEncodedOrigin.cpp", 327 "SkPixmapUtils.cpp", 328 "SkSampler.cpp", 329 "SkSwizzler.cpp", 330 "SkTiffUtility.cpp", 331 "SkTiffUtility.h", 332 "//include/codec:any_codec_hdrs", 333 ], 334 hdrs = PRIVATE_CODEC_HEADERS, 335 features = ["layering_check"], 336 local_defines = ["SK_DISABLE_LEGACY_INIT_DECODERS"], 337 visibility = [ 338 "//src/ports:__pkg__", 339 ], 340 deps = [ 341 "//modules/skcms", 342 "//src/base", 343 "//src/core", 344 "//src/core:core_priv", 345 ], 346) 347 348skia_cc_library( 349 name = "codec_support", 350 # This is its own rule (with no srcs) to explicitly expose any_codec_hdrs 351 # as public in case a client does not want to use any of our codecs, but 352 # still register their own and/or make use of SkImage::DeferredFromEncodedData 353 hdrs = [ 354 "//include/codec:any_codec_hdrs", 355 ], 356 visibility = [ 357 "//:__pkg__", 358 ], 359 deps = [ 360 ":any_decoder", 361 ], 362) 363 364skia_cc_library( 365 name = "codec_support_priv", 366 hdrs = [ 367 "SkCodecImageGenerator.h", 368 "//include/codec:any_codec_hdrs", 369 ] + PRIVATE_CODEC_HEADERS, 370 visibility = [ 371 "//modules/skottie:__pkg__", 372 "//modules/skresources:__pkg__", 373 "//src/android:__pkg__", 374 ], 375 deps = [ 376 ":any_decoder", 377 ], 378) 379 380skia_cc_library( 381 name = "android_codec", 382 srcs = [ 383 "SkAndroidCodec.cpp", 384 "SkAndroidCodecAdapter.cpp", 385 "SkAndroidCodecAdapter.h", 386 "SkSampledCodec.cpp", 387 "SkSampledCodec.h", 388 ], 389 hdrs = [ 390 "//include/codec:android_public_hdrs", 391 "//include/codec:any_codec_hdrs", 392 ], 393 features = ["layering_check"], 394 visibility = ["//:__subpackages__"], 395 deps = [ 396 ":any_decoder", 397 "//modules/skcms", 398 "//src/base", 399 "//src/core", 400 "//src/core:core_priv", 401 ], 402) 403 404skia_cc_library( 405 name = "bmp_decode", 406 srcs = [ 407 "SkBmpBaseCodec.cpp", 408 "SkBmpBaseCodec.h", 409 "SkBmpCodec.cpp", 410 "SkBmpCodec.h", 411 "SkBmpMaskCodec.cpp", 412 "SkBmpMaskCodec.h", 413 "SkBmpRLECodec.cpp", 414 "SkBmpRLECodec.h", 415 "SkBmpStandardCodec.cpp", 416 "SkBmpStandardCodec.h", 417 ], 418 hdrs = [ 419 "//include/codec:any_codec_hdrs", 420 "//include/codec:bmp_public_hdrs", 421 ], 422 defines = ["SK_CODEC_DECODES_BMP"], 423 features = ["layering_check"], 424 visibility = ["//:__subpackages__"], 425 deps = [ 426 ":any_decoder", 427 "//modules/skcms", 428 "//src/base", 429 "//src/core", 430 "//src/core:core_priv", 431 ], 432) 433 434skia_cc_library( 435 name = "gif_decode", 436 srcs = [ 437 "SkWuffsCodec.cpp", 438 ], 439 hdrs = [ 440 "//include/codec:any_codec_hdrs", 441 "//include/codec:gif_public_hdrs", 442 ], 443 defines = ["SK_CODEC_DECODES_GIF"], 444 features = ["layering_check"], 445 visibility = ["//:__subpackages__"], 446 deps = [ 447 ":any_decoder", 448 "//modules/skcms", 449 "//src/base", 450 "//src/core", 451 "//src/core:core_priv", 452 "@wuffs", 453 ], 454) 455 456skia_cc_library( 457 name = "ico_decode", 458 srcs = [ 459 "SkBmpCodec.h", 460 "SkIcoCodec.cpp", 461 "SkIcoCodec.h", 462 "SkPngCodec.h", 463 ], 464 hdrs = [ 465 "//include/codec:any_codec_hdrs", 466 "//include/codec:ico_public_hdrs", 467 ], 468 defines = ["SK_CODEC_DECODES_ICO"], 469 features = ["layering_check"], 470 visibility = ["//:__subpackages__"], 471 deps = [ 472 "//src/base", 473 "//src/core", 474 "//src/core:core_priv", 475 "//modules/skcms", 476 ":any_decoder", 477 # icos can be either PNG or BMP 478 ":bmp_decode", 479 ":png_decode", 480 ], 481) 482 483skia_filegroup( 484 name = "common_jpeg_srcs", 485 srcs = [ 486 "SkJpegConstants.h", 487 "SkJpegPriv.h", 488 ], 489 visibility = ["//src/encode:__pkg__"], 490) 491 492skia_cc_library( 493 name = "jpeg_decode", 494 srcs = [ 495 "SkJpegCodec.cpp", 496 "SkJpegCodec.h", 497 "SkJpegDecoderMgr.cpp", 498 "SkJpegDecoderMgr.h", 499 "SkJpegMetadataDecoderImpl.cpp", 500 "SkJpegMetadataDecoderImpl.h", 501 "SkJpegSourceMgr.cpp", 502 "SkJpegSourceMgr.h", 503 "SkJpegUtility.cpp", 504 "SkJpegUtility.h", 505 ":common_jpeg_srcs", 506 "//include/private:jpeg_decode_srcs", 507 ], 508 hdrs = [ 509 "//include/codec:any_codec_hdrs", 510 "//include/codec:jpeg_public_hdrs", 511 ], 512 defines = ["SK_CODEC_DECODES_JPEG"], 513 features = ["layering_check"], 514 visibility = ["//:__subpackages__"], 515 deps = [ 516 ":any_decoder", 517 "//modules/skcms", 518 "//src/base", 519 "//src/core", 520 "//src/core:core_priv", 521 "@libjpeg_turbo", 522 ], 523) 524 525skia_cc_library( 526 name = "jpegxl_decode", 527 srcs = [ 528 "SkJpegxlCodec.cpp", 529 "SkJpegxlCodec.h", 530 ":common_jpeg_srcs", 531 ], 532 hdrs = [ 533 "//include/codec:any_codec_hdrs", 534 "//include/codec:jpegxl_public_hdrs", 535 ], 536 defines = ["SK_CODEC_DECODES_JPEGXL"], 537 features = ["layering_check"], 538 visibility = ["//:__subpackages__"], 539 deps = [ 540 ":any_decoder", 541 "//modules/skcms", 542 "//src/base", 543 "//src/core", 544 "//src/core:core_priv", 545 "@libjxl", 546 ], 547) 548 549skia_filegroup( 550 name = "buffet_png_srcs", 551 srcs = [ 552 "SkPngCodec.cpp", 553 "SkPngCodec.h", 554 ], 555) 556 557skia_filegroup( 558 name = "common_png_srcs", 559 srcs = [ 560 "SkPngPriv.h", 561 ], 562 visibility = ["//src/encode:__pkg__"], 563) 564 565skia_cc_library( 566 name = "png_decode", 567 srcs = [ 568 ":buffet_png_srcs", 569 ":common_png_srcs", 570 ], 571 hdrs = [ 572 "//include/codec:any_codec_hdrs", 573 "//include/codec:png_public_hdrs", 574 ], 575 defines = ["SK_CODEC_DECODES_PNG"], 576 features = ["layering_check"], 577 visibility = ["//:__subpackages__"], 578 deps = [ 579 ":any_decoder", 580 "//modules/skcms", 581 "//src/base", 582 "//src/core", 583 "//src/core:core_priv", 584 "@libpng", 585 ], 586) 587 588skia_cc_library( 589 name = "wbmp_decode", 590 srcs = [ 591 "SkBmpBaseCodec.h", 592 "SkBmpCodec.h", 593 "SkBmpMaskCodec.h", 594 "SkBmpRLECodec.h", 595 "SkBmpStandardCodec.h", 596 "SkWbmpCodec.cpp", 597 "SkWbmpCodec.h", 598 "//include/codec:bmp_public_hdrs", 599 ], 600 hdrs = [ 601 "//include/codec:any_codec_hdrs", 602 "//include/codec:wbmp_public_hdrs", 603 ], 604 defines = ["SK_CODEC_DECODES_WBMP"], 605 features = ["layering_check"], 606 visibility = ["//:__subpackages__"], 607 deps = [ 608 ":any_decoder", 609 ":bmp_decode", # Avoid ODR violations by not duplicating .cpp files 610 "//modules/skcms", 611 "//src/base", 612 "//src/core", 613 "//src/core:core_priv", 614 ], 615) 616 617skia_cc_library( 618 name = "webp_decode", 619 srcs = [ 620 "SkWebpCodec.cpp", 621 "SkWebpCodec.h", 622 ], 623 hdrs = [ 624 "//include/codec:any_codec_hdrs", 625 "//include/codec:webp_public_hdrs", 626 ], 627 defines = ["SK_CODEC_DECODES_WEBP"], 628 features = ["layering_check"], 629 visibility = ["//:__subpackages__"], 630 deps = [ 631 ":any_decoder", 632 "//modules/skcms", 633 "//src/base", 634 "//src/core", 635 "//src/core:core_priv", 636 "@libwebp", 637 ], 638) 639 640generate_cpp_files_for_headers( 641 name = "headers_to_compile", 642 headers = [ 643 "SkPixmapUtilsPriv.h", 644 "SkScalingCodec.h", 645 ], 646) 647