1# This file will be copied into //third_party/externals/libwebp via the new_local_repository 2# rule in WORKSPACE.bazel, so all files should be relative to that path. 3 4# We define this here because the emscripten toolchain calls the cpu wasm, whereas the 5# bazelbuild/platforms call it wasm32. https://github.com/emscripten-core/emsdk/issues/919 6config_setting( 7 name = "cpu_wasm", 8 values = { 9 "cpu": "wasm", 10 }, 11) 12 13WEBP_SRCS = [ 14 "sharpyuv/sharpyuv.c", 15 "sharpyuv/sharpyuv.h", 16 "sharpyuv/sharpyuv_cpu.c", 17 "sharpyuv/sharpyuv_cpu.h", 18 "sharpyuv/sharpyuv_csp.c", 19 "sharpyuv/sharpyuv_csp.h", 20 "sharpyuv/sharpyuv_dsp.c", 21 "sharpyuv/sharpyuv_dsp.h", 22 "sharpyuv/sharpyuv_gamma.c", 23 "sharpyuv/sharpyuv_gamma.h", 24 "sharpyuv/sharpyuv_neon.c", 25 "sharpyuv/sharpyuv_sse2.c", 26 "src/dec/alpha_dec.c", 27 "src/dec/alphai_dec.h", 28 "src/dec/buffer_dec.c", 29 "src/dec/common_dec.h", 30 "src/dec/frame_dec.c", 31 "src/dec/idec_dec.c", 32 "src/dec/io_dec.c", 33 "src/dec/quant_dec.c", 34 "src/dec/tree_dec.c", 35 "src/dec/vp8_dec.c", 36 "src/dec/vp8_dec.h", 37 "src/dec/vp8i_dec.h", 38 "src/dec/vp8l_dec.c", 39 "src/dec/vp8li_dec.h", 40 "src/dec/webp_dec.c", 41 "src/dec/webpi_dec.h", 42 "src/demux/anim_decode.c", 43 "src/demux/demux.c", 44 "src/dsp/alpha_processing.c", 45 "src/dsp/alpha_processing_mips_dsp_r2.c", 46 "src/dsp/alpha_processing_neon.c", 47 "src/dsp/alpha_processing_sse2.c", 48 "src/dsp/common_sse2.h", 49 "src/dsp/common_sse41.h", 50 "src/dsp/cost.c", 51 "src/dsp/cost_mips32.c", 52 "src/dsp/cost_mips_dsp_r2.c", 53 "src/dsp/cost_neon.c", 54 "src/dsp/cost_sse2.c", 55 "src/dsp/cpu.c", 56 "src/dsp/cpu.h", 57 "src/dsp/dec.c", 58 "src/dsp/dec_clip_tables.c", 59 "src/dsp/dec_mips32.c", 60 "src/dsp/dec_mips_dsp_r2.c", 61 "src/dsp/dec_msa.c", 62 "src/dsp/dec_neon.c", 63 "src/dsp/dec_sse2.c", 64 "src/dsp/dsp.h", 65 "src/dsp/enc.c", 66 "src/dsp/enc_mips32.c", 67 "src/dsp/enc_mips_dsp_r2.c", 68 "src/dsp/enc_msa.c", 69 "src/dsp/enc_neon.c", 70 "src/dsp/enc_sse2.c", 71 "src/dsp/filters.c", 72 "src/dsp/filters_mips_dsp_r2.c", 73 "src/dsp/filters_msa.c", 74 "src/dsp/filters_neon.c", 75 "src/dsp/filters_sse2.c", 76 "src/dsp/lossless.c", 77 "src/dsp/lossless.h", 78 "src/dsp/lossless_common.h", 79 "src/dsp/lossless_enc.c", 80 "src/dsp/lossless_enc_mips32.c", 81 "src/dsp/lossless_enc_mips_dsp_r2.c", 82 "src/dsp/lossless_enc_msa.c", 83 "src/dsp/lossless_enc_neon.c", 84 "src/dsp/lossless_enc_sse2.c", 85 "src/dsp/lossless_mips_dsp_r2.c", 86 "src/dsp/lossless_msa.c", 87 "src/dsp/lossless_neon.c", 88 "src/dsp/lossless_sse2.c", 89 "src/dsp/mips_macro.h", 90 "src/dsp/msa_macro.h", 91 "src/dsp/neon.h", 92 "src/dsp/quant.h", 93 "src/dsp/rescaler.c", 94 "src/dsp/rescaler_mips32.c", 95 "src/dsp/rescaler_mips_dsp_r2.c", 96 "src/dsp/rescaler_msa.c", 97 "src/dsp/rescaler_neon.c", 98 "src/dsp/rescaler_sse2.c", 99 "src/dsp/ssim.c", 100 "src/dsp/ssim_sse2.c", 101 "src/dsp/upsampling.c", 102 "src/dsp/upsampling_mips_dsp_r2.c", 103 "src/dsp/upsampling_msa.c", 104 "src/dsp/upsampling_neon.c", 105 "src/dsp/upsampling_sse2.c", 106 "src/dsp/yuv.c", 107 "src/dsp/yuv.h", 108 "src/dsp/yuv_mips32.c", 109 "src/dsp/yuv_mips_dsp_r2.c", 110 "src/dsp/yuv_neon.c", 111 "src/dsp/yuv_sse2.c", 112 "src/enc/alpha_enc.c", 113 "src/enc/analysis_enc.c", 114 "src/enc/backward_references_cost_enc.c", 115 "src/enc/backward_references_enc.c", 116 "src/enc/backward_references_enc.h", 117 "src/enc/config_enc.c", 118 "src/enc/cost_enc.c", 119 "src/enc/cost_enc.h", 120 "src/enc/filter_enc.c", 121 "src/enc/frame_enc.c", 122 "src/enc/histogram_enc.c", 123 "src/enc/histogram_enc.h", 124 "src/enc/iterator_enc.c", 125 "src/enc/near_lossless_enc.c", 126 "src/enc/picture_csp_enc.c", 127 "src/enc/picture_enc.c", 128 "src/enc/picture_psnr_enc.c", 129 "src/enc/picture_rescale_enc.c", 130 "src/enc/picture_tools_enc.c", 131 "src/enc/predictor_enc.c", 132 "src/enc/quant_enc.c", 133 "src/enc/syntax_enc.c", 134 "src/enc/token_enc.c", 135 "src/enc/tree_enc.c", 136 "src/enc/vp8i_enc.h", 137 "src/enc/vp8l_enc.c", 138 "src/enc/vp8li_enc.h", 139 "src/enc/webp_enc.c", 140 "src/mux/anim_encode.c", 141 "src/mux/animi.h", 142 "src/mux/muxedit.c", 143 "src/mux/muxi.h", 144 "src/mux/muxinternal.c", 145 "src/mux/muxread.c", 146 "src/utils/bit_reader_inl_utils.h", 147 "src/utils/bit_reader_utils.c", 148 "src/utils/bit_reader_utils.h", 149 "src/utils/bit_writer_utils.c", 150 "src/utils/bit_writer_utils.h", 151 "src/utils/color_cache_utils.c", 152 "src/utils/color_cache_utils.h", 153 "src/utils/endian_inl_utils.h", 154 "src/utils/filters_utils.c", 155 "src/utils/filters_utils.h", 156 "src/utils/huffman_encode_utils.c", 157 "src/utils/huffman_encode_utils.h", 158 "src/utils/huffman_utils.c", 159 "src/utils/huffman_utils.h", 160 "src/utils/palette.c", 161 "src/utils/palette.h", 162 "src/utils/quant_levels_dec_utils.c", 163 "src/utils/quant_levels_dec_utils.h", 164 "src/utils/quant_levels_utils.c", 165 "src/utils/quant_levels_utils.h", 166 "src/utils/random_utils.c", 167 "src/utils/random_utils.h", 168 "src/utils/rescaler_utils.c", 169 "src/utils/rescaler_utils.h", 170 "src/utils/thread_utils.c", 171 "src/utils/thread_utils.h", 172 "src/utils/utils.c", 173 "src/utils/utils.h", 174] + select({ 175 "@platforms//cpu:x86_64": [ 176 "src/dsp/alpha_processing_sse41.c", 177 "src/dsp/dec_sse41.c", 178 "src/dsp/enc_sse41.c", 179 "src/dsp/lossless_enc_sse41.c", 180 "src/dsp/lossless_sse41.c", 181 "src/dsp/upsampling_sse41.c", 182 "src/dsp/yuv_sse41.c", 183 ], 184 ":cpu_wasm": [], # not sure why wasm doesn't use default 185 "//conditions:default": [], 186}) 187 188WEBP_COPTS = [ 189 "-Wno-unused-but-set-variable", 190] + select({ 191 "@platforms//cpu:x86_64": ["-msse4.1"], 192 ":cpu_wasm": [], # not sure why wasm doesn't use default 193 "//conditions:default": [], 194}) 195 196WEBP_DEFINES = [ 197 # TODO(scroggo): swizzle ourself in SkWebpCodec instead of requiring this non-standard libwebp. 198 "WEBP_SWAP_16BIT_CSP", 199] 200 201cc_library( 202 name = "libwebp", 203 srcs = WEBP_SRCS, 204 hdrs = [ 205 "src/webp/decode.h", 206 "src/webp/demux.h", 207 "src/webp/encode.h", 208 "src/webp/format_constants.h", 209 "src/webp/mux.h", 210 "src/webp/mux_types.h", 211 "src/webp/types.h", 212 ], 213 copts = WEBP_COPTS, 214 includes = ["src"], 215 local_defines = WEBP_DEFINES, 216 textual_hdrs = ["src/dsp/cpu.c"], 217 visibility = ["//visibility:public"], 218) 219