xref: /aosp_15_r20/external/libjpeg-turbo/Android.bp (revision dfc6aa5c1cfd4bc4e2018dc74aa96e29ee49c6da)
1// Set up common variables for usage across the libjpeg-turbo modules
2
3package {
4    default_applicable_licenses: ["external_libjpeg-turbo_license"],
5}
6
7// Added automatically by a large-scale-change that took the approach of
8// 'apply every license found to every target'. While this makes sure we respect
9// every license restriction, it may not be entirely correct.
10//
11// e.g. GPL in an MIT project might only apply to the contrib/ directory.
12//
13// Please consider splitting the single license below into multiple licenses,
14// taking care not to lose any license_kind information, and overriding the
15// default license using the 'licenses: [...]' property on targets as needed.
16//
17// For unused files, consider creating a 'fileGroup' with "//visibility:private"
18// to attach the license to, and including a comment whether the files may be
19// used in the current project.
20// See: http://go/android-license-faq
21license {
22    name: "external_libjpeg-turbo_license",
23    visibility: [":__subpackages__"],
24    license_kinds: [
25        "SPDX-license-identifier-BSD",
26        "SPDX-license-identifier-Beerware",
27        "SPDX-license-identifier-MIT",
28        "SPDX-license-identifier-Zlib",
29        "legacy_notice",
30        "legacy_unencumbered",
31    ],
32    license_text: [
33        "LICENSE.md",
34    ],
35}
36
37cc_defaults {
38    name: "libjpeg-defaults",
39    cflags: [
40        "-DWITH_SIMD",
41        "-DNO_GETENV",
42
43        "-O3",
44        "-fstrict-aliasing",
45
46        "-Werror",
47        "-Wno-sign-compare",
48        "-Wno-unused-parameter",
49    ],
50    srcs: [
51        "jaricom.c",
52        "jcapimin.c",
53        "jcapistd.c",
54        "jcarith.c",
55        "jccoefct.c",
56        "jccolor.c",
57        "jcdctmgr.c",
58        "jchuff.c",
59        "jcicc.c",
60        "jcinit.c",
61        "jcmainct.c",
62        "jcmarker.c",
63        "jcmaster.c",
64        "jcomapi.c",
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        "jdcolor.c",
77        "jddctmgr.c",
78        "jdhuff.c",
79        "jdicc.c",
80        "jdinput.c",
81        "jdmainct.c",
82        "jdmarker.c",
83        "jdmaster.c",
84        "jdmerge.c",
85        "jdphuff.c",
86        "jdpostct.c",
87        "jdsample.c",
88        "jdtrans.c",
89        "jerror.c",
90        "jfdctflt.c",
91        "jfdctfst.c",
92        "jfdctint.c",
93        "jidctflt.c",
94        "jidctfst.c",
95        "jidctint.c",
96        "jidctred.c",
97        "jmemmgr.c",
98        "jmemnobs.c",
99        "jpeg_nbits_table.c",
100        "jquant1.c",
101        "jquant2.c",
102        "jutils.c",
103    ],
104
105    arch: {
106        arm: {
107            // By default, the build system generates ARM target binaries in
108            // thumb mode, where each instruction is 16 bits wide.  Defining
109            // this variable as arm forces the build system to generate object
110            // files in 32-bit arm mode.  This is the same setting previously
111            // used by libjpeg and it provides a small performance benefit.
112            instruction_set: "arm",
113            // ARM v7 NEON
114            srcs: [
115                "simd/arm/aarch32/jchuff-neon.c",
116                "simd/arm/aarch32/jsimd.c",
117                "simd/arm/jccolor-neon.c",
118                "simd/arm/jcgray-neon.c",
119                "simd/arm/jcphuff-neon.c",
120                "simd/arm/jcsample-neon.c",
121                "simd/arm/jdcolor-neon.c",
122                "simd/arm/jdmerge-neon.c",
123                "simd/arm/jdsample-neon.c",
124                "simd/arm/jfdctfst-neon.c",
125                "simd/arm/jfdctint-neon.c",
126                "simd/arm/jidctfst-neon.c",
127                "simd/arm/jidctint-neon.c",
128                "simd/arm/jidctred-neon.c",
129                "simd/arm/jquanti-neon.c",
130            ],
131            cflags: ["-DNEON_INTRINSICS", "-mfpu=neon"],
132            local_include_dirs: ["simd/arm"],
133        },
134        arm64: {
135            // ARM v8 64-bit NEON
136            srcs: [
137                "simd/arm/aarch64/jchuff-neon.c",
138                "simd/arm/aarch64/jsimd.c",
139                "simd/arm/jccolor-neon.c",
140                "simd/arm/jcgray-neon.c",
141                "simd/arm/jcphuff-neon.c",
142                "simd/arm/jcsample-neon.c",
143                "simd/arm/jdcolor-neon.c",
144                "simd/arm/jdmerge-neon.c",
145                "simd/arm/jdsample-neon.c",
146                "simd/arm/jfdctfst-neon.c",
147                "simd/arm/jfdctint-neon.c",
148                "simd/arm/jidctfst-neon.c",
149                "simd/arm/jidctint-neon.c",
150                "simd/arm/jidctred-neon.c",
151                "simd/arm/jquanti-neon.c",
152            ],
153            cflags: ["-DNEON_INTRINSICS"],
154            local_include_dirs: ["simd/arm"],
155        },
156        x86: {
157            // x86 MMX and SSE2
158            srcs: [
159                "simd/i386/jccolor-avx2.asm",
160                "simd/i386/jccolor-mmx.asm",
161                "simd/i386/jccolor-sse2.asm",
162                "simd/i386/jcgray-avx2.asm",
163                "simd/i386/jcgray-mmx.asm",
164                "simd/i386/jcgray-sse2.asm",
165                "simd/i386/jchuff-sse2.asm",
166                "simd/i386/jcphuff-sse2.asm",
167                "simd/i386/jcsample-avx2.asm",
168                "simd/i386/jcsample-mmx.asm",
169                "simd/i386/jcsample-sse2.asm",
170                "simd/i386/jdcolor-avx2.asm",
171                "simd/i386/jdcolor-mmx.asm",
172                "simd/i386/jdcolor-sse2.asm",
173                "simd/i386/jdmerge-avx2.asm",
174                "simd/i386/jdmerge-mmx.asm",
175                "simd/i386/jdmerge-sse2.asm",
176                "simd/i386/jdsample-avx2.asm",
177                "simd/i386/jdsample-mmx.asm",
178                "simd/i386/jdsample-sse2.asm",
179                "simd/i386/jfdctflt-3dn.asm",
180                "simd/i386/jfdctflt-sse.asm",
181                "simd/i386/jfdctfst-mmx.asm",
182                "simd/i386/jfdctfst-sse2.asm",
183                "simd/i386/jfdctint-avx2.asm",
184                "simd/i386/jfdctint-mmx.asm",
185                "simd/i386/jfdctint-sse2.asm",
186                "simd/i386/jidctflt-3dn.asm",
187                "simd/i386/jidctflt-sse.asm",
188                "simd/i386/jidctflt-sse2.asm",
189                "simd/i386/jidctfst-mmx.asm",
190                "simd/i386/jidctfst-sse2.asm",
191                "simd/i386/jidctint-avx2.asm",
192                "simd/i386/jidctint-mmx.asm",
193                "simd/i386/jidctint-sse2.asm",
194                "simd/i386/jidctred-mmx.asm",
195                "simd/i386/jidctred-sse2.asm",
196                "simd/i386/jquant-3dn.asm",
197                "simd/i386/jquant-mmx.asm",
198                "simd/i386/jquant-sse.asm",
199                "simd/i386/jquantf-sse2.asm",
200                "simd/i386/jquanti-avx2.asm",
201                "simd/i386/jquanti-sse2.asm",
202                "simd/i386/jsimd.c",
203                "simd/i386/jsimdcpu.asm",
204            ],
205            asflags: [
206                "-DPIC",
207                "-D__x86__",
208            ],
209            local_include_dirs: ["simd/nasm"],
210        },
211        x86_64: {
212            // x86-64 SSE2
213            srcs: [
214                "simd/x86_64/jccolor-avx2.asm",
215                "simd/x86_64/jccolor-sse2.asm",
216                "simd/x86_64/jcgray-avx2.asm",
217                "simd/x86_64/jcgray-sse2.asm",
218                "simd/x86_64/jchuff-sse2.asm",
219                "simd/x86_64/jcphuff-sse2.asm",
220                "simd/x86_64/jcsample-avx2.asm",
221                "simd/x86_64/jcsample-sse2.asm",
222                "simd/x86_64/jdcolor-avx2.asm",
223                "simd/x86_64/jdcolor-sse2.asm",
224                "simd/x86_64/jdmerge-avx2.asm",
225                "simd/x86_64/jdmerge-sse2.asm",
226                "simd/x86_64/jdsample-avx2.asm",
227                "simd/x86_64/jdsample-sse2.asm",
228                "simd/x86_64/jfdctflt-sse.asm",
229                "simd/x86_64/jfdctfst-sse2.asm",
230                "simd/x86_64/jfdctint-avx2.asm",
231                "simd/x86_64/jfdctint-sse2.asm",
232                "simd/x86_64/jidctflt-sse2.asm",
233                "simd/x86_64/jidctfst-sse2.asm",
234                "simd/x86_64/jidctint-avx2.asm",
235                "simd/x86_64/jidctint-sse2.asm",
236                "simd/x86_64/jidctred-sse2.asm",
237                "simd/x86_64/jquantf-sse2.asm",
238                "simd/x86_64/jquanti-avx2.asm",
239                "simd/x86_64/jquanti-sse2.asm",
240                "simd/x86_64/jsimd.c",
241                "simd/x86_64/jsimdcpu.asm",
242            ],
243            asflags: [
244                "-DPIC",
245                "-D__x86_64__",
246            ],
247            local_include_dirs: ["simd/nasm"],
248        },
249        riscv64: {
250            srcs: ["jsimd_none.c"],
251        },
252    },
253
254    target: {
255        linux: {
256            asflags: [
257                "-DELF",
258            ],
259        },
260        darwin: {
261            asflags: [
262                "-DMACHO",
263            ],
264        },
265        windows_x86: {
266            asflags: [
267                "-DWIN32",
268            ],
269        },
270        windows_x86_64: {
271            asflags: [
272                "-DWIN64",
273            ],
274        },
275    },
276}
277
278// Build as a shared library.
279cc_library {
280    name: "libjpeg",
281    afdo: true,
282    host_supported: true,
283    vendor_available: true,
284    product_available: true,
285    defaults: ["libjpeg-defaults"],
286    export_include_dirs: ["."],
287    target: {
288        windows: {
289            enabled: true,
290        },
291    },
292    sdk_version: "current",
293    min_sdk_version: "apex_inherit",
294    apex_available: [
295        "com.android.mediaprovider",
296        "//apex_available:platform"
297    ],
298}
299
300// Build static library against the NDK
301cc_library_static {
302    name: "libjpeg_static_ndk",
303    defaults: ["libjpeg-defaults"],
304    export_include_dirs: ["."],
305    sdk_version: "17",
306}
307
308// Definition for TJBench
309cc_binary {
310    name: "tjbench",
311
312    whole_static_libs: ["libjpeg"],
313
314    multilib: {
315        lib32: {
316            stem: "tj32",
317        },
318        lib64: {
319            stem: "tj64",
320        },
321    },
322
323    compile_multilib: "both",
324
325    cflags: [
326        "-DBMP_SUPPORTED",
327        "-DPPM_SUPPORTED",
328        "-Werror",
329        "-Wno-unused-parameter",
330    ],
331
332    srcs: [
333        "jdatadst-tj.c",
334        "jdatasrc-tj.c",
335        "rdbmp.c",
336        "rdppm.c",
337        "tjbench.c",
338        "tjutil.c",
339        "transupp.c",
340        "turbojpeg.c",
341        "wrbmp.c",
342        "wrppm.c",
343    ],
344}
345