• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# https://github.com/bazelbuild/bazel-skylib
2load("@bazel_skylib//lib:selects.bzl", "selects")
3
4package(default_visibility = ["//:__subpackages__"])
5
6cc_library(
7    name = "skcms",
8    srcs = [
9        "skcms/skcms.cc",
10        "skcms/skcms_internal.h",
11        "skcms/src/Transform_inl.h",
12    ],
13    hdrs = [
14        "//include/third_party:skcms-hdrs",
15    ],
16    # needed because skcms.cc just does include skcms.h
17    strip_include_prefix = "//include/third_party/skcms/",
18)
19
20LIBPNG_SRCS = [
21    "externals/libpng/png.c",
22    "externals/libpng/pngconf.h",
23    "externals/libpng/pngdebug.h",
24    "externals/libpng/pngerror.c",
25    "externals/libpng/pngget.c",
26    "externals/libpng/pnginfo.h",
27    "externals/libpng/pngmem.c",
28    "externals/libpng/pngpread.c",
29    "externals/libpng/pngpriv.h",
30    "externals/libpng/pngread.c",
31    "externals/libpng/pngrio.c",
32    "externals/libpng/pngrtran.c",
33    "externals/libpng/pngrutil.c",
34    "externals/libpng/pngset.c",
35    "externals/libpng/pngstruct.h",
36    "externals/libpng/pngtrans.c",
37    "externals/libpng/pngwio.c",
38    "externals/libpng/pngwrite.c",
39    "externals/libpng/pngwtran.c",
40    "externals/libpng/pngwutil.c",
41    "libpng/pnglibconf.h",
42] + select({
43    "@platforms//cpu:x86_64": [
44        "externals/libpng/intel/filter_sse2_intrinsics.c",
45        "externals/libpng/intel/intel_init.c",
46    ],
47    "@platforms//cpu:arm": [
48        "externals/libpng/arm/arm_init.c",
49        "externals/libpng/arm/filter_neon_intrinsics.c",
50        "externals/libpng/arm/palette_neon_intrinsics.c",
51    ],
52    # No SIMD support in wasm for now
53    "//bazel/common_config_settings:cpu_wasm": [],
54    # The default is to avoid using SIMD
55    "//conditions:default": [],
56})
57
58PNG_DEFINES = ["PNG_SET_OPTION_SUPPORTED"] + select({
59    "@platforms//cpu:x86_64": ["PNG_INTEL_SSE"],
60    "//conditions:default": [],
61})
62
63cc_library(
64    name = "libpng",
65    srcs = LIBPNG_SRCS,
66    hdrs = [
67        "externals/libpng/png.h",
68    ],
69    copts = [
70        "-Ithird_party/libpng/",
71        "-Wno-unused-but-set-variable",
72    ],
73    includes = [
74        # This adds -isystem "third_party/externals/libpng" to any dependent
75        # compilation steps. This allows #include <png.h> to work
76        "externals/libpng",
77        # png.h attempts to #include "pnglibconf.h" , which we store in //third_party/libpng/
78        # This rule adds -isystem "third_party/externals/libpng" to any dependent
79        # rule on this, which avoids having to add "-Ithird_party/libpng/" to copts for
80        # those dependent rules.
81        "libpng",
82    ],
83    local_defines = PNG_DEFINES,
84    # This is included by //third_party/libpng/pnglibconf.h, but because it is not a .h
85    # file, we must tell Bazel to explicitly bring it in as an "includable".
86    textual_hdrs = ["externals/libpng/scripts/pnglibconf.h.prebuilt"],
87    deps = [":zlib"],
88)
89
90ZLIB_SRCS = [
91    "externals/zlib/adler32.c",
92    "externals/zlib/compress.c",
93    "externals/zlib/contrib/optimizations/insert_string.h",
94    "externals/zlib/cpu_features.c",
95    "externals/zlib/cpu_features.h",
96    "externals/zlib/crc32.h",
97    "externals/zlib/crc32.c",
98    "externals/zlib/deflate.c",
99    "externals/zlib/deflate.h",
100    "externals/zlib/gzclose.c",
101    "externals/zlib/gzguts.h",
102    "externals/zlib/gzlib.c",
103    "externals/zlib/gzread.c",
104    "externals/zlib/gzwrite.c",
105    "externals/zlib/infback.c",
106    "externals/zlib/inffast.c",
107    "externals/zlib/inffast.h",
108    "externals/zlib/inflate.h",
109    "externals/zlib/inftrees.c",
110    "externals/zlib/inftrees.h",
111    "externals/zlib/trees.c",
112    "externals/zlib/trees.h",
113    "externals/zlib/uncompr.c",
114    "externals/zlib/inffixed.h",
115    "externals/zlib/zutil.c",
116    "externals/zlib/zutil.h",
117] + select({
118    "@platforms//cpu:x86_64": [
119        "externals/zlib/adler32_simd.h",
120        "externals/zlib/adler32_simd.c",
121        "externals/zlib/contrib/optimizations/chunkcopy.h",
122        "externals/zlib/contrib/optimizations/inffast_chunk.h",
123        "externals/zlib/contrib/optimizations/inffast_chunk.c",
124        "externals/zlib/contrib/optimizations/inflate.c",
125        "externals/zlib/crc32_simd.h",
126        "externals/zlib/crc32_simd.c",
127        "externals/zlib/crc_folding.c",
128        "externals/zlib/fill_window_sse.c",
129    ],
130    "@platforms//cpu:arm": [
131        "externals/zlib/adler32_simd.h",
132        "externals/zlib/adler32_simd.c",
133        "externals/zlib/contrib/optimizations/chunkcopy.h",
134        "externals/zlib/contrib/optimizations/inffast_chunk.h",
135        "externals/zlib/contrib/optimizations/inffast_chunk.c",
136        "externals/zlib/contrib/optimizations/inflate.c",
137        "externals/zlib/crc32_simd.h",
138        "externals/zlib/crc32_simd.c",
139    ],
140    # No SIMD support in wasm for now
141    "//bazel/common_config_settings:cpu_wasm": ["externals/zlib/inflate.c"],
142    # The default is to avoid using SIMD
143    "//conditions:default": ["externals/zlib/inflate.c"],
144})
145
146ZLIB_DEFINES = ["ZLIB_IMPLEMENTATION"] + select({
147    "@platforms//cpu:x86_64": [
148        "ADLER32_SIMD_SSSE3",
149        "CRC32_SIMD_SSE42_PCLMUL",
150        "INFLATE_CHUNK_READ_64LE",
151        "INFLATE_CHUNK_SIMD_SSE2",
152        "DEFLATE_FILL_WINDOW_SSE2",
153    ],
154    "@platforms//cpu:arm": [
155        "ADLER32_SIMD_NEON",
156        "INFLATE_CHUNK_SIMD_NEON",
157    ],
158    "//bazel/common_config_settings:cpu_wasm": ["CPU_NO_SIMD"],
159    "//conditions:default": ["CPU_NO_SIMD"],
160}) + select({
161    "//bazel/common_config_settings:windows_x64": ["X86_WINDOWS"],
162    "//bazel/common_config_settings:linux_x64": ["X86_NOT_WINDOWS"],
163    "//bazel/common_config_settings:fuchsia_arm64": [
164        "X86_NOT_WINDOWS",
165        "ARMV8_OS_FUCHSIA",
166    ],
167    # TODO(kjlubick) other arm flavors
168    "//conditions:default": ["X86_NOT_WINDOWS"],
169})
170
171ZLIB_COPTS = [
172    "-Wno-unused-function",
173    # Make the headers in contrib available, without exposing them in hdrs.
174    "-isystem third_party/externals/zlib/",
175] + select({
176    "//bazel/common_config_settings:linux_x64": [
177        "-mssse3",
178        "-msse4.2",
179        "-mpclmul",
180    ],
181    "@platforms//cpu:arm": ["-march=armv8-a+crc"],
182    # If empty list isn't set for wasm, select picks linux_x64
183    "//bazel/common_config_settings:cpu_wasm": [],
184    "//conditions:default": [],
185})
186
187cc_library(
188    name = "zlib",
189    srcs = ZLIB_SRCS,
190    hdrs = [
191        "externals/zlib/chromeconf.h",
192        "externals/zlib/zconf.h",
193        "externals/zlib/zlib.h",
194    ],
195    copts = ZLIB_COPTS,
196    local_defines = ZLIB_DEFINES,
197    # This allows users of zlib to just do #include "zlib.h"
198    strip_include_prefix = "externals/zlib/",
199)
200
201# This library is used to fix linking errors when trying to statically link in some symbols
202# The symbols defined here:
203# https://github.com/llvm/llvm-project/blob/main/libcxx/include/__support/musl/xlocale.h
204# are defined to be inlined, however they are missing during the final linking of a static
205# executable. By re-defining them in our own .a file, this makes the linker happy.
206cc_library(
207    name = "musl_compat",
208    srcs = [
209        "musl_compat/locale.c",
210    ],
211)
212
213JPEGTURBO_SRCS = [
214    "externals/libjpeg-turbo/jaricom.c",
215    "externals/libjpeg-turbo/jcapimin.c",
216    "externals/libjpeg-turbo/jcapistd.c",
217    "externals/libjpeg-turbo/jcarith.c",
218    "externals/libjpeg-turbo/jccoefct.c",
219    "externals/libjpeg-turbo/jccolor.c",
220    "externals/libjpeg-turbo/jcdctmgr.c",
221    "externals/libjpeg-turbo/jchuff.c",
222    "externals/libjpeg-turbo/jchuff.h",
223    "externals/libjpeg-turbo/jcinit.c",
224    "externals/libjpeg-turbo/jcmainct.c",
225    "externals/libjpeg-turbo/jcmarker.c",
226    "externals/libjpeg-turbo/jcmaster.c",
227    "externals/libjpeg-turbo/jcomapi.c",
228    "externals/libjpeg-turbo/jconfigint.h",
229    "externals/libjpeg-turbo/jcparam.c",
230    "externals/libjpeg-turbo/jcphuff.c",
231    "externals/libjpeg-turbo/jcprepct.c",
232    "externals/libjpeg-turbo/jcsample.c",
233    "externals/libjpeg-turbo/jdapimin.c",
234    "externals/libjpeg-turbo/jdapistd.c",
235    "externals/libjpeg-turbo/jdarith.c",
236    "externals/libjpeg-turbo/jdcoefct.c",
237    "externals/libjpeg-turbo/jdcoefct.h",
238    "externals/libjpeg-turbo/jdcolor.c",
239    "externals/libjpeg-turbo/jdct.h",
240    "externals/libjpeg-turbo/jddctmgr.c",
241    "externals/libjpeg-turbo/jdhuff.c",
242    "externals/libjpeg-turbo/jdhuff.h",
243    "externals/libjpeg-turbo/jdinput.c",
244    "externals/libjpeg-turbo/jdmainct.c",
245    "externals/libjpeg-turbo/jdmainct.h",
246    "externals/libjpeg-turbo/jdmarker.c",
247    "externals/libjpeg-turbo/jdmaster.c",
248    "externals/libjpeg-turbo/jdmaster.h",
249    "externals/libjpeg-turbo/jdmerge.c",
250    "externals/libjpeg-turbo/jdmerge.h",
251    "externals/libjpeg-turbo/jdphuff.c",
252    "externals/libjpeg-turbo/jdpostct.c",
253    "externals/libjpeg-turbo/jdsample.c",
254    "externals/libjpeg-turbo/jdsample.h",
255    "externals/libjpeg-turbo/jerror.c",
256    "externals/libjpeg-turbo/jfdctflt.c",
257    "externals/libjpeg-turbo/jfdctfst.c",
258    "externals/libjpeg-turbo/jfdctint.c",
259    "externals/libjpeg-turbo/jidctflt.c",
260    "externals/libjpeg-turbo/jidctfst.c",
261    "externals/libjpeg-turbo/jidctint.c",
262    "externals/libjpeg-turbo/jidctred.c",
263    "externals/libjpeg-turbo/jinclude.h",
264    "externals/libjpeg-turbo/jmemmgr.c",
265    "externals/libjpeg-turbo/jmemnobs.c",
266    "externals/libjpeg-turbo/jmemsys.h",
267    "externals/libjpeg-turbo/jpeg_nbits_table.c",
268    "externals/libjpeg-turbo/jpeg_nbits_table.h",
269    "externals/libjpeg-turbo/jpegcomp.h",
270    "externals/libjpeg-turbo/jpegint.h",
271    "externals/libjpeg-turbo/jquant1.c",
272    "externals/libjpeg-turbo/jquant2.c",
273    "externals/libjpeg-turbo/jsimd.h",
274    "externals/libjpeg-turbo/jsimddct.h",
275    "externals/libjpeg-turbo/jutils.c",
276    "externals/libjpeg-turbo/jversion.h",
277] + selects.with_or({
278    ("@platforms//cpu:arm", "@platforms//cpu:arm64"): [
279        "externals/libjpeg-turbo/simd/arm/jccolor-neon.c",
280        "externals/libjpeg-turbo/simd/arm/jcgray-neon.c",
281        "externals/libjpeg-turbo/simd/arm/jcphuff-neon.c",
282        "externals/libjpeg-turbo/simd/arm/jcsample-neon.c",
283        "externals/libjpeg-turbo/simd/arm/jdcolor-neon.c",
284        "externals/libjpeg-turbo/simd/arm/jdmerge-neon.c",
285        "externals/libjpeg-turbo/simd/arm/jdsample-neon.c",
286        "externals/libjpeg-turbo/simd/arm/jfdctfst-neon.c",
287        "externals/libjpeg-turbo/simd/arm/jfdctint-neon.c",
288        "externals/libjpeg-turbo/simd/arm/jidctfst-neon.c",
289        "externals/libjpeg-turbo/simd/arm/jidctint-neon.c",
290        "externals/libjpeg-turbo/simd/arm/jidctred-neon.c",
291        "externals/libjpeg-turbo/simd/arm/jquanti-neon.c",
292    ],
293    "//conditions:default": ["externals/libjpeg-turbo/jsimd_none.c"],
294}) + select({
295    "@platforms//cpu:arm": [
296        "externals/libjpeg-turbo/simd/arm/aarch32/jchuff-neon.c",
297        "externals/libjpeg-turbo/simd/arm/aarch32/jsimd.c",
298    ],
299    "@platforms//cpu:arm64": [
300        "externals/libjpeg-turbo/simd/arm/aarch64/jchuff-neon.c",
301        "externals/libjpeg-turbo/simd/arm/aarch64/jsimd.c",
302    ],
303    "//conditions:default": [],
304})
305
306JPEGTURBO_DEFINES = [
307    # Add support for arithmetic encoding (C_) and decoding (D_).
308    # This matches Android. Note that such JPEGs are likely rare, given lack of
309    # support by major browsers.
310    "C_ARITH_CODING_SUPPORTED=1",
311    "D_ARITH_CODING_SUPPORTED=1",
312] + selects.with_or({
313    ("@platforms//cpu:arm", "@platforms//cpu:arm64"): ["NEON_INTRINSICS"],
314    "//conditions:default": [],
315}) + select({
316    "@platforms//os:windows": [],
317    "//conditions:default": ["USE_CLZ_INTRINSIC"],  # Cuts a 64K table.
318})
319
320cc_library(
321    name = "libjpeg-turbo",
322    srcs = JPEGTURBO_SRCS,
323    hdrs = [
324        "externals/libjpeg-turbo/jconfig.h",
325        "externals/libjpeg-turbo/jerror.h",
326        "externals/libjpeg-turbo/jmorecfg.h",
327        "externals/libjpeg-turbo/jpeglib.h",
328        "externals/libjpeg-turbo/jpeglibmangler.h",
329    ],
330    local_defines = JPEGTURBO_DEFINES,
331    strip_include_prefix = "externals/libjpeg-turbo/",
332    textual_hdrs = [
333        "externals/libjpeg-turbo/jccolext.c",
334        "externals/libjpeg-turbo/jdmrgext.c",
335        "externals/libjpeg-turbo/jdcolext.c",
336        "externals/libjpeg-turbo/jdcol565.c",
337        "externals/libjpeg-turbo/jdmrg565.c",
338        "externals/libjpeg-turbo/jstdhuff.c",
339    ],
340)
341
342WEBP_SRCS = [
343    "externals/libwebp/src/dec/alpha_dec.c",
344    "externals/libwebp/src/dec/alphai_dec.h",
345    "externals/libwebp/src/dec/buffer_dec.c",
346    "externals/libwebp/src/dec/common_dec.h",
347    "externals/libwebp/src/dec/frame_dec.c",
348    "externals/libwebp/src/dec/idec_dec.c",
349    "externals/libwebp/src/dec/io_dec.c",
350    "externals/libwebp/src/dec/quant_dec.c",
351    "externals/libwebp/src/dec/tree_dec.c",
352    "externals/libwebp/src/dec/vp8_dec.c",
353    "externals/libwebp/src/dec/vp8_dec.h",
354    "externals/libwebp/src/dec/vp8i_dec.h",
355    "externals/libwebp/src/dec/vp8l_dec.c",
356    "externals/libwebp/src/dec/vp8li_dec.h",
357    "externals/libwebp/src/dec/webp_dec.c",
358    "externals/libwebp/src/dec/webpi_dec.h",
359    "externals/libwebp/src/demux/anim_decode.c",
360    "externals/libwebp/src/demux/demux.c",
361    "externals/libwebp/src/dsp/alpha_processing.c",
362    "externals/libwebp/src/dsp/alpha_processing_mips_dsp_r2.c",
363    "externals/libwebp/src/dsp/alpha_processing_neon.c",
364    "externals/libwebp/src/dsp/alpha_processing_sse2.c",
365    "externals/libwebp/src/dsp/common_sse2.h",
366    "externals/libwebp/src/dsp/common_sse41.h",
367    "externals/libwebp/src/dsp/cost.c",
368    "externals/libwebp/src/dsp/cost_mips32.c",
369    "externals/libwebp/src/dsp/cost_mips_dsp_r2.c",
370    "externals/libwebp/src/dsp/cost_neon.c",
371    "externals/libwebp/src/dsp/cost_sse2.c",
372    "externals/libwebp/src/dsp/cpu.c",
373    "externals/libwebp/src/dsp/dec.c",
374    "externals/libwebp/src/dsp/dec_clip_tables.c",
375    "externals/libwebp/src/dsp/dec_mips32.c",
376    "externals/libwebp/src/dsp/dec_mips_dsp_r2.c",
377    "externals/libwebp/src/dsp/dec_msa.c",
378    "externals/libwebp/src/dsp/dec_neon.c",
379    "externals/libwebp/src/dsp/dec_sse2.c",
380    "externals/libwebp/src/dsp/dsp.h",
381    "externals/libwebp/src/dsp/enc.c",
382    "externals/libwebp/src/dsp/enc_mips32.c",
383    "externals/libwebp/src/dsp/enc_mips_dsp_r2.c",
384    "externals/libwebp/src/dsp/enc_msa.c",
385    "externals/libwebp/src/dsp/enc_neon.c",
386    "externals/libwebp/src/dsp/enc_sse2.c",
387    "externals/libwebp/src/dsp/filters.c",
388    "externals/libwebp/src/dsp/filters_mips_dsp_r2.c",
389    "externals/libwebp/src/dsp/filters_msa.c",
390    "externals/libwebp/src/dsp/filters_neon.c",
391    "externals/libwebp/src/dsp/filters_sse2.c",
392    "externals/libwebp/src/dsp/lossless.c",
393    "externals/libwebp/src/dsp/lossless.h",
394    "externals/libwebp/src/dsp/lossless_common.h",
395    "externals/libwebp/src/dsp/lossless_enc.c",
396    "externals/libwebp/src/dsp/lossless_enc_mips32.c",
397    "externals/libwebp/src/dsp/lossless_enc_mips_dsp_r2.c",
398    "externals/libwebp/src/dsp/lossless_enc_msa.c",
399    "externals/libwebp/src/dsp/lossless_enc_neon.c",
400    "externals/libwebp/src/dsp/lossless_enc_sse2.c",
401    "externals/libwebp/src/dsp/lossless_mips_dsp_r2.c",
402    "externals/libwebp/src/dsp/lossless_msa.c",
403    "externals/libwebp/src/dsp/lossless_neon.c",
404    "externals/libwebp/src/dsp/lossless_sse2.c",
405    "externals/libwebp/src/dsp/mips_macro.h",
406    "externals/libwebp/src/dsp/msa_macro.h",
407    "externals/libwebp/src/dsp/neon.h",
408    "externals/libwebp/src/dsp/quant.h",
409    "externals/libwebp/src/dsp/rescaler.c",
410    "externals/libwebp/src/dsp/rescaler_mips32.c",
411    "externals/libwebp/src/dsp/rescaler_mips_dsp_r2.c",
412    "externals/libwebp/src/dsp/rescaler_msa.c",
413    "externals/libwebp/src/dsp/rescaler_neon.c",
414    "externals/libwebp/src/dsp/rescaler_sse2.c",
415    "externals/libwebp/src/dsp/ssim.c",
416    "externals/libwebp/src/dsp/ssim_sse2.c",
417    "externals/libwebp/src/dsp/upsampling.c",
418    "externals/libwebp/src/dsp/upsampling_mips_dsp_r2.c",
419    "externals/libwebp/src/dsp/upsampling_msa.c",
420    "externals/libwebp/src/dsp/upsampling_neon.c",
421    "externals/libwebp/src/dsp/upsampling_sse2.c",
422    "externals/libwebp/src/dsp/yuv.c",
423    "externals/libwebp/src/dsp/yuv.h",
424    "externals/libwebp/src/dsp/yuv_mips32.c",
425    "externals/libwebp/src/dsp/yuv_mips_dsp_r2.c",
426    "externals/libwebp/src/dsp/yuv_neon.c",
427    "externals/libwebp/src/dsp/yuv_sse2.c",
428    "externals/libwebp/src/enc/alpha_enc.c",
429    "externals/libwebp/src/enc/analysis_enc.c",
430    "externals/libwebp/src/enc/backward_references_cost_enc.c",
431    "externals/libwebp/src/enc/backward_references_enc.c",
432    "externals/libwebp/src/enc/backward_references_enc.h",
433    "externals/libwebp/src/enc/config_enc.c",
434    "externals/libwebp/src/enc/cost_enc.c",
435    "externals/libwebp/src/enc/cost_enc.h",
436    "externals/libwebp/src/enc/filter_enc.c",
437    "externals/libwebp/src/enc/frame_enc.c",
438    "externals/libwebp/src/enc/histogram_enc.c",
439    "externals/libwebp/src/enc/histogram_enc.h",
440    "externals/libwebp/src/enc/iterator_enc.c",
441    "externals/libwebp/src/enc/near_lossless_enc.c",
442    "externals/libwebp/src/enc/picture_csp_enc.c",
443    "externals/libwebp/src/enc/picture_enc.c",
444    "externals/libwebp/src/enc/picture_psnr_enc.c",
445    "externals/libwebp/src/enc/picture_rescale_enc.c",
446    "externals/libwebp/src/enc/picture_tools_enc.c",
447    "externals/libwebp/src/enc/predictor_enc.c",
448    "externals/libwebp/src/enc/quant_enc.c",
449    "externals/libwebp/src/enc/syntax_enc.c",
450    "externals/libwebp/src/enc/token_enc.c",
451    "externals/libwebp/src/enc/tree_enc.c",
452    "externals/libwebp/src/enc/vp8i_enc.h",
453    "externals/libwebp/src/enc/vp8l_enc.c",
454    "externals/libwebp/src/enc/vp8li_enc.h",
455    "externals/libwebp/src/enc/webp_enc.c",
456    "externals/libwebp/src/mux/anim_encode.c",
457    "externals/libwebp/src/mux/animi.h",
458    "externals/libwebp/src/mux/muxedit.c",
459    "externals/libwebp/src/mux/muxi.h",
460    "externals/libwebp/src/mux/muxinternal.c",
461    "externals/libwebp/src/mux/muxread.c",
462    "externals/libwebp/src/utils/bit_reader_inl_utils.h",
463    "externals/libwebp/src/utils/bit_reader_utils.c",
464    "externals/libwebp/src/utils/bit_reader_utils.h",
465    "externals/libwebp/src/utils/bit_writer_utils.c",
466    "externals/libwebp/src/utils/bit_writer_utils.h",
467    "externals/libwebp/src/utils/color_cache_utils.c",
468    "externals/libwebp/src/utils/color_cache_utils.h",
469    "externals/libwebp/src/utils/endian_inl_utils.h",
470    "externals/libwebp/src/utils/filters_utils.c",
471    "externals/libwebp/src/utils/filters_utils.h",
472    "externals/libwebp/src/utils/huffman_encode_utils.c",
473    "externals/libwebp/src/utils/huffman_encode_utils.h",
474    "externals/libwebp/src/utils/huffman_utils.c",
475    "externals/libwebp/src/utils/huffman_utils.h",
476    "externals/libwebp/src/utils/quant_levels_dec_utils.c",
477    "externals/libwebp/src/utils/quant_levels_dec_utils.h",
478    "externals/libwebp/src/utils/quant_levels_utils.c",
479    "externals/libwebp/src/utils/quant_levels_utils.h",
480    "externals/libwebp/src/utils/random_utils.c",
481    "externals/libwebp/src/utils/random_utils.h",
482    "externals/libwebp/src/utils/rescaler_utils.c",
483    "externals/libwebp/src/utils/rescaler_utils.h",
484    "externals/libwebp/src/utils/thread_utils.c",
485    "externals/libwebp/src/utils/thread_utils.h",
486    "externals/libwebp/src/utils/utils.c",
487    "externals/libwebp/src/utils/utils.h",
488] + select({
489    "@platforms//cpu:x86_64": [
490        "externals/libwebp/src/dsp/alpha_processing_sse41.c",
491        "externals/libwebp/src/dsp/dec_sse41.c",
492        "externals/libwebp/src/dsp/enc_sse41.c",
493        "externals/libwebp/src/dsp/lossless_enc_sse41.c",
494        "externals/libwebp/src/dsp/lossless_sse41.c",
495        "externals/libwebp/src/dsp/upsampling_sse41.c",
496        "externals/libwebp/src/dsp/yuv_sse41.c",
497    ],
498    "//bazel/common_config_settings:cpu_wasm": [],  # not sure why wasm doesn't use default
499    "//conditions:default": [],
500})
501
502WEBP_COPTS = [
503    "-isystem third_party/externals/libwebp/",
504] + select({
505    "@platforms//cpu:x86_64": ["-msse4.1"],
506    "//bazel/common_config_settings:cpu_wasm": [],  # not sure why wasm doesn't use default
507    "//conditions:default": [],
508})
509
510WEBP_DEFINES = [
511    # TODO(scroggo): swizzle ourself in SkWebpCodec instead of requiring this non-standard libwebp.
512    "WEBP_SWAP_16BIT_CSP",
513]
514
515cc_library(
516    name = "libwebp",
517    srcs = WEBP_SRCS,
518    hdrs = [
519        "externals/libwebp/src/webp/decode.h",
520        "externals/libwebp/src/webp/demux.h",
521        "externals/libwebp/src/webp/encode.h",
522        "externals/libwebp/src/webp/format_constants.h",
523        "externals/libwebp/src/webp/mux.h",
524        "externals/libwebp/src/webp/mux_types.h",
525        "externals/libwebp/src/webp/types.h",
526    ],
527    copts = WEBP_COPTS,
528    local_defines = WEBP_DEFINES,
529    strip_include_prefix = "externals/libwebp/src/",
530)
531
532cc_library(
533    name = "wuffs",
534    # We list this file both as a source file and a header file because it will be
535    # compiled for symbols *and* included as a header file.
536    srcs = ["externals/wuffs/release/c/wuffs-v0.3.c"],
537    # Thankfully, bazel doesn't mind a .c file being declared as a public "header".
538    hdrs = ["externals/wuffs/release/c/wuffs-v0.3.c"],
539    local_defines = [
540        # Copy/pasting from "externals/wuffs/release/c/wuffs-*.c":
541        #
542        # ----
543        #
544        # Wuffs ships as a "single file C library" or "header file library" as per
545        # https://github.com/nothings/stb/blob/master/docs/stb_howto.txt
546        #
547        # To use that single file as a "foo.c"-like implementation, instead of a
548        # "foo.h"-like header, #define WUFFS_IMPLEMENTATION before #include'ing or
549        # compiling it.
550        #
551        # ----
552        "WUFFS_IMPLEMENTATION",
553
554        # Continuing to copy/paste:
555        #
556        # ----
557        #
558        # Defining the WUFFS_CONFIG__MODULE* macros are optional, but it lets users
559        # of Wuffs' .c file specify which parts of Wuffs to build. That file
560        # contains the entire Wuffs standard library, implementing a variety of
561        # codecs and file formats. Without this macro definition, an optimizing
562        # compiler or linker may very well discard Wuffs code for unused codecs,
563        # but listing the Wuffs modules we use makes that process explicit.
564        # Preprocessing means that such code simply isn't compiled.
565        #
566        # ----
567        #
568        # For Skia, we're only interested in particular image codes (e.g. GIF) and
569        # their dependencies (e.g. BASE, LZW).
570        "WUFFS_CONFIG__MODULES",
571        "WUFFS_CONFIG__MODULE__BASE",
572        "WUFFS_CONFIG__MODULE__GIF",
573        "WUFFS_CONFIG__MODULE__LZW",
574    ],
575    strip_include_prefix = "externals/wuffs/release/c/",
576)
577
578cc_library(
579    name = "piex",
580    srcs = [
581        "externals/piex/src/binary_parse/cached_paged_byte_array.cc",
582        "externals/piex/src/binary_parse/cached_paged_byte_array.h",
583        "externals/piex/src/binary_parse/range_checked_byte_ptr.cc",
584        "externals/piex/src/binary_parse/range_checked_byte_ptr.h",
585        "externals/piex/src/image_type_recognition/image_type_recognition_lite.cc",
586        "externals/piex/src/image_type_recognition/image_type_recognition_lite.h",
587        "externals/piex/src/piex.cc",
588        "externals/piex/src/tiff_directory/tiff_directory.cc",
589        "externals/piex/src/tiff_directory/tiff_directory.h",
590        "externals/piex/src/tiff_parser.cc",
591        "externals/piex/src/tiff_parser.h",
592    ],
593    hdrs = [
594        "externals/piex/src/piex.h",
595        "externals/piex/src/piex_types.h",
596    ],
597    copts = [
598        "-isystem third_party/externals/piex/",
599    ],
600    local_defines = ["BREAK_IF_DEBUGGING_AND_OUT_OF_RANGE"],
601    strip_include_prefix = "externals/piex/",
602)
603
604cc_library(
605    name = "dng_sdk",
606    srcs = [
607        "externals/dng_sdk/source/dng_1d_function.cpp",
608        "externals/dng_sdk/source/dng_1d_table.cpp",
609        "externals/dng_sdk/source/dng_abort_sniffer.cpp",
610        "externals/dng_sdk/source/dng_area_task.cpp",
611        "externals/dng_sdk/source/dng_bad_pixels.cpp",
612        "externals/dng_sdk/source/dng_bottlenecks.cpp",
613        "externals/dng_sdk/source/dng_camera_profile.cpp",
614        "externals/dng_sdk/source/dng_color_space.cpp",
615        "externals/dng_sdk/source/dng_color_spec.cpp",
616        "externals/dng_sdk/source/dng_date_time.cpp",
617        "externals/dng_sdk/source/dng_exceptions.cpp",
618        "externals/dng_sdk/source/dng_exif.cpp",
619        "externals/dng_sdk/source/dng_file_stream.cpp",
620        "externals/dng_sdk/source/dng_filter_task.cpp",
621        "externals/dng_sdk/source/dng_fingerprint.cpp",
622        "externals/dng_sdk/source/dng_gain_map.cpp",
623        "externals/dng_sdk/source/dng_globals.cpp",
624        "externals/dng_sdk/source/dng_host.cpp",
625        "externals/dng_sdk/source/dng_hue_sat_map.cpp",
626        "externals/dng_sdk/source/dng_ifd.cpp",
627        "externals/dng_sdk/source/dng_image.cpp",
628        "externals/dng_sdk/source/dng_image_writer.cpp",
629        "externals/dng_sdk/source/dng_info.cpp",
630        "externals/dng_sdk/source/dng_iptc.cpp",
631        "externals/dng_sdk/source/dng_jpeg_image.cpp",
632        "externals/dng_sdk/source/dng_jpeg_memory_source.cpp",
633        "externals/dng_sdk/source/dng_lens_correction.cpp",
634        "externals/dng_sdk/source/dng_linearization_info.cpp",
635        "externals/dng_sdk/source/dng_lossless_jpeg.cpp",
636        "externals/dng_sdk/source/dng_matrix.cpp",
637        "externals/dng_sdk/source/dng_memory.cpp",
638        "externals/dng_sdk/source/dng_memory_stream.cpp",
639        "externals/dng_sdk/source/dng_misc_opcodes.cpp",
640        "externals/dng_sdk/source/dng_mosaic_info.cpp",
641        "externals/dng_sdk/source/dng_mutex.cpp",
642        "externals/dng_sdk/source/dng_negative.cpp",
643        "externals/dng_sdk/source/dng_opcode_list.cpp",
644        "externals/dng_sdk/source/dng_opcodes.cpp",
645        "externals/dng_sdk/source/dng_orientation.cpp",
646        "externals/dng_sdk/source/dng_parse_utils.cpp",
647        "externals/dng_sdk/source/dng_pixel_buffer.cpp",
648        "externals/dng_sdk/source/dng_point.cpp",
649        "externals/dng_sdk/source/dng_preview.cpp",
650        "externals/dng_sdk/source/dng_pthread.cpp",
651        "externals/dng_sdk/source/dng_rational.cpp",
652        "externals/dng_sdk/source/dng_read_image.cpp",
653        "externals/dng_sdk/source/dng_rect.cpp",
654        "externals/dng_sdk/source/dng_ref_counted_block.cpp",
655        "externals/dng_sdk/source/dng_reference.cpp",
656        "externals/dng_sdk/source/dng_render.cpp",
657        "externals/dng_sdk/source/dng_resample.cpp",
658        "externals/dng_sdk/source/dng_safe_arithmetic.cpp",
659        "externals/dng_sdk/source/dng_shared.cpp",
660        "externals/dng_sdk/source/dng_simple_image.cpp",
661        "externals/dng_sdk/source/dng_spline.cpp",
662        "externals/dng_sdk/source/dng_stream.cpp",
663        "externals/dng_sdk/source/dng_string.cpp",
664        "externals/dng_sdk/source/dng_string_list.cpp",
665        "externals/dng_sdk/source/dng_tag_types.cpp",
666        "externals/dng_sdk/source/dng_temperature.cpp",
667        "externals/dng_sdk/source/dng_tile_iterator.cpp",
668        "externals/dng_sdk/source/dng_tone_curve.cpp",
669        "externals/dng_sdk/source/dng_utils.cpp",
670        "externals/dng_sdk/source/dng_xy_coord.cpp",
671    ],
672    hdrs = [
673        "externals/dng_sdk/source/RawEnvironment.h",
674        "externals/dng_sdk/source/dng_1d_function.h",
675        "externals/dng_sdk/source/dng_1d_table.h",
676        "externals/dng_sdk/source/dng_abort_sniffer.h",
677        "externals/dng_sdk/source/dng_area_task.h",
678        "externals/dng_sdk/source/dng_assertions.h",
679        "externals/dng_sdk/source/dng_auto_ptr.h",
680        "externals/dng_sdk/source/dng_bad_pixels.h",
681        "externals/dng_sdk/source/dng_bottlenecks.h",
682        "externals/dng_sdk/source/dng_camera_profile.h",
683        "externals/dng_sdk/source/dng_classes.h",
684        "externals/dng_sdk/source/dng_color_space.h",
685        "externals/dng_sdk/source/dng_color_spec.h",
686        "externals/dng_sdk/source/dng_date_time.h",
687        "externals/dng_sdk/source/dng_errors.h",
688        "externals/dng_sdk/source/dng_exceptions.h",
689        "externals/dng_sdk/source/dng_exif.h",
690        "externals/dng_sdk/source/dng_fast_module.h",
691        "externals/dng_sdk/source/dng_file_stream.h",
692        "externals/dng_sdk/source/dng_filter_task.h",
693        "externals/dng_sdk/source/dng_fingerprint.h",
694        "externals/dng_sdk/source/dng_flags.h",
695        "externals/dng_sdk/source/dng_gain_map.h",
696        "externals/dng_sdk/source/dng_globals.h",
697        "externals/dng_sdk/source/dng_host.h",
698        "externals/dng_sdk/source/dng_hue_sat_map.h",
699        "externals/dng_sdk/source/dng_ifd.h",
700        "externals/dng_sdk/source/dng_image.h",
701        "externals/dng_sdk/source/dng_image_writer.h",
702        "externals/dng_sdk/source/dng_info.h",
703        "externals/dng_sdk/source/dng_iptc.h",
704        "externals/dng_sdk/source/dng_jpeg_image.h",
705        "externals/dng_sdk/source/dng_jpeg_memory_source.h",
706        "externals/dng_sdk/source/dng_jpeglib.h",
707        "externals/dng_sdk/source/dng_lens_correction.h",
708        "externals/dng_sdk/source/dng_linearization_info.h",
709        "externals/dng_sdk/source/dng_lossless_jpeg.h",
710        "externals/dng_sdk/source/dng_matrix.h",
711        "externals/dng_sdk/source/dng_memory.h",
712        "externals/dng_sdk/source/dng_memory_stream.h",
713        "externals/dng_sdk/source/dng_misc_opcodes.h",
714        "externals/dng_sdk/source/dng_mosaic_info.h",
715        "externals/dng_sdk/source/dng_mutex.h",
716        "externals/dng_sdk/source/dng_negative.h",
717        "externals/dng_sdk/source/dng_opcode_list.h",
718        "externals/dng_sdk/source/dng_opcodes.h",
719        "externals/dng_sdk/source/dng_orientation.h",
720        "externals/dng_sdk/source/dng_parse_utils.h",
721        "externals/dng_sdk/source/dng_pixel_buffer.h",
722        "externals/dng_sdk/source/dng_point.h",
723        "externals/dng_sdk/source/dng_preview.h",
724        "externals/dng_sdk/source/dng_pthread.h",
725        "externals/dng_sdk/source/dng_rational.h",
726        "externals/dng_sdk/source/dng_read_image.h",
727        "externals/dng_sdk/source/dng_rect.h",
728        "externals/dng_sdk/source/dng_ref_counted_block.h",
729        "externals/dng_sdk/source/dng_reference.h",
730        "externals/dng_sdk/source/dng_render.h",
731        "externals/dng_sdk/source/dng_resample.h",
732        "externals/dng_sdk/source/dng_safe_arithmetic.h",
733        "externals/dng_sdk/source/dng_sdk_limits.h",
734        "externals/dng_sdk/source/dng_shared.h",
735        "externals/dng_sdk/source/dng_simple_image.h",
736        "externals/dng_sdk/source/dng_spline.h",
737        "externals/dng_sdk/source/dng_stream.h",
738        "externals/dng_sdk/source/dng_string.h",
739        "externals/dng_sdk/source/dng_string_list.h",
740        "externals/dng_sdk/source/dng_tag_codes.h",
741        "externals/dng_sdk/source/dng_tag_types.h",
742        "externals/dng_sdk/source/dng_tag_values.h",
743        "externals/dng_sdk/source/dng_temperature.h",
744        "externals/dng_sdk/source/dng_tile_iterator.h",
745        "externals/dng_sdk/source/dng_tone_curve.h",
746        "externals/dng_sdk/source/dng_types.h",
747        "externals/dng_sdk/source/dng_uncopyable.h",
748        "externals/dng_sdk/source/dng_utils.h",
749        "externals/dng_sdk/source/dng_xy_coord.h",
750    ],
751    copts = [
752        "-isystem third_party/externals/dng_sdk/source/",
753    ],
754    defines = [
755        "qDNGBigEndian=0",  # The GN rules had this defined publicly
756    ] + selects.with_or({
757        ("@platforms//cpu:x86_64", "@platforms//cpu:arm"): [
758            # DNG SDK uses __builtin_smulll_overflow() to detect 64x64 bit multiply overflow.
759            # On some platforms, the compiler implements this with __mulodi4().
760            # I can't quite figure out how to link that here, so instead here's a shim for
761            # __builtin_smulll_overflow() that multiplies normally assuming no overflow.
762            # Previously tracked in b/29412086.
763            # Currently, without this define, we see:
764            # Error: cannot initialize a parameter of type 'long long *' with an rvalue of type 'std::int64_t *' (aka 'long *')
765            "__builtin_smulll_overflow(x,y,p)=(*(p)=(x)*(y),false)",
766        ],
767        "//conditions:default": [],
768    }),
769    local_defines = [
770        "qDNGReportErrors=0",
771        "qDNGThreadSafe=1",
772        "qDNGUseLibJPEG=1",
773        "qDNGUseXMP=0",
774        "qDNGValidate=0",
775        "qDNGValidateTarget=1",
776        "UNIX_ENV=1",
777    ],
778    strip_include_prefix = "externals/dng_sdk/source/",
779    deps = [
780        "libjpeg-turbo",
781        "zlib",
782    ],
783)
784