• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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