blob: c7abc01f911fcfed9be8be7fc10cb3c6ac835827 [file] [log] [blame]
# This file will be copied into //third_party/externals/libjpeg-turbo via the new_local_repository
# rule in WORKSPACE.bazel, so all files should be relative to that path.
load("@bazel_skylib//lib:selects.bzl", "selects")
config_setting(
name = "mac_arm64",
constraint_values = [
"@platforms//cpu:arm64",
"@platforms//os:macos",
],
)
selects.config_setting_group(
name = "arm_or_arm64",
match_any = [
"@platforms//cpu:arm",
"@platforms//cpu:arm64",
],
)
JPEGTURBO_SRCS = [
"jaricom.c",
"jcapimin.c",
"jcapistd.c",
"jcarith.c",
"jccoefct.c",
"jccolor.c",
"jcdctmgr.c",
"jchuff.c",
"jchuff.h",
"jcinit.c",
"jcmainct.c",
"jcmarker.c",
"jcmaster.c",
"jcomapi.c",
"jconfigint.h",
"jcparam.c",
"jcphuff.c",
"jcprepct.c",
"jcsample.c",
"jdapimin.c",
"jdapistd.c",
"jdarith.c",
"jdcoefct.c",
"jdcoefct.h",
"jdcolor.c",
"jdct.h",
"jddctmgr.c",
"jdhuff.c",
"jdhuff.h",
"jdinput.c",
"jdmainct.c",
"jdmainct.h",
"jdmarker.c",
"jdmaster.c",
"jdmaster.h",
"jdmerge.c",
"jdmerge.h",
"jdphuff.c",
"jdpostct.c",
"jdsample.c",
"jdsample.h",
"jerror.c",
"jfdctflt.c",
"jfdctfst.c",
"jfdctint.c",
"jidctflt.c",
"jidctfst.c",
"jidctint.c",
"jidctred.c",
"jinclude.h",
"jmemmgr.c",
"jmemnobs.c",
"jmemsys.h",
"jpeg_nbits_table.c",
"jpeg_nbits_table.h",
"jpegcomp.h",
"jpegint.h",
"jquant1.c",
"jquant2.c",
"jsimd.h",
"jsimddct.h",
"jutils.c",
"jversion.h",
] + select({
":arm_or_arm64": [
"simd/arm/jccolor-neon.c",
"simd/arm/jcgray-neon.c",
"simd/arm/jchuff.h",
"simd/arm/jcphuff-neon.c",
"simd/arm/jcsample-neon.c",
"simd/arm/jdcolor-neon.c",
"simd/arm/jdmerge-neon.c",
"simd/arm/jdsample-neon.c",
"simd/arm/jfdctfst-neon.c",
"simd/arm/jfdctint-neon.c",
"simd/arm/jidctfst-neon.c",
"simd/arm/jidctint-neon.c",
"simd/arm/jidctred-neon.c",
"simd/arm/jquanti-neon.c",
"simd/arm/neon-compat.h",
"simd/jsimd.h",
],
"//conditions:default": ["jsimd_none.c"],
}) + select({
"@platforms//cpu:arm": [
"simd/arm/aarch32/jchuff-neon.c",
"simd/arm/aarch32/jsimd.c",
],
"@platforms//cpu:arm64": [
"simd/arm/aarch64/jchuff-neon.c",
"simd/arm/aarch64/jsimd.c",
"simd/arm/align.h",
],
"//conditions:default": [],
})
JPEGTURBO_TEXT_HDRS = [
"jccolext.c",
"jdmrgext.c",
"jdcolext.c",
"jdcol565.c",
"jdmrg565.c",
"jstdhuff.c",
] + select({
":arm_or_arm64": [
"simd/arm/jdmrgext-neon.c",
"simd/arm/jcgryext-neon.c",
"simd/arm/jdcolext-neon.c",
],
"//conditions:default": [],
}) + select({
"@platforms//cpu:arm": [
"simd/arm/aarch32/jccolext-neon.c",
],
"@platforms//cpu:arm64": [
"simd/arm/aarch64/jccolext-neon.c",
],
"//conditions:default": [],
})
JPEGTURBO_DEFINES = [
# Add support for arithmetic encoding (C_) and decoding (D_).
# This matches Android. Note that such JPEGs are likely rare, given lack of
# support by major browsers.
"C_ARITH_CODING_SUPPORTED=1",
"D_ARITH_CODING_SUPPORTED=1",
] + select({
":arm_or_arm64": ["NEON_INTRINSICS"],
"//conditions:default": [],
}) + select({
# Cuts a 64K table.
"//conditions:default": ["USE_CLZ_INTRINSIC"],
":mac_arm64": [], # disabled on M1 macs already
"@platforms//os:windows": [],
})
cc_library(
name = "libjpeg_turbo",
srcs = JPEGTURBO_SRCS,
hdrs = [
"jconfig.h",
"jerror.h",
"jmorecfg.h",
"jpeglib.h",
"jpeglibmangler.h",
],
copts = [
# There are some #include "neon-compat.h" etc that need this search path
"-Iexternal/libjpeg_turbo/simd/arm/",
],
local_defines = JPEGTURBO_DEFINES,
textual_hdrs = JPEGTURBO_TEXT_HDRS,
visibility = ["//visibility:public"],
)