load("//bazel:flags.bzl", "selects", "string_flag_with_values") load( "//bazel:skia_rules.bzl", "exports_files_legacy", "generate_cpp_files_for_headers", "select_multi", "skia_cc_deps", "skia_cc_library", "skia_filegroup", "split_srcs_and_hdrs", ) package( default_applicable_licenses = ["//:license"], ) licenses(["notice"]) exports_files_legacy() CORE_FILES = [ "SkCodec.cpp", "SkCodecImageGenerator.cpp", "SkCodecImageGenerator.h", "SkCodecPriv.h", "SkColorPalette.cpp", "SkColorPalette.h", "SkExif.cpp", "SkFrameHolder.h", "SkGainmapInfo.cpp", "SkImageGenerator_FromEncoded.cpp", "SkMaskSwizzler.cpp", "SkMaskSwizzler.h", "SkPixmapUtils.cpp", "SkPixmapUtilsPriv.h", "SkSampler.cpp", "SkSampler.h", "SkSwizzler.cpp", "SkSwizzler.h", "SkTiffUtility.cpp", "SkTiffUtility.h", ] split_srcs_and_hdrs( name = "core", files = CORE_FILES, ) DECODE_ANDROID_FILES = [ "SkAndroidCodec.cpp", "SkAndroidCodecAdapter.cpp", "SkAndroidCodecAdapter.h", "SkSampledCodec.cpp", "SkSampledCodec.h", ] split_srcs_and_hdrs( name = "decode_android", files = DECODE_ANDROID_FILES, ) DECODE_BMP_FILES = [ "SkBmpBaseCodec.cpp", "SkBmpBaseCodec.h", "SkBmpCodec.cpp", "SkBmpCodec.h", "SkBmpMaskCodec.cpp", "SkBmpMaskCodec.h", "SkBmpRLECodec.cpp", "SkBmpRLECodec.h", "SkBmpStandardCodec.cpp", "SkBmpStandardCodec.h", "SkWbmpCodec.cpp", "SkWbmpCodec.h", ] split_srcs_and_hdrs( name = "decode_bmp", files = DECODE_BMP_FILES, ) DECODE_GIF_FILES = [ "SkScalingCodec.h", "SkWuffsCodec.cpp", ] split_srcs_and_hdrs( name = "decode_gif", files = DECODE_GIF_FILES, ) DECODE_JPEG_FILES = [ "SkEncodedInfo.cpp", "SkJpegCodec.cpp", "SkJpegCodec.h", "SkJpegDecoderMgr.cpp", "SkJpegDecoderMgr.h", "SkJpegMetadataDecoderImpl.cpp", "SkJpegMetadataDecoderImpl.h", "SkJpegSourceMgr.cpp", "SkJpegSourceMgr.h", "SkJpegUtility.cpp", "SkJpegUtility.h", "SkParseEncodedOrigin.cpp", "SkParseEncodedOrigin.h", ] split_srcs_and_hdrs( name = "decode_jpeg", files = DECODE_JPEG_FILES, ) skia_filegroup( name = "shared_jpeg_hdrs", # needed for both encoding and decoding srcs = [ "SkJpegConstants.h", ], visibility = ["//src/encode:__pkg__"], ) skia_filegroup( name = "xmp_srcs", srcs = [ "SkXmp.cpp", ], ) split_srcs_and_hdrs( name = "jpeg_xmp", files = [ "SkJpegXmp.cpp", "SkJpegXmp.h", ], ) DECODE_PNG_FILES = [ "SkEncodedInfo.cpp", "SkIcoCodec.cpp", "SkIcoCodec.h", "SkPngCodec.cpp", "SkPngCodec.h", ] split_srcs_and_hdrs( name = "decode_png", files = DECODE_PNG_FILES, ) DECODE_RAW_FILES = [ "SkRawCodec.cpp", "SkRawCodec.h", ] split_srcs_and_hdrs( name = "decode_raw", files = DECODE_RAW_FILES, ) DECODE_WEBP_FILES = [ "SkEncodedInfo.cpp", "SkParseEncodedOrigin.cpp", "SkParseEncodedOrigin.h", "SkScalingCodec.h", "SkWebpCodec.cpp", "SkWebpCodec.h", ] split_srcs_and_hdrs( name = "decode_webp", files = DECODE_WEBP_FILES, ) split_srcs_and_hdrs( name = "decode_avif", files = [ "SkAvifCodec.cpp", "SkAvifCodec.h", "SkScalingCodec.h", ], ) split_srcs_and_hdrs( name = "decode_jxl", files = [ "SkJpegxlCodec.cpp", "SkJpegxlCodec.h", "SkScalingCodec.h", ], ) string_flag_with_values( name = "include_decoder", multiple = True, values = [ "avif_decode_codec", "gif_decode_codec", "jpeg_decode_codec", "jxl_decode_codec", "png_decode_codec", "raw_decode_codec", "webp_decode_codec", ], ) selects.config_setting_group( name = "needs_jpeg", match_any = [ ":jpeg_decode_codec", ":raw_decode_codec", ], ) selects.config_setting_group( name = "needs_jpeg_priv", match_any = [ ":needs_jpeg", "//src/encode:jpeg_encode_codec", ], ) selects.config_setting_group( name = "needs_png_priv", match_any = [ ":png_decode_codec", "//src/encode:png_encode_codec", ], ) skia_filegroup( name = "srcs", srcs = [ ":core_srcs", ":decode_android_srcs", ":decode_bmp_srcs", ":xmp_srcs", # TODO: Make this optional ] + select_multi( { ":avif_decode_codec": [":decode_avif_srcs"], ":gif_decode_codec": [":decode_gif_srcs"], ":needs_jpeg": [":decode_jpeg_srcs"], ":jxl_decode_codec": [":decode_jxl_srcs"], ":png_decode_codec": [":decode_png_srcs"], ":raw_decode_codec": [":decode_raw_srcs"], ":webp_decode_codec": [":decode_webp_srcs"], }, ), visibility = ["//src:__pkg__"], ) skia_filegroup( name = "private_hdrs", srcs = [ ":core_hdrs", ":decode_android_hdrs", ":decode_bmp_hdrs", ] + select({ ":needs_jpeg_priv": ["SkJpegPriv.h"], # used by src/encode/SkJPEGWriteUtility "//conditions:default": [], }) + select({ ":needs_png_priv": ["SkPngPriv.h"], # used by src/encode/SkPngEncoder "//conditions:default": [], }) + select_multi( { ":avif_decode_codec": [":decode_avif_hdrs"], ":gif_decode_codec": [":decode_gif_hdrs"], ":needs_jpeg": [ ":decode_jpeg_hdrs", ":shared_jpeg_hdrs", ], ":jxl_decode_codec": [":decode_jxl_hdrs"], ":png_decode_codec": [":decode_png_hdrs"], ":raw_decode_codec": [":decode_raw_hdrs"], ":webp_decode_codec": [":decode_webp_hdrs"], }, ), visibility = ["//src:__pkg__"], ) skia_cc_deps( name = "deps", visibility = ["//src:__pkg__"], deps = select_multi( { ":avif_decode_codec": ["@libavif"], ":gif_decode_codec": ["@wuffs"], ":needs_jpeg": ["@libjpeg_turbo"], "jxl_decode_codec": ["@libjxl"], ":png_decode_codec": ["@libpng"], ":raw_decode_codec": [ "@dng_sdk", "@piex", ], ":webp_decode_codec": ["@libwebp"], }, ), ) PRIVATE_CODEC_HEADERS = [ "SkCodecPriv.h", "SkColorPalette.h", "SkFrameHolder.h", "SkMaskSwizzler.h", "SkParseEncodedOrigin.h", "SkSampler.h", "SkScalingCodec.h", "SkSwizzler.h", "SkPixmapUtilsPriv.h", "//include/private:decode_srcs", ] # We put any file that is used by more than one codec here to avoid potential issues if clients # depend on multiple codecs. This is not a problem for a statically linked binary, but could maybe # cause issues with producing a shared library (e.g. duplicate symbols showing up). skia_cc_library( name = "any_decoder", srcs = [ "SkCodec.cpp", "SkCodecImageGenerator.cpp", "SkCodecImageGenerator.h", "SkColorPalette.cpp", "SkEncodedInfo.cpp", "SkExif.cpp", "SkGainmapInfo.cpp", "SkImageGenerator_FromEncoded.cpp", "SkMaskSwizzler.cpp", "SkParseEncodedOrigin.cpp", "SkPixmapUtils.cpp", "SkSampler.cpp", "SkSwizzler.cpp", "SkTiffUtility.cpp", "SkTiffUtility.h", "//include/codec:any_codec_hdrs", ], hdrs = PRIVATE_CODEC_HEADERS, features = ["layering_check"], local_defines = ["SK_DISABLE_LEGACY_INIT_DECODERS"], visibility = [ "//src/ports:__pkg__", ], deps = [ "//modules/skcms", "//src/base", "//src/core", "//src/core:core_priv", ], ) skia_cc_library( name = "codec_support", # This is its own rule (with no srcs) to explicitly expose any_codec_hdrs # as public in case a client does not want to use any of our codecs, but # still register their own and/or make use of SkImage::DeferredFromEncodedData hdrs = [ "//include/codec:any_codec_hdrs", ], visibility = [ "//:__pkg__", ], deps = [ ":any_decoder", ], ) skia_cc_library( name = "codec_support_priv", hdrs = [ "SkCodecImageGenerator.h", "//include/codec:any_codec_hdrs", ] + PRIVATE_CODEC_HEADERS, visibility = [ "//modules/skottie:__pkg__", "//modules/skresources:__pkg__", "//src/android:__pkg__", ], deps = [ ":any_decoder", ], ) skia_cc_library( name = "android_codec", srcs = [ "SkAndroidCodec.cpp", "SkAndroidCodecAdapter.cpp", "SkAndroidCodecAdapter.h", "SkSampledCodec.cpp", "SkSampledCodec.h", ], hdrs = [ "//include/codec:android_public_hdrs", "//include/codec:any_codec_hdrs", ], features = ["layering_check"], visibility = ["//:__subpackages__"], deps = [ ":any_decoder", "//modules/skcms", "//src/base", "//src/core", "//src/core:core_priv", ], ) skia_cc_library( name = "bmp_decode", srcs = [ "SkBmpBaseCodec.cpp", "SkBmpBaseCodec.h", "SkBmpCodec.cpp", "SkBmpCodec.h", "SkBmpMaskCodec.cpp", "SkBmpMaskCodec.h", "SkBmpRLECodec.cpp", "SkBmpRLECodec.h", "SkBmpStandardCodec.cpp", "SkBmpStandardCodec.h", ], hdrs = [ "//include/codec:any_codec_hdrs", "//include/codec:bmp_public_hdrs", ], defines = ["SK_CODEC_DECODES_BMP"], features = ["layering_check"], visibility = ["//:__subpackages__"], deps = [ ":any_decoder", "//modules/skcms", "//src/base", "//src/core", "//src/core:core_priv", ], ) skia_cc_library( name = "gif_decode", srcs = [ "SkWuffsCodec.cpp", ], hdrs = [ "//include/codec:any_codec_hdrs", "//include/codec:gif_public_hdrs", ], defines = ["SK_CODEC_DECODES_GIF"], features = ["layering_check"], visibility = ["//:__subpackages__"], deps = [ ":any_decoder", "//modules/skcms", "//src/base", "//src/core", "//src/core:core_priv", "@wuffs", ], ) skia_cc_library( name = "ico_decode", srcs = [ "SkBmpCodec.h", "SkIcoCodec.cpp", "SkIcoCodec.h", "SkPngCodec.h", ], hdrs = [ "//include/codec:any_codec_hdrs", "//include/codec:ico_public_hdrs", ], defines = ["SK_CODEC_DECODES_ICO"], features = ["layering_check"], visibility = ["//:__subpackages__"], deps = [ "//src/base", "//src/core", "//src/core:core_priv", "//modules/skcms", ":any_decoder", # icos can be either PNG or BMP ":bmp_decode", ":png_decode", ], ) skia_filegroup( name = "common_jpeg_srcs", srcs = [ "SkJpegConstants.h", "SkJpegPriv.h", ], visibility = ["//src/encode:__pkg__"], ) skia_cc_library( name = "jpeg_decode", srcs = [ "SkJpegCodec.cpp", "SkJpegCodec.h", "SkJpegDecoderMgr.cpp", "SkJpegDecoderMgr.h", "SkJpegMetadataDecoderImpl.cpp", "SkJpegMetadataDecoderImpl.h", "SkJpegSourceMgr.cpp", "SkJpegSourceMgr.h", "SkJpegUtility.cpp", "SkJpegUtility.h", ":common_jpeg_srcs", "//include/private:jpeg_decode_srcs", ], hdrs = [ "//include/codec:any_codec_hdrs", "//include/codec:jpeg_public_hdrs", ], defines = ["SK_CODEC_DECODES_JPEG"], features = ["layering_check"], visibility = ["//:__subpackages__"], deps = [ ":any_decoder", "//modules/skcms", "//src/base", "//src/core", "//src/core:core_priv", "@libjpeg_turbo", ], ) skia_cc_library( name = "jpegxl_decode", srcs = [ "SkJpegxlCodec.cpp", "SkJpegxlCodec.h", ":common_jpeg_srcs", ], hdrs = [ "//include/codec:any_codec_hdrs", "//include/codec:jpegxl_public_hdrs", ], defines = ["SK_CODEC_DECODES_JPEGXL"], features = ["layering_check"], visibility = ["//:__subpackages__"], deps = [ ":any_decoder", "//modules/skcms", "//src/base", "//src/core", "//src/core:core_priv", "@libjxl", ], ) skia_filegroup( name = "buffet_png_srcs", srcs = [ "SkPngCodec.cpp", "SkPngCodec.h", ], ) skia_filegroup( name = "common_png_srcs", srcs = [ "SkPngPriv.h", ], visibility = ["//src/encode:__pkg__"], ) skia_cc_library( name = "png_decode", srcs = [ ":buffet_png_srcs", ":common_png_srcs", ], hdrs = [ "//include/codec:any_codec_hdrs", "//include/codec:png_public_hdrs", ], defines = ["SK_CODEC_DECODES_PNG"], features = ["layering_check"], visibility = ["//:__subpackages__"], deps = [ ":any_decoder", "//modules/skcms", "//src/base", "//src/core", "//src/core:core_priv", "@libpng", ], ) skia_cc_library( name = "wbmp_decode", srcs = [ "SkBmpBaseCodec.h", "SkBmpCodec.h", "SkBmpMaskCodec.h", "SkBmpRLECodec.h", "SkBmpStandardCodec.h", "SkWbmpCodec.cpp", "SkWbmpCodec.h", "//include/codec:bmp_public_hdrs", ], hdrs = [ "//include/codec:any_codec_hdrs", "//include/codec:wbmp_public_hdrs", ], defines = ["SK_CODEC_DECODES_WBMP"], features = ["layering_check"], visibility = ["//:__subpackages__"], deps = [ ":any_decoder", ":bmp_decode", # Avoid ODR violations by not duplicating .cpp files "//modules/skcms", "//src/base", "//src/core", "//src/core:core_priv", ], ) skia_cc_library( name = "webp_decode", srcs = [ "SkWebpCodec.cpp", "SkWebpCodec.h", ], hdrs = [ "//include/codec:any_codec_hdrs", "//include/codec:webp_public_hdrs", ], defines = ["SK_CODEC_DECODES_WEBP"], features = ["layering_check"], visibility = ["//:__subpackages__"], deps = [ ":any_decoder", "//modules/skcms", "//src/base", "//src/core", "//src/core:core_priv", "@libwebp", ], ) generate_cpp_files_for_headers( name = "headers_to_compile", headers = [ "SkPixmapUtilsPriv.h", "SkScalingCodec.h", ], )