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