# This file will be copied into //third_party/externals/libjxl via the new_local_repository # rule in WORKSPACE.bazel, so all files should be relative to that path. load("@rules_cc//cc:cc_library.bzl", "cc_library") # jxl_export.h appears to be a configuration file where clients can override what JXL_EXPORT # and JXL_DEPRECATED are. Our GN rules defined these as empty macros. Instead of doing that, # we just make a blank file here and define those empty macros in the cc_library rule. genrule( name = "generate_jxl_export", outs = ["lib/include/jxl/jxl_export.h"], cmd = "printf '#define JXL_EXPORT\\n#define JXL_DEPRECATED\\n' > $@", ) genrule( name = "generate_jxl_cms_export", outs = ["lib/include/jxl/jxl_cms_export.h"], cmd = "printf '#define JXL_CMS_EXPORT\\n#define JXL_CMS_DEPRECATED\\n' > $@", ) genrule( name = "generate_version_h", outs = ["lib/include/jxl/version.h"], cmd = "printf '#define JPEGXL_MAJOR_VERSION 0\\n#define JPEGXL_MINOR_VERSION 11\\n#define JPEGXL_PATCH_VERSION 2\\n' > $@", ) JPEG_XL_SRCS = [ "lib/jxl/ac_context.h", "lib/jxl/ac_strategy.cc", "lib/jxl/ac_strategy.h", "lib/jxl/alpha.cc", "lib/jxl/alpha.h", "lib/jxl/ans_common.cc", "lib/jxl/ans_common.h", "lib/jxl/ans_params.h", "lib/jxl/base/arch_macros.h", "lib/jxl/base/bits.h", "lib/jxl/base/byte_order.h", "lib/jxl/base/c_callback_support.h", "lib/jxl/base/common.h", "lib/jxl/base/compiler_specific.h", "lib/jxl/base/data_parallel.h", "lib/jxl/base/exif.h", "lib/jxl/base/fast_math-inl.h", "lib/jxl/base/float.h", "lib/jxl/base/iaca.h", "lib/jxl/base/include_jpeglib.h", "lib/jxl/base/matrix_ops.h", "lib/jxl/base/os_macros.h", "lib/jxl/base/override.h", "lib/jxl/base/printf_macros.h", "lib/jxl/base/random.h", "lib/jxl/base/rational_polynomial-inl.h", "lib/jxl/base/rect.h", "lib/jxl/base/sanitizer_definitions.h", "lib/jxl/base/sanitizers.h", "lib/jxl/base/scope_guard.h", "lib/jxl/base/span.h", "lib/jxl/base/status.h", "lib/jxl/blending.cc", "lib/jxl/blending.h", "lib/jxl/box_content_decoder.cc", "lib/jxl/box_content_decoder.h", "lib/jxl/butteraugli/butteraugli.cc", "lib/jxl/butteraugli/butteraugli.h", "lib/jxl/chroma_from_luma.cc", "lib/jxl/chroma_from_luma.h", "lib/jxl/cms/color_encoding_cms.h", "lib/jxl/cms/jxl_cms.cc", "lib/jxl/cms/jxl_cms_internal.h", "lib/jxl/cms/opsin_params.h", "lib/jxl/cms/tone_mapping-inl.h", "lib/jxl/cms/tone_mapping.h", "lib/jxl/cms/transfer_functions-inl.h", "lib/jxl/cms/transfer_functions.h", "lib/jxl/codec_in_out.h", "lib/jxl/coeff_order.cc", "lib/jxl/coeff_order.h", "lib/jxl/coeff_order_fwd.h", "lib/jxl/color_encoding_internal.cc", "lib/jxl/color_encoding_internal.h", "lib/jxl/common.h", "lib/jxl/compressed_dc.cc", "lib/jxl/compressed_dc.h", "lib/jxl/convolve-inl.h", "lib/jxl/convolve.h", "lib/jxl/convolve_separable5.cc", "lib/jxl/convolve_slow.cc", "lib/jxl/convolve_symmetric3.cc", "lib/jxl/convolve_symmetric5.cc", "lib/jxl/dct-inl.h", "lib/jxl/dct_block-inl.h", "lib/jxl/dct_scales.cc", "lib/jxl/dct_scales.h", "lib/jxl/dct_util.h", "lib/jxl/dec_ans.cc", "lib/jxl/dec_ans.h", "lib/jxl/dec_bit_reader.h", "lib/jxl/dec_cache.cc", "lib/jxl/dec_cache.h", "lib/jxl/dec_context_map.cc", "lib/jxl/dec_context_map.h", "lib/jxl/dec_external_image.cc", "lib/jxl/dec_external_image.h", "lib/jxl/dec_frame.cc", "lib/jxl/dec_frame.h", "lib/jxl/dec_group.cc", "lib/jxl/dec_group.h", "lib/jxl/dec_group_border.cc", "lib/jxl/dec_group_border.h", "lib/jxl/dec_huffman.cc", "lib/jxl/dec_huffman.h", "lib/jxl/dec_modular.cc", "lib/jxl/dec_modular.h", "lib/jxl/dec_noise.cc", "lib/jxl/dec_noise.h", "lib/jxl/dec_patch_dictionary.cc", "lib/jxl/dec_patch_dictionary.h", "lib/jxl/dec_transforms-inl.h", "lib/jxl/dec_xyb-inl.h", "lib/jxl/dec_xyb.cc", "lib/jxl/dec_xyb.h", "lib/jxl/decode.cc", "lib/jxl/decode_to_jpeg.cc", "lib/jxl/decode_to_jpeg.h", "lib/jxl/enc_ac_strategy.cc", "lib/jxl/enc_ac_strategy.h", "lib/jxl/enc_adaptive_quantization.cc", "lib/jxl/enc_adaptive_quantization.h", "lib/jxl/enc_ans.cc", "lib/jxl/enc_ans.h", "lib/jxl/enc_ans_params.h", "lib/jxl/enc_aux_out.cc", "lib/jxl/enc_aux_out.h", "lib/jxl/enc_bit_writer.cc", "lib/jxl/enc_bit_writer.h", "lib/jxl/enc_butteraugli_comparator.cc", "lib/jxl/enc_butteraugli_comparator.h", "lib/jxl/enc_cache.cc", "lib/jxl/enc_cache.h", "lib/jxl/enc_chroma_from_luma.cc", "lib/jxl/enc_chroma_from_luma.h", "lib/jxl/enc_cluster.cc", "lib/jxl/enc_cluster.h", "lib/jxl/enc_coeff_order.cc", "lib/jxl/enc_coeff_order.h", "lib/jxl/enc_comparator.cc", "lib/jxl/enc_comparator.h", "lib/jxl/enc_context_map.cc", "lib/jxl/enc_context_map.h", "lib/jxl/enc_debug_image.cc", "lib/jxl/enc_debug_image.h", "lib/jxl/enc_detect_dots.cc", "lib/jxl/enc_detect_dots.h", "lib/jxl/enc_dot_dictionary.cc", "lib/jxl/enc_dot_dictionary.h", "lib/jxl/enc_entropy_coder.cc", "lib/jxl/enc_entropy_coder.h", "lib/jxl/enc_external_image.cc", "lib/jxl/enc_external_image.h", "lib/jxl/enc_fast_lossless.cc", "lib/jxl/enc_fast_lossless.h", "lib/jxl/enc_fields.cc", "lib/jxl/enc_fields.h", "lib/jxl/enc_frame.cc", "lib/jxl/enc_frame.h", "lib/jxl/enc_gaborish.cc", "lib/jxl/enc_gaborish.h", "lib/jxl/enc_gamma_correct.h", "lib/jxl/enc_group.cc", "lib/jxl/enc_group.h", "lib/jxl/enc_heuristics.cc", "lib/jxl/enc_heuristics.h", "lib/jxl/enc_huffman.cc", "lib/jxl/enc_huffman.h", "lib/jxl/enc_huffman_tree.cc", "lib/jxl/enc_huffman_tree.h", "lib/jxl/enc_icc_codec.cc", "lib/jxl/enc_icc_codec.h", "lib/jxl/enc_image_bundle.cc", "lib/jxl/enc_image_bundle.h", "lib/jxl/enc_linalg.cc", "lib/jxl/enc_linalg.h", "lib/jxl/enc_modular.cc", "lib/jxl/enc_modular.h", "lib/jxl/enc_noise.cc", "lib/jxl/enc_noise.h", "lib/jxl/enc_optimize.h", "lib/jxl/enc_params.h", "lib/jxl/enc_patch_dictionary.cc", "lib/jxl/enc_patch_dictionary.h", "lib/jxl/enc_photon_noise.cc", "lib/jxl/enc_photon_noise.h", "lib/jxl/enc_progressive_split.cc", "lib/jxl/enc_progressive_split.h", "lib/jxl/enc_quant_weights.cc", "lib/jxl/enc_quant_weights.h", "lib/jxl/enc_splines.cc", "lib/jxl/enc_splines.h", "lib/jxl/enc_toc.cc", "lib/jxl/enc_toc.h", "lib/jxl/enc_transforms-inl.h", "lib/jxl/enc_transforms.cc", "lib/jxl/enc_transforms.h", "lib/jxl/enc_xyb.cc", "lib/jxl/enc_xyb.h", "lib/jxl/encode.cc", "lib/jxl/encode_internal.h", "lib/jxl/entropy_coder.cc", "lib/jxl/entropy_coder.h", "lib/jxl/epf.cc", "lib/jxl/epf.h", "lib/jxl/field_encodings.h", "lib/jxl/fields.cc", "lib/jxl/fields.h", "lib/jxl/frame_dimensions.h", "lib/jxl/frame_header.cc", "lib/jxl/frame_header.h", "lib/jxl/headers.cc", "lib/jxl/headers.h", "lib/jxl/huffman_table.cc", "lib/jxl/huffman_table.h", "lib/jxl/icc_codec.cc", "lib/jxl/icc_codec.h", "lib/jxl/icc_codec_common.cc", "lib/jxl/icc_codec_common.h", "lib/jxl/image.cc", "lib/jxl/image.h", "lib/jxl/image_bundle.cc", "lib/jxl/image_bundle.h", "lib/jxl/image_metadata.cc", "lib/jxl/image_metadata.h", "lib/jxl/image_ops.cc", "lib/jxl/image_ops.h", "lib/jxl/inverse_mtf-inl.h", "lib/jxl/jpeg/dec_jpeg_data.cc", "lib/jxl/jpeg/dec_jpeg_data.h", "lib/jxl/jpeg/dec_jpeg_data_writer.cc", "lib/jxl/jpeg/dec_jpeg_data_writer.h", "lib/jxl/jpeg/dec_jpeg_output_chunk.h", "lib/jxl/jpeg/dec_jpeg_serialization_state.h", "lib/jxl/jpeg/enc_jpeg_data.cc", "lib/jxl/jpeg/enc_jpeg_data.h", "lib/jxl/jpeg/enc_jpeg_data_reader.cc", "lib/jxl/jpeg/enc_jpeg_data_reader.h", "lib/jxl/jpeg/enc_jpeg_huffman_decode.cc", "lib/jxl/jpeg/enc_jpeg_huffman_decode.h", "lib/jxl/jpeg/jpeg_data.cc", "lib/jxl/jpeg/jpeg_data.h", "lib/jxl/lehmer_code.h", "lib/jxl/loop_filter.cc", "lib/jxl/loop_filter.h", "lib/jxl/luminance.cc", "lib/jxl/luminance.h", "lib/jxl/memory_manager_internal.cc", "lib/jxl/memory_manager_internal.h", "lib/jxl/modular/encoding/context_predict.h", "lib/jxl/modular/encoding/dec_ma.cc", "lib/jxl/modular/encoding/dec_ma.h", "lib/jxl/modular/encoding/enc_debug_tree.cc", "lib/jxl/modular/encoding/enc_debug_tree.h", "lib/jxl/modular/encoding/enc_encoding.cc", "lib/jxl/modular/encoding/enc_encoding.h", "lib/jxl/modular/encoding/enc_ma.cc", "lib/jxl/modular/encoding/enc_ma.h", "lib/jxl/modular/encoding/encoding.cc", "lib/jxl/modular/encoding/encoding.h", "lib/jxl/modular/encoding/ma_common.h", "lib/jxl/modular/modular_image.cc", "lib/jxl/modular/modular_image.h", "lib/jxl/modular/options.h", "lib/jxl/modular/transform/enc_palette.cc", "lib/jxl/modular/transform/enc_palette.h", "lib/jxl/modular/transform/enc_rct.cc", "lib/jxl/modular/transform/enc_rct.h", "lib/jxl/modular/transform/enc_squeeze.cc", "lib/jxl/modular/transform/enc_squeeze.h", "lib/jxl/modular/transform/enc_transform.cc", "lib/jxl/modular/transform/enc_transform.h", "lib/jxl/modular/transform/palette.cc", "lib/jxl/modular/transform/palette.h", "lib/jxl/modular/transform/rct.cc", "lib/jxl/modular/transform/rct.h", "lib/jxl/modular/transform/squeeze.cc", "lib/jxl/modular/transform/squeeze.h", "lib/jxl/modular/transform/transform.cc", "lib/jxl/modular/transform/transform.h", "lib/jxl/noise.h", "lib/jxl/opsin_params.cc", "lib/jxl/opsin_params.h", "lib/jxl/pack_signed.h", "lib/jxl/padded_bytes.h", "lib/jxl/passes_state.cc", "lib/jxl/passes_state.h", "lib/jxl/patch_dictionary_internal.h", "lib/jxl/quant_weights.cc", "lib/jxl/quant_weights.h", "lib/jxl/quantizer-inl.h", "lib/jxl/quantizer.cc", "lib/jxl/quantizer.h", "lib/jxl/render_pipeline/low_memory_render_pipeline.cc", "lib/jxl/render_pipeline/low_memory_render_pipeline.h", "lib/jxl/render_pipeline/render_pipeline.cc", "lib/jxl/render_pipeline/render_pipeline.h", "lib/jxl/render_pipeline/render_pipeline_stage.h", "lib/jxl/render_pipeline/simple_render_pipeline.cc", "lib/jxl/render_pipeline/simple_render_pipeline.h", "lib/jxl/render_pipeline/stage_blending.cc", "lib/jxl/render_pipeline/stage_blending.h", "lib/jxl/render_pipeline/stage_chroma_upsampling.cc", "lib/jxl/render_pipeline/stage_chroma_upsampling.h", "lib/jxl/render_pipeline/stage_cms.cc", "lib/jxl/render_pipeline/stage_cms.h", "lib/jxl/render_pipeline/stage_epf.cc", "lib/jxl/render_pipeline/stage_epf.h", "lib/jxl/render_pipeline/stage_from_linear.cc", "lib/jxl/render_pipeline/stage_from_linear.h", "lib/jxl/render_pipeline/stage_gaborish.cc", "lib/jxl/render_pipeline/stage_gaborish.h", "lib/jxl/render_pipeline/stage_noise.cc", "lib/jxl/render_pipeline/stage_noise.h", "lib/jxl/render_pipeline/stage_patches.cc", "lib/jxl/render_pipeline/stage_patches.h", "lib/jxl/render_pipeline/stage_splines.cc", "lib/jxl/render_pipeline/stage_splines.h", "lib/jxl/render_pipeline/stage_spot.cc", "lib/jxl/render_pipeline/stage_spot.h", "lib/jxl/render_pipeline/stage_to_linear.cc", "lib/jxl/render_pipeline/stage_to_linear.h", "lib/jxl/render_pipeline/stage_tone_mapping.cc", "lib/jxl/render_pipeline/stage_tone_mapping.h", "lib/jxl/render_pipeline/stage_upsampling.cc", "lib/jxl/render_pipeline/stage_upsampling.h", "lib/jxl/render_pipeline/stage_write.cc", "lib/jxl/render_pipeline/stage_write.h", "lib/jxl/render_pipeline/stage_xyb.cc", "lib/jxl/render_pipeline/stage_xyb.h", "lib/jxl/render_pipeline/stage_ycbcr.cc", "lib/jxl/render_pipeline/stage_ycbcr.h", "lib/jxl/simd_util-inl.h", "lib/jxl/simd_util.cc", "lib/jxl/simd_util.h", "lib/jxl/splines.cc", "lib/jxl/splines.h", "lib/jxl/toc.cc", "lib/jxl/toc.h", "lib/jxl/transpose-inl.h", "lib/jxl/xorshift128plus-inl.h", ] JPEG_XL_HDRS = [ "lib/include/jxl/cms.h", "lib/include/jxl/cms_interface.h", "lib/include/jxl/codestream_header.h", "lib/include/jxl/color_encoding.h", "lib/include/jxl/compressed_icc.h", "lib/include/jxl/decode.h", "lib/include/jxl/decode_cxx.h", "lib/include/jxl/encode.h", "lib/include/jxl/encode_cxx.h", "lib/include/jxl/gain_map.h", "lib/include/jxl/jxl_cms_export.h", "lib/include/jxl/jxl_export.h", "lib/include/jxl/memory_manager.h", "lib/include/jxl/parallel_runner.h", "lib/include/jxl/stats.h", "lib/include/jxl/types.h", "lib/include/jxl/version.h", ] JPEG_XL_LOCAL_DEFINES = [ "JPEGXL_ENABLE_SKCMS=1", "JXL_STATIC_DEFINE=1", "JXL_CMS_STATIC_DEFINE=1", ] JPEG_XL_PUBLIC_DEFINES = [ # This impacts some of the header files, so it must be public "JPEGXL_ENABLE_TRANSCODE_JPEG=0", ] cc_library( name = "libjxl", srcs = JPEG_XL_SRCS, hdrs = JPEG_XL_HDRS, copts = [ # jxl includes highway with angle brackets, but highway does not have an "includes" # attribute. This makes Bazel add the include folders of the dependency using -iquote # and thus clang throws an error about that. It is easier to add an extra include # path than figuring out if we should upstream the change to libjxl and/or highway. "-isystem external/highway", "-isystem external/+cpp_modules+highway", "-isystem external/skia++cpp_modules+highway", "-Wno-unused-function", ], defines = JPEG_XL_PUBLIC_DEFINES, includes = ["lib/include"], # We include jxl files from this folder local_defines = JPEG_XL_LOCAL_DEFINES, visibility = ["//visibility:public"], deps = [ "@brotli//:brotlidec", "@highway//:hwy", "@skia//modules/skcms", ], )