• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# This file will be copied into //third_party/externals/libjpeg-turbo via the new_local_repository
2# rule in WORKSPACE.bazel, so all files should be relative to that path.
3load("@bazel_skylib//lib:selects.bzl", "selects")
4
5config_setting(
6    name = "mac_arm64",
7    constraint_values = [
8        "@platforms//cpu:arm64",
9        "@platforms//os:macos",
10    ],
11)
12
13selects.config_setting_group(
14    name = "arm_or_arm64",
15    match_any = [
16        "@platforms//cpu:arm",
17        "@platforms//cpu:arm64",
18    ],
19)
20
21JPEGTURBO_SRCS = [
22    "jaricom.c",
23    "jcapimin.c",
24    "jcapistd.c",
25    "jcarith.c",
26    "jccoefct.c",
27    "jccolor.c",
28    "jcdctmgr.c",
29    "jchuff.c",
30    "jchuff.h",
31    "jcinit.c",
32    "jcmainct.c",
33    "jcmarker.c",
34    "jcmaster.c",
35    "jcomapi.c",
36    "jconfigint.h",
37    "jcparam.c",
38    "jcphuff.c",
39    "jcprepct.c",
40    "jcsample.c",
41    "jdapimin.c",
42    "jdapistd.c",
43    "jdarith.c",
44    "jdcoefct.c",
45    "jdcoefct.h",
46    "jdcolor.c",
47    "jdct.h",
48    "jddctmgr.c",
49    "jdhuff.c",
50    "jdhuff.h",
51    "jdinput.c",
52    "jdmainct.c",
53    "jdmainct.h",
54    "jdmarker.c",
55    "jdmaster.c",
56    "jdmaster.h",
57    "jdmerge.c",
58    "jdmerge.h",
59    "jdphuff.c",
60    "jdpostct.c",
61    "jdsample.c",
62    "jdsample.h",
63    "jerror.c",
64    "jfdctflt.c",
65    "jfdctfst.c",
66    "jfdctint.c",
67    "jidctflt.c",
68    "jidctfst.c",
69    "jidctint.c",
70    "jidctred.c",
71    "jinclude.h",
72    "jmemmgr.c",
73    "jmemnobs.c",
74    "jmemsys.h",
75    "jpeg_nbits_table.c",
76    "jpeg_nbits_table.h",
77    "jpegcomp.h",
78    "jpegint.h",
79    "jquant1.c",
80    "jquant2.c",
81    "jsimd.h",
82    "jsimddct.h",
83    "jutils.c",
84    "jversion.h",
85] + select({
86    ":arm_or_arm64": [
87        "simd/arm/jccolor-neon.c",
88        "simd/arm/jcgray-neon.c",
89        "simd/arm/jchuff.h",
90        "simd/arm/jcphuff-neon.c",
91        "simd/arm/jcsample-neon.c",
92        "simd/arm/jdcolor-neon.c",
93        "simd/arm/jdmerge-neon.c",
94        "simd/arm/jdsample-neon.c",
95        "simd/arm/jfdctfst-neon.c",
96        "simd/arm/jfdctint-neon.c",
97        "simd/arm/jidctfst-neon.c",
98        "simd/arm/jidctint-neon.c",
99        "simd/arm/jidctred-neon.c",
100        "simd/arm/jquanti-neon.c",
101        "simd/arm/neon-compat.h",
102        "simd/jsimd.h",
103    ],
104    "//conditions:default": ["jsimd_none.c"],
105}) + select({
106    "@platforms//cpu:arm": [
107        "simd/arm/aarch32/jchuff-neon.c",
108        "simd/arm/aarch32/jsimd.c",
109    ],
110    "@platforms//cpu:arm64": [
111        "simd/arm/aarch64/jchuff-neon.c",
112        "simd/arm/aarch64/jsimd.c",
113        "simd/arm/align.h",
114    ],
115    "//conditions:default": [],
116})
117
118JPEGTURBO_TEXT_HDRS = [
119    "jccolext.c",
120    "jdmrgext.c",
121    "jdcolext.c",
122    "jdcol565.c",
123    "jdmrg565.c",
124    "jstdhuff.c",
125] + select({
126    ":arm_or_arm64": [
127        "simd/arm/jdmrgext-neon.c",
128        "simd/arm/jcgryext-neon.c",
129        "simd/arm/jdcolext-neon.c",
130    ],
131    "//conditions:default": [],
132}) + select({
133    "@platforms//cpu:arm": [
134        "simd/arm/aarch32/jccolext-neon.c",
135    ],
136    "@platforms//cpu:arm64": [
137        "simd/arm/aarch64/jccolext-neon.c",
138    ],
139    "//conditions:default": [],
140})
141
142JPEGTURBO_DEFINES = [
143    # Add support for arithmetic encoding (C_) and decoding (D_).
144    # This matches Android. Note that such JPEGs are likely rare, given lack of
145    # support by major browsers.
146    "C_ARITH_CODING_SUPPORTED=1",
147    "D_ARITH_CODING_SUPPORTED=1",
148] + select({
149    ":arm_or_arm64": ["NEON_INTRINSICS"],
150    "//conditions:default": [],
151}) + select({
152    # Cuts a 64K table.
153    "//conditions:default": ["USE_CLZ_INTRINSIC"],
154    ":mac_arm64": [],  # disabled on M1 macs already
155    "@platforms//os:windows": [],
156})
157
158cc_library(
159    name = "libjpeg_turbo",
160    srcs = JPEGTURBO_SRCS,
161    hdrs = [
162        "jconfig.h",
163        "jerror.h",
164        "jmorecfg.h",
165        "jpeglib.h",
166        "jpeglibmangler.h",
167    ],
168    copts = [
169        # There are some #include "neon-compat.h" etc that need this search path
170        "-Iexternal/libjpeg_turbo/simd/arm/",
171    ],
172    local_defines = JPEGTURBO_DEFINES,
173    textual_hdrs = JPEGTURBO_TEXT_HDRS,
174    visibility = ["//visibility:public"],
175)
176