xref: /aosp_15_r20/external/tensorflow/third_party/jpeg/jpeg.BUILD (revision b6fb3261f9314811a0f4371741dbb8839866f948)
1# Description:
2#   libjpeg-turbo is a drop in replacement for jpeglib optimized with SIMD.
3
4load("@org_tensorflow//third_party:common.bzl", "template_rule")
5
6licenses(["notice"])  # custom notice-style license, see LICENSE.md
7
8exports_files(["LICENSE.md"])
9
10WIN_COPTS = [
11    "/Ox",
12    "-DWITH_SIMD",
13    "-wd4996",
14]
15
16libjpegturbo_copts = select({
17    ":android": [
18        "-O3",
19        "-fPIC",
20        "-w",
21    ],
22    ":windows": WIN_COPTS,
23    "//conditions:default": [
24        "-O3",
25        "-w",
26    ],
27}) + select({
28    ":armeabi-v7a": [
29        "-D__ARM_NEON__",
30        "-DNEON_INTRINSICS",
31        "-march=armv7-a",
32        "-mfpu=neon",
33        "-mfloat-abi=softfp",
34        "-fprefetch-loop-arrays",
35    ],
36    ":arm64-v8a": [
37        "-DNEON_INTRINSICS",
38    ],
39    ":linux_ppc64le": [
40        "-mcpu=power8",
41        "-mtune=power8",
42    ],
43    "//conditions:default": [],
44})
45
46cc_library(
47    name = "jpeg",
48    srcs = [
49        "jaricom.c",
50        "jcapimin.c",
51        "jcapistd.c",
52        "jcarith.c",
53        "jccoefct.c",
54        "jccolor.c",
55        "jcdctmgr.c",
56        "jchuff.c",
57        "jchuff.h",
58        "jcinit.c",
59        "jcmainct.c",
60        "jcmarker.c",
61        "jcmaster.c",
62        "jcomapi.c",
63        "jconfig.h",
64        "jconfigint.h",
65        "jcparam.c",
66        "jcphuff.c",
67        "jcprepct.c",
68        "jcsample.c",
69        "jctrans.c",
70        "jdapimin.c",
71        "jdapistd.c",
72        "jdarith.c",
73        "jdatadst.c",
74        "jdatasrc.c",
75        "jdcoefct.c",
76        "jdcoefct.h",
77        "jdcolor.c",
78        "jdct.h",
79        "jddctmgr.c",
80        "jdhuff.c",
81        "jdhuff.h",
82        "jdinput.c",
83        "jdmainct.c",
84        "jdmainct.h",
85        "jdmarker.c",
86        "jdmaster.c",
87        "jdmaster.h",
88        "jdmerge.c",
89        "jdmerge.h",
90        "jdphuff.c",
91        "jdpostct.c",
92        "jdsample.c",
93        "jdsample.h",
94        "jdtrans.c",
95        "jerror.c",
96        "jfdctflt.c",
97        "jfdctfst.c",
98        "jfdctint.c",
99        "jidctflt.c",
100        "jidctfst.c",
101        "jidctint.c",
102        "jidctred.c",
103        "jinclude.h",
104        "jmemmgr.c",
105        "jmemnobs.c",
106        "jmemsys.h",
107        "jpeg_nbits_table.h",
108        "jpegcomp.h",
109        "jquant1.c",
110        "jquant2.c",
111        "jutils.c",
112        "jversion.h",
113    ],
114    hdrs = [
115        "jccolext.c",  # should have been named .inc
116        "jdcol565.c",  # should have been named .inc
117        "jdcolext.c",  # should have been named .inc
118        "jdmrg565.c",  # should have been named .inc
119        "jdmrgext.c",  # should have been named .inc
120        "jerror.h",
121        "jmorecfg.h",
122        "jpegint.h",
123        "jpeglib.h",
124        "jstdhuff.c",  # should have been named .inc
125    ],
126    copts = libjpegturbo_copts,
127    visibility = ["//visibility:public"],
128    deps = select({
129        ":k8": [":simd_x86_64"],
130        ":armeabi-v7a": [":simd_armv7a"],
131        ":arm64-v8a": [":simd_armv8a"],
132        ":linux_ppc64le": [":simd_altivec"],
133        ":windows": [":simd_win_x86_64"],
134        "//conditions:default": [":simd_none"],
135    }),
136)
137
138cc_library(
139    name = "simd_altivec",
140    srcs = [
141        "jchuff.h",
142        "jconfig.h",
143        "jdct.h",
144        "jerror.h",
145        "jinclude.h",
146        "jmorecfg.h",
147        "jpegint.h",
148        "jpeglib.h",
149        "jsimd.h",
150        "jsimddct.h",
151        "simd/jsimd.h",
152        "simd/powerpc/jccolor-altivec.c",
153        "simd/powerpc/jcgray-altivec.c",
154        "simd/powerpc/jcsample-altivec.c",
155        "simd/powerpc/jdcolor-altivec.c",
156        "simd/powerpc/jdmerge-altivec.c",
157        "simd/powerpc/jdsample-altivec.c",
158        "simd/powerpc/jfdctfst-altivec.c",
159        "simd/powerpc/jfdctint-altivec.c",
160        "simd/powerpc/jidctfst-altivec.c",
161        "simd/powerpc/jidctint-altivec.c",
162        "simd/powerpc/jquanti-altivec.c",
163        "simd/powerpc/jsimd.c",
164    ],
165    hdrs = [
166        "simd/powerpc/jccolext-altivec.c",
167        "simd/powerpc/jcgryext-altivec.c",
168        "simd/powerpc/jcsample.h",
169        "simd/powerpc/jdcolext-altivec.c",
170        "simd/powerpc/jdmrgext-altivec.c",
171        "simd/powerpc/jsimd_altivec.h",
172    ],
173    copts = libjpegturbo_copts,
174)
175
176SRCS_SIMD_COMMON = [
177    "jchuff.h",
178    "jconfig.h",
179    "jconfigint.h",
180    "jdct.h",
181    "jerror.h",
182    "jinclude.h",
183    "jmorecfg.h",
184    "jpegint.h",
185    "jpeglib.h",
186    "jsimddct.h",
187    "jsimd.h",
188    "simd/jsimd.h",
189]
190
191cc_library(
192    name = "simd_x86_64",
193    srcs = [
194        "simd/x86_64/jccolor-avx2.o",
195        "simd/x86_64/jccolor-sse2.o",
196        "simd/x86_64/jcgray-avx2.o",
197        "simd/x86_64/jcgray-sse2.o",
198        "simd/x86_64/jchuff-sse2.o",
199        "simd/x86_64/jcphuff-sse2.o",
200        "simd/x86_64/jcsample-avx2.o",
201        "simd/x86_64/jcsample-sse2.o",
202        "simd/x86_64/jdcolor-avx2.o",
203        "simd/x86_64/jdcolor-sse2.o",
204        "simd/x86_64/jdmerge-avx2.o",
205        "simd/x86_64/jdmerge-sse2.o",
206        "simd/x86_64/jdsample-avx2.o",
207        "simd/x86_64/jdsample-sse2.o",
208        "simd/x86_64/jfdctflt-sse.o",
209        "simd/x86_64/jfdctfst-sse2.o",
210        "simd/x86_64/jfdctint-avx2.o",
211        "simd/x86_64/jfdctint-sse2.o",
212        "simd/x86_64/jidctflt-sse2.o",
213        "simd/x86_64/jidctfst-sse2.o",
214        "simd/x86_64/jidctint-avx2.o",
215        "simd/x86_64/jidctint-sse2.o",
216        "simd/x86_64/jidctred-sse2.o",
217        "simd/x86_64/jquantf-sse2.o",
218        "simd/x86_64/jquanti-avx2.o",
219        "simd/x86_64/jquanti-sse2.o",
220        "simd/x86_64/jsimd.c",
221        "simd/x86_64/jsimdcpu.o",
222    ] + SRCS_SIMD_COMMON,
223    copts = libjpegturbo_copts,
224    linkstatic = 1,
225)
226
227genrule(
228    name = "simd_x86_64_assemblage23",
229    srcs = [
230        "jconfig.h",
231        "jconfigint.h",
232        "simd/x86_64/jccolext-avx2.asm",
233        "simd/x86_64/jccolext-sse2.asm",
234        "simd/x86_64/jccolor-avx2.asm",
235        "simd/x86_64/jccolor-sse2.asm",
236        "simd/x86_64/jcgray-avx2.asm",
237        "simd/x86_64/jcgray-sse2.asm",
238        "simd/x86_64/jcgryext-avx2.asm",
239        "simd/x86_64/jcgryext-sse2.asm",
240        "simd/x86_64/jchuff-sse2.asm",
241        "simd/x86_64/jcphuff-sse2.asm",
242        "simd/x86_64/jcsample-avx2.asm",
243        "simd/x86_64/jcsample-sse2.asm",
244        "simd/x86_64/jdcolext-avx2.asm",
245        "simd/x86_64/jdcolext-sse2.asm",
246        "simd/x86_64/jdcolor-avx2.asm",
247        "simd/x86_64/jdcolor-sse2.asm",
248        "simd/x86_64/jdmerge-avx2.asm",
249        "simd/x86_64/jdmerge-sse2.asm",
250        "simd/x86_64/jdmrgext-avx2.asm",
251        "simd/x86_64/jdmrgext-sse2.asm",
252        "simd/x86_64/jdsample-avx2.asm",
253        "simd/x86_64/jdsample-sse2.asm",
254        "simd/x86_64/jfdctflt-sse.asm",
255        "simd/x86_64/jfdctfst-sse2.asm",
256        "simd/x86_64/jfdctint-avx2.asm",
257        "simd/x86_64/jfdctint-sse2.asm",
258        "simd/x86_64/jidctflt-sse2.asm",
259        "simd/x86_64/jidctfst-sse2.asm",
260        "simd/x86_64/jidctint-avx2.asm",
261        "simd/x86_64/jidctint-sse2.asm",
262        "simd/x86_64/jidctred-sse2.asm",
263        "simd/x86_64/jquantf-sse2.asm",
264        "simd/x86_64/jquanti-avx2.asm",
265        "simd/x86_64/jquanti-sse2.asm",
266        "simd/x86_64/jsimdcpu.asm",
267        "simd/nasm/jcolsamp.inc",
268        "simd/nasm/jdct.inc",
269        "simd/nasm/jsimdcfg.inc",
270        "simd/nasm/jsimdcfg.inc.h",
271        "simd/nasm/jsimdext.inc",
272    ],
273    outs = [
274        "simd/x86_64/jccolor-avx2.o",
275        "simd/x86_64/jccolor-sse2.o",
276        "simd/x86_64/jcgray-avx2.o",
277        "simd/x86_64/jcgray-sse2.o",
278        "simd/x86_64/jchuff-sse2.o",
279        "simd/x86_64/jcphuff-sse2.o",
280        "simd/x86_64/jcsample-avx2.o",
281        "simd/x86_64/jcsample-sse2.o",
282        "simd/x86_64/jdcolor-avx2.o",
283        "simd/x86_64/jdcolor-sse2.o",
284        "simd/x86_64/jdmerge-avx2.o",
285        "simd/x86_64/jdmerge-sse2.o",
286        "simd/x86_64/jdsample-avx2.o",
287        "simd/x86_64/jdsample-sse2.o",
288        "simd/x86_64/jfdctflt-sse.o",
289        "simd/x86_64/jfdctfst-sse2.o",
290        "simd/x86_64/jfdctint-avx2.o",
291        "simd/x86_64/jfdctint-sse2.o",
292        "simd/x86_64/jidctflt-sse2.o",
293        "simd/x86_64/jidctfst-sse2.o",
294        "simd/x86_64/jidctint-avx2.o",
295        "simd/x86_64/jidctint-sse2.o",
296        "simd/x86_64/jidctred-sse2.o",
297        "simd/x86_64/jquantf-sse2.o",
298        "simd/x86_64/jquanti-avx2.o",
299        "simd/x86_64/jquanti-sse2.o",
300        "simd/x86_64/jsimdcpu.o",
301    ],
302    cmd = "for out in $(OUTS); do\n" +
303          "  $(location @nasm//:nasm) -f elf64" +
304          "    -DELF -DPIC -D__x86_64__" +
305          "    -I $$(dirname $(location jconfig.h))/" +
306          "    -I $$(dirname $(location jconfigint.h))/" +
307          "    -I $$(dirname $(location simd/nasm/jsimdcfg.inc.h))/" +
308          "    -I $$(dirname $(location simd/x86_64/jccolext-sse2.asm))/" +
309          "    -o $$out" +
310          "    $$(dirname $(location simd/x86_64/jccolext-sse2.asm))/$$(basename $${out%.o}.asm)\n" +
311          "done",
312    tools = ["@nasm"],
313)
314
315template_rule(
316    name = "neon-compat_gen",
317    src = "simd/arm/neon-compat.h.in",
318    out = "simd/arm/neon-compat.h",
319    substitutions = {
320        "#cmakedefine HAVE_VLD1_S16_X3": "#define HAVE_VLD1_S16_X3",
321        "#cmakedefine HAVE_VLD1_U16_X2": "#define HAVE_VLD1_U16_X2",
322        "#cmakedefine HAVE_VLD1Q_U8_X4": "#define HAVE_VLD1Q_U8_X4",
323    },
324)
325
326genrule(
327    name = "neon-compat_hdr_src",
328    srcs = ["simd/arm/neon-compat.h"],
329    outs = ["neon-compat.h"],
330    cmd = "cp $(location simd/arm/neon-compat.h) $@",
331)
332
333cc_library(
334    name = "neon-compat_hdr",
335    hdrs = ["neon-compat.h"],
336    copts = libjpegturbo_copts,
337)
338
339SRCS_SIMD_ARM = [
340    "simd/arm/jccolor-neon.c",
341    "simd/arm/jcgray-neon.c",
342    "simd/arm/jcphuff-neon.c",
343    "simd/arm/jcsample-neon.c",
344    "simd/arm/jdcolor-neon.c",
345    "simd/arm/jdmerge-neon.c",
346    "simd/arm/jdsample-neon.c",
347    "simd/arm/jfdctfst-neon.c",
348    "simd/arm/jfdctint-neon.c",
349    "simd/arm/jidctfst-neon.c",
350    "simd/arm/jidctint-neon.c",
351    "simd/arm/jidctred-neon.c",
352    "simd/arm/jquanti-neon.c",
353]
354
355# .c files in the following list are used like .h files in that they are
356# "#include"-ed in the actual .c files. So, treat them like normal headers, and
357# they *should not* be compiled into individual objects.
358HDRS_SIMD_ARM = [
359    "simd/arm/align.h",
360    "simd/arm/jchuff.h",
361    "simd/arm/jcgryext-neon.c",
362    "simd/arm/jdcolext-neon.c",
363    "simd/arm/jdmrgext-neon.c",
364]
365
366cc_library(
367    name = "simd_armv7a",
368    srcs = [
369        "simd/arm/aarch32/jsimd.c",
370        "simd/arm/aarch32/jchuff-neon.c",
371    ] + SRCS_SIMD_COMMON + SRCS_SIMD_ARM,
372    hdrs = [
373        "simd/arm/aarch32/jccolext-neon.c",
374    ] + HDRS_SIMD_ARM,
375    copts = libjpegturbo_copts,
376    visibility = ["//visibility:private"],
377    deps = [":neon-compat_hdr"],
378)
379
380cc_library(
381    name = "simd_armv8a",
382    srcs = [
383        "simd/arm/aarch64/jsimd.c",
384        "simd/arm/aarch64/jchuff-neon.c",
385    ] + SRCS_SIMD_COMMON + SRCS_SIMD_ARM,
386    hdrs = [
387        "simd/arm/aarch64/jccolext-neon.c",
388    ] + HDRS_SIMD_ARM,
389    copts = libjpegturbo_copts,
390    visibility = ["//visibility:private"],
391    deps = [":neon-compat_hdr"],
392)
393
394cc_library(
395    name = "simd_win_x86_64",
396    srcs = [
397        "simd/x86_64/jccolor-avx2.obj",
398        "simd/x86_64/jccolor-sse2.obj",
399        "simd/x86_64/jcgray-avx2.obj",
400        "simd/x86_64/jcgray-sse2.obj",
401        "simd/x86_64/jchuff-sse2.obj",
402        "simd/x86_64/jcphuff-sse2.obj",
403        "simd/x86_64/jcsample-avx2.obj",
404        "simd/x86_64/jcsample-sse2.obj",
405        "simd/x86_64/jdcolor-avx2.obj",
406        "simd/x86_64/jdcolor-sse2.obj",
407        "simd/x86_64/jdmerge-avx2.obj",
408        "simd/x86_64/jdmerge-sse2.obj",
409        "simd/x86_64/jdsample-avx2.obj",
410        "simd/x86_64/jdsample-sse2.obj",
411        "simd/x86_64/jfdctflt-sse.obj",
412        "simd/x86_64/jfdctfst-sse2.obj",
413        "simd/x86_64/jfdctint-avx2.obj",
414        "simd/x86_64/jfdctint-sse2.obj",
415        "simd/x86_64/jidctflt-sse2.obj",
416        "simd/x86_64/jidctfst-sse2.obj",
417        "simd/x86_64/jidctint-avx2.obj",
418        "simd/x86_64/jidctint-sse2.obj",
419        "simd/x86_64/jidctred-sse2.obj",
420        "simd/x86_64/jquantf-sse2.obj",
421        "simd/x86_64/jquanti-avx2.obj",
422        "simd/x86_64/jquanti-sse2.obj",
423        "simd/x86_64/jsimd.c",
424        "simd/x86_64/jsimdcpu.obj",
425    ] + SRCS_SIMD_COMMON,
426    copts = libjpegturbo_copts,
427)
428
429genrule(
430    name = "simd_win_x86_64_assemble",
431    srcs = [
432        "jconfig.h",
433        "jconfigint.h",
434        "simd/x86_64/jccolext-avx2.asm",
435        "simd/x86_64/jccolext-sse2.asm",
436        "simd/x86_64/jccolor-avx2.asm",
437        "simd/x86_64/jccolor-sse2.asm",
438        "simd/x86_64/jcgray-avx2.asm",
439        "simd/x86_64/jcgray-sse2.asm",
440        "simd/x86_64/jcgryext-avx2.asm",
441        "simd/x86_64/jcgryext-sse2.asm",
442        "simd/x86_64/jchuff-sse2.asm",
443        "simd/x86_64/jcphuff-sse2.asm",
444        "simd/x86_64/jcsample-avx2.asm",
445        "simd/x86_64/jcsample-sse2.asm",
446        "simd/x86_64/jdcolext-avx2.asm",
447        "simd/x86_64/jdcolext-sse2.asm",
448        "simd/x86_64/jdcolor-avx2.asm",
449        "simd/x86_64/jdcolor-sse2.asm",
450        "simd/x86_64/jdmerge-avx2.asm",
451        "simd/x86_64/jdmerge-sse2.asm",
452        "simd/x86_64/jdmrgext-avx2.asm",
453        "simd/x86_64/jdmrgext-sse2.asm",
454        "simd/x86_64/jdsample-avx2.asm",
455        "simd/x86_64/jdsample-sse2.asm",
456        "simd/x86_64/jfdctflt-sse.asm",
457        "simd/x86_64/jfdctfst-sse2.asm",
458        "simd/x86_64/jfdctint-avx2.asm",
459        "simd/x86_64/jfdctint-sse2.asm",
460        "simd/x86_64/jidctflt-sse2.asm",
461        "simd/x86_64/jidctfst-sse2.asm",
462        "simd/x86_64/jidctint-avx2.asm",
463        "simd/x86_64/jidctint-sse2.asm",
464        "simd/x86_64/jidctred-sse2.asm",
465        "simd/x86_64/jquantf-sse2.asm",
466        "simd/x86_64/jquanti-avx2.asm",
467        "simd/x86_64/jquanti-sse2.asm",
468        "simd/x86_64/jsimdcpu.asm",
469        "simd/nasm/jcolsamp.inc",
470        "simd/nasm/jdct.inc",
471        "simd/nasm/jsimdcfg.inc",
472        "simd/nasm/jsimdcfg.inc.h",
473        "simd/nasm/jsimdext.inc",
474    ],
475    outs = [
476        "simd/x86_64/jccolor-avx2.obj",
477        "simd/x86_64/jccolor-sse2.obj",
478        "simd/x86_64/jcgray-avx2.obj",
479        "simd/x86_64/jcgray-sse2.obj",
480        "simd/x86_64/jchuff-sse2.obj",
481        "simd/x86_64/jcphuff-sse2.obj",
482        "simd/x86_64/jcsample-avx2.obj",
483        "simd/x86_64/jcsample-sse2.obj",
484        "simd/x86_64/jdcolor-avx2.obj",
485        "simd/x86_64/jdcolor-sse2.obj",
486        "simd/x86_64/jdmerge-avx2.obj",
487        "simd/x86_64/jdmerge-sse2.obj",
488        "simd/x86_64/jdsample-avx2.obj",
489        "simd/x86_64/jdsample-sse2.obj",
490        "simd/x86_64/jfdctflt-sse.obj",
491        "simd/x86_64/jfdctfst-sse2.obj",
492        "simd/x86_64/jfdctint-avx2.obj",
493        "simd/x86_64/jfdctint-sse2.obj",
494        "simd/x86_64/jidctflt-sse2.obj",
495        "simd/x86_64/jidctfst-sse2.obj",
496        "simd/x86_64/jidctint-avx2.obj",
497        "simd/x86_64/jidctint-sse2.obj",
498        "simd/x86_64/jidctred-sse2.obj",
499        "simd/x86_64/jquantf-sse2.obj",
500        "simd/x86_64/jquanti-avx2.obj",
501        "simd/x86_64/jquanti-sse2.obj",
502        "simd/x86_64/jsimdcpu.obj",
503    ],
504    cmd = "for out in $(OUTS); do\n" +
505          "  $(location @nasm//:nasm) -fwin64 -DWIN64 -D__x86_64__" +
506          "    -I $$(dirname $(location simd/x86_64/jccolext-sse2.asm))/" +
507          "    -I $$(dirname $(location simd/nasm/jdct.inc))/" +
508          "    -I $$(dirname $(location simd/nasm/jdct.inc))/../../win/" +
509          "    -o $$out" +
510          "    $$(dirname $(location simd/x86_64/jccolext-sse2.asm))/$$(basename $${out%.obj}.asm)\n" +
511          "done",
512    tools = ["@nasm"],
513)
514
515cc_library(
516    name = "simd_none",
517    srcs = [
518        "jchuff.h",
519        "jconfig.h",
520        "jdct.h",
521        "jerror.h",
522        "jinclude.h",
523        "jmorecfg.h",
524        "jpegint.h",
525        "jpeglib.h",
526        "jsimd.h",
527        "jsimd_none.c",
528        "jsimddct.h",
529    ],
530    copts = libjpegturbo_copts,
531)
532
533template_rule(
534    name = "jconfig_win",
535    src = "win/jconfig.h.in",
536    out = "jconfig_win.h",
537    substitutions = {
538        "@JPEG_LIB_VERSION@": "62",
539        "@VERSION@": "2.0.0",
540        "@LIBJPEG_TURBO_VERSION_NUMBER@": "2000000",
541        "@BITS_IN_JSAMPLE@": "8",
542        "#cmakedefine C_ARITH_CODING_SUPPORTED": "#define C_ARITH_CODING_SUPPORTED",
543        "#cmakedefine D_ARITH_CODING_SUPPORTED": "#define D_ARITH_CODING_SUPPORTED",
544        "#cmakedefine MEM_SRCDST_SUPPORTED": "#define MEM_SRCDST_SUPPORTED",
545        "#cmakedefine WITH_SIMD": "",
546    },
547)
548
549JCONFIG_NOWIN_COMMON_SUBSTITUTIONS = {
550    "@JPEG_LIB_VERSION@": "62",
551    "@VERSION@": "2.0.0",
552    "@LIBJPEG_TURBO_VERSION_NUMBER@": "2000000",
553    "#cmakedefine C_ARITH_CODING_SUPPORTED 1": "#define C_ARITH_CODING_SUPPORTED 1",
554    "#cmakedefine D_ARITH_CODING_SUPPORTED 1": "#define D_ARITH_CODING_SUPPORTED 1",
555    "#cmakedefine MEM_SRCDST_SUPPORTED 1": "#define MEM_SRCDST_SUPPORTED 1",
556    "@BITS_IN_JSAMPLE@": "8",
557    "#cmakedefine HAVE_LOCALE_H 1": "#define HAVE_LOCALE_H 1",
558    "#cmakedefine HAVE_STDDEF_H 1": "#define HAVE_STDDEF_H 1",
559    "#cmakedefine HAVE_STDLIB_H 1": "#define HAVE_STDLIB_H 1",
560    "#cmakedefine NEED_SYS_TYPES_H 1": "#define NEED_SYS_TYPES_H 1",
561    "#cmakedefine NEED_BSD_STRINGS 1": "",
562    "#cmakedefine HAVE_UNSIGNED_CHAR 1": "#define HAVE_UNSIGNED_CHAR 1",
563    "#cmakedefine HAVE_UNSIGNED_SHORT 1": "#define HAVE_UNSIGNED_SHORT 1",
564    "#cmakedefine INCOMPLETE_TYPES_BROKEN 1": "",
565    "#cmakedefine RIGHT_SHIFT_IS_UNSIGNED 1": "",
566    "#cmakedefine __CHAR_UNSIGNED__ 1": "",
567    "#undef const": "",
568    "#undef size_t": "",
569}
570
571JCONFIG_NOWIN_SIMD_SUBSTITUTIONS = {
572    "#cmakedefine WITH_SIMD 1": "#define WITH_SIMD 1",
573}
574
575JCONFIG_NOWIN_NOSIMD_SUBSTITUTIONS = {
576    "#cmakedefine WITH_SIMD 1": "",
577}
578
579JCONFIG_NOWIN_SIMD_SUBSTITUTIONS.update(JCONFIG_NOWIN_COMMON_SUBSTITUTIONS)
580
581JCONFIG_NOWIN_NOSIMD_SUBSTITUTIONS.update(JCONFIG_NOWIN_COMMON_SUBSTITUTIONS)
582
583template_rule(
584    name = "jconfig_nowin_nosimd",
585    src = "jconfig.h.in",
586    out = "jconfig_nowin_nosimd.h",
587    substitutions = JCONFIG_NOWIN_NOSIMD_SUBSTITUTIONS,
588)
589
590template_rule(
591    name = "jconfig_nowin_simd",
592    src = "jconfig.h.in",
593    out = "jconfig_nowin_simd.h",
594    substitutions = JCONFIG_NOWIN_SIMD_SUBSTITUTIONS,
595)
596
597JCONFIGINT_COMMON_SUBSTITUTIONS = {
598    "@BUILD@": "20210424",
599    "@VERSION@": "2.1.0",
600    "@CMAKE_PROJECT_NAME@": "libjpeg-turbo",
601    "#undef inline": "",
602    "#cmakedefine HAVE_INTRIN_H": "",
603}
604
605JCONFIGINT_NOWIN_SUBSTITUTIONS = {
606    "#cmakedefine HAVE_BUILTIN_CTZL": "#define HAVE_BUILTIN_CTZL",
607    "@INLINE@": "inline __attribute__((always_inline))",
608    "#define SIZEOF_SIZE_T  @SIZE_T@": "#if (__WORDSIZE==64 && !defined(__native_client__))\n" +
609                                       "#define SIZEOF_SIZE_T 8\n" +
610                                       "#else\n" +
611                                       "#define SIZEOF_SIZE_T 4\n" +
612                                       "#endif\n",
613}
614
615JCONFIGINT_WIN_SUBSTITUTIONS = {
616    "#cmakedefine HAVE_BUILTIN_CTZL": "",
617    "#define INLINE  @INLINE@": "#if defined(__GNUC__)\n" +
618                                "#define INLINE inline __attribute__((always_inline))\n" +
619                                "#elif defined(_MSC_VER)\n" +
620                                "#define INLINE __forceinline\n" +
621                                "#else\n" +
622                                "#define INLINE\n" +
623                                "#endif\n",
624    "#define SIZEOF_SIZE_T  @SIZE_T@": "#if (__WORDSIZE==64)\n" +
625                                       "#define SIZEOF_SIZE_T 8\n" +
626                                       "#else\n" +
627                                       "#define SIZEOF_SIZE_T 4\n" +
628                                       "#endif\n",
629}
630
631JCONFIGINT_NOWIN_SUBSTITUTIONS.update(JCONFIGINT_COMMON_SUBSTITUTIONS)
632
633JCONFIGINT_WIN_SUBSTITUTIONS.update(JCONFIGINT_COMMON_SUBSTITUTIONS)
634
635template_rule(
636    name = "jconfigint_nowin",
637    src = "jconfigint.h.in",
638    out = "jconfigint_nowin.h",
639    substitutions = JCONFIGINT_NOWIN_SUBSTITUTIONS,
640)
641
642template_rule(
643    name = "jconfigint_win",
644    src = "jconfigint.h.in",
645    out = "jconfigint_win.h",
646    substitutions = JCONFIGINT_WIN_SUBSTITUTIONS,
647)
648
649genrule(
650    name = "configure",
651    srcs = [
652        "jconfig_win.h",
653        "jconfig_nowin_nosimd.h",
654        "jconfig_nowin_simd.h",
655    ],
656    outs = ["jconfig.h"],
657    cmd = select({
658        ":windows": "cp $(location jconfig_win.h) $@",
659        ":k8": "cp $(location jconfig_nowin_simd.h) $@",
660        ":armeabi-v7a": "cp $(location jconfig_nowin_simd.h) $@",
661        ":arm64-v8a": "cp $(location jconfig_nowin_simd.h) $@",
662        ":linux_ppc64le": "cp $(location jconfig_nowin_simd.h) $@",
663        "//conditions:default": "cp $(location jconfig_nowin_nosimd.h) $@",
664    }),
665)
666
667genrule(
668    name = "configure_internal",
669    srcs = [
670        "jconfigint_win.h",
671        "jconfigint_nowin.h",
672    ],
673    outs = ["jconfigint.h"],
674    cmd = select({
675        ":windows": "cp $(location jconfigint_win.h) $@",
676        "//conditions:default": "cp $(location jconfigint_nowin.h) $@",
677    }),
678)
679
680# jiminy cricket the way this file is generated is completely outrageous
681genrule(
682    name = "configure_simd",
683    outs = ["simd/jsimdcfg.inc"],
684    cmd = "cat <<'EOF' >$@\n" +
685          "%define DCTSIZE 8\n" +
686          "%define DCTSIZE2 64\n" +
687          "%define RGB_RED 0\n" +
688          "%define RGB_GREEN 1\n" +
689          "%define RGB_BLUE 2\n" +
690          "%define RGB_PIXELSIZE 3\n" +
691          "%define EXT_RGB_RED 0\n" +
692          "%define EXT_RGB_GREEN 1\n" +
693          "%define EXT_RGB_BLUE 2\n" +
694          "%define EXT_RGB_PIXELSIZE 3\n" +
695          "%define EXT_RGBX_RED 0\n" +
696          "%define EXT_RGBX_GREEN 1\n" +
697          "%define EXT_RGBX_BLUE 2\n" +
698          "%define EXT_RGBX_PIXELSIZE 4\n" +
699          "%define EXT_BGR_RED 2\n" +
700          "%define EXT_BGR_GREEN 1\n" +
701          "%define EXT_BGR_BLUE 0\n" +
702          "%define EXT_BGR_PIXELSIZE 3\n" +
703          "%define EXT_BGRX_RED 2\n" +
704          "%define EXT_BGRX_GREEN 1\n" +
705          "%define EXT_BGRX_BLUE 0\n" +
706          "%define EXT_BGRX_PIXELSIZE 4\n" +
707          "%define EXT_XBGR_RED 3\n" +
708          "%define EXT_XBGR_GREEN 2\n" +
709          "%define EXT_XBGR_BLUE 1\n" +
710          "%define EXT_XBGR_PIXELSIZE 4\n" +
711          "%define EXT_XRGB_RED 1\n" +
712          "%define EXT_XRGB_GREEN 2\n" +
713          "%define EXT_XRGB_BLUE 3\n" +
714          "%define EXT_XRGB_PIXELSIZE 4\n" +
715          "%define RGBX_FILLER_0XFF 1\n" +
716          "%define JSAMPLE byte ; unsigned char\n" +
717          "%define SIZEOF_JSAMPLE SIZEOF_BYTE ; sizeof(JSAMPLE)\n" +
718          "%define CENTERJSAMPLE 128\n" +
719          "%define JCOEF word ; short\n" +
720          "%define SIZEOF_JCOEF SIZEOF_WORD ; sizeof(JCOEF)\n" +
721          "%define JDIMENSION dword ; unsigned int\n" +
722          "%define SIZEOF_JDIMENSION SIZEOF_DWORD ; sizeof(JDIMENSION)\n" +
723          "%define JSAMPROW POINTER ; JSAMPLE * (jpeglib.h)\n" +
724          "%define JSAMPARRAY POINTER ; JSAMPROW * (jpeglib.h)\n" +
725          "%define JSAMPIMAGE POINTER ; JSAMPARRAY * (jpeglib.h)\n" +
726          "%define JCOEFPTR POINTER ; JCOEF * (jpeglib.h)\n" +
727          "%define SIZEOF_JSAMPROW SIZEOF_POINTER ; sizeof(JSAMPROW)\n" +
728          "%define SIZEOF_JSAMPARRAY SIZEOF_POINTER ; sizeof(JSAMPARRAY)\n" +
729          "%define SIZEOF_JSAMPIMAGE SIZEOF_POINTER ; sizeof(JSAMPIMAGE)\n" +
730          "%define SIZEOF_JCOEFPTR SIZEOF_POINTER ; sizeof(JCOEFPTR)\n" +
731          "%define DCTELEM word ; short\n" +
732          "%define SIZEOF_DCTELEM SIZEOF_WORD ; sizeof(DCTELEM)\n" +
733          "%define float FP32 ; float\n" +
734          "%define SIZEOF_FAST_FLOAT SIZEOF_FP32 ; sizeof(float)\n" +
735          "%define ISLOW_MULT_TYPE word ; must be short\n" +
736          "%define SIZEOF_ISLOW_MULT_TYPE SIZEOF_WORD ; sizeof(ISLOW_MULT_TYPE)\n" +
737          "%define IFAST_MULT_TYPE word ; must be short\n" +
738          "%define SIZEOF_IFAST_MULT_TYPE SIZEOF_WORD ; sizeof(IFAST_MULT_TYPE)\n" +
739          "%define IFAST_SCALE_BITS 2 ; fractional bits in scale factors\n" +
740          "%define FLOAT_MULT_TYPE FP32 ; must be float\n" +
741          "%define SIZEOF_FLOAT_MULT_TYPE SIZEOF_FP32 ; sizeof(FLOAT_MULT_TYPE)\n" +
742          "%define JSIMD_NONE 0x00\n" +
743          "%define JSIMD_MMX 0x01\n" +
744          "%define JSIMD_3DNOW 0x02\n" +
745          "%define JSIMD_SSE 0x04\n" +
746          "%define JSIMD_SSE2 0x08\n" +
747          "EOF",
748)
749
750config_setting(
751    name = "k8",
752    values = {"cpu": "k8"},
753)
754
755config_setting(
756    name = "android",
757    values = {"crosstool_top": "//external:android/crosstool"},
758)
759
760config_setting(
761    name = "armeabi-v7a",
762    values = {"cpu": "armeabi-v7a"},
763)
764
765config_setting(
766    name = "arm64-v8a",
767    values = {"cpu": "arm64-v8a"},
768)
769
770config_setting(
771    name = "windows",
772    values = {"cpu": "x64_windows"},
773)
774
775config_setting(
776    name = "linux_ppc64le",
777    values = {"cpu": "ppc"},
778)
779