xref: /aosp_15_r20/external/webp/build.gradle (revision b2055c353e87c8814eb2b6b1b11112a1562253bd)
1// Define dependencies.
2buildscript {
3  repositories {
4    maven {
5      url "https://jcenter.bintray.com"
6    }
7  }
8  dependencies {
9    classpath "com.android.tools.build:gradle:${ANDROID_GRADLE_PLUGIN_VERSION}"
10  }
11}
12
13// Define versions in the project.
14project.ext {
15  buildToolsVersion = "${BUILD_TOOLS_VERSION}"
16  compileSdkVersion = COMPILE_SDK_VERSION.toInteger()
17}
18
19// Core libraries and executables.
20apply plugin: "c"
21def NEON
22model {
23  buildTypes {
24    debug
25    release
26  }
27  platforms {
28    arm {
29      architecture "arm"
30    }
31    arm64 {
32      architecture "arm64"
33    }
34    x86 {
35      architecture "x86"
36    }
37    x64 {
38      architecture "x86_64"
39    }
40    mips32r2
41    mips32r5
42    mips64r6
43  }
44  toolChains {
45    gcc(Gcc) {
46      target("mips32r2") {
47        cCompiler.args "-mips32r2"
48      }
49      target("mips32r5") {
50        cCompiler.args "-mips32r5"
51      }
52      target("mips64r6") {
53        cCompiler.args "-mips64r6"
54      }
55    }
56  }
57  binaries {
58    all {
59      if (toolChain in Gcc) {
60        cCompiler.args "-fPIC"
61        cCompiler.args "-Wall"
62        cCompiler.define "ANDROID"
63        cCompiler.define "HAVE_MALLOC_H"
64      }
65      // Optimizations.
66      if (buildType == buildTypes.release) {
67        if (toolChain in Gcc) {
68          cCompiler.args "-finline-functions"
69          cCompiler.args "-ffast-math"
70          cCompiler.args "-ffunction-sections"
71          cCompiler.args "-fdata-sections"
72        }
73        if (toolChain in Clang) {
74          cCompiler.args "-frename-registers -s"
75        }
76      }
77      // mips32 fails to build with clang from r14b
78      // https://bugs.chromium.org/p/webp/issues/detail?id=343
79      if (toolChain in Clang) {
80        if (getTargetPlatform() == "mips") {
81          cCompiler.args "-no-integrated-as"
82        }
83      }
84      // Check for NEON usage.
85      if (getTargetPlatform() == "arm") {
86        NEON = "c.neon"
87        cCompiler.define "HAVE_CPU_FEATURES_H"
88      } else {
89        NEON = "c"
90      }
91
92      cCompiler.args "-I" + file(".").absolutePath
93    }
94    // Link to pthread for shared libraries.
95    withType(SharedLibraryBinarySpec) {
96      if (toolChain in Gcc) {
97        cCompiler.define "HAVE_PTHREAD"
98        cCompiler.define "WEBP_USE_THREAD"
99        linker.args "-pthread"
100      }
101    }
102  }
103  components {
104    webp(NativeLibrarySpec) {
105      sources {
106        c {
107          source {
108            srcDir "sharpyuv"
109            include "sharpyuv.c"
110            include "sharpyuv_cpu.c"
111            include "sharpyuv_csp.c"
112            include "sharpyuv_dsp.c"
113            include "sharpyuv_gamma.c"
114            include "sharpyuv_neon.c"
115            include "sharpyuv_sse2.c"
116            srcDir "src/dec"
117            include "alpha_dec.c"
118            include "buffer_dec.c"
119            include "frame_dec.c"
120            include "idec_dec.c"
121            include "io_dec.c"
122            include "quant_dec.c"
123            include "tree_dec.c"
124            include "vp8_dec.c"
125            include "vp8l_dec.c"
126            include "webp_dec.c"
127            srcDir "src/dsp"
128            include "alpha_processing.c"
129            include "alpha_processing_mips_dsp_r2.c"
130            include "alpha_processing_neon.$NEON"
131            include "alpha_processing_sse2.c"
132            include "alpha_processing_sse41.c"
133            include "cpu.c"
134            include "dec.c"
135            include "dec_clip_tables.c"
136            include "dec_mips32.c"
137            include "dec_mips_dsp_r2.c"
138            include "dec_msa.c"
139            include "dec_neon.$NEON"
140            include "dec_sse2.c"
141            include "dec_sse41.c"
142            include "filters.c"
143            include "filters_mips_dsp_r2.c"
144            include "filters_msa.c"
145            include "filters_neon.$NEON"
146            include "filters_sse2.c"
147            include "lossless.c"
148            include "lossless_mips_dsp_r2.c"
149            include "lossless_msa.c"
150            include "lossless_neon.$NEON"
151            include "lossless_sse2.c"
152            include "lossless_sse41.c"
153            include "rescaler.c"
154            include "rescaler_mips32.c"
155            include "rescaler_mips_dsp_r2.c"
156            include "rescaler_msa.c"
157            include "rescaler_neon.$NEON"
158            include "rescaler_sse2.c"
159            include "upsampling.c"
160            include "upsampling_mips_dsp_r2.c"
161            include "upsampling_msa.c"
162            include "upsampling_neon.$NEON"
163            include "upsampling_sse2.c"
164            include "upsampling_sse41.c"
165            include "yuv.c"
166            include "yuv_mips32.c"
167            include "yuv_mips_dsp_r2.c"
168            include "yuv_neon.$NEON"
169            include "yuv_sse2.c"
170            include "yuv_sse41.c"
171            srcDir "src/utils"
172            include "bit_reader_utils.c"
173            include "color_cache_utils.c"
174            include "filters_utils.c"
175            include "huffman_utils.c"
176            include "palette.c"
177            include "quant_levels_dec_utils.c"
178            include "random_utils.c"
179            include "rescaler_utils.c"
180            include "thread_utils.c"
181            include "utils.c"
182            srcDir "src/dsp"
183            include "cost.c"
184            include "cost_mips32.c"
185            include "cost_mips_dsp_r2.c"
186            include "cost_neon.$NEON"
187            include "cost_sse2.c"
188            include "enc.c"
189            include "enc_mips32.c"
190            include "enc_mips_dsp_r2.c"
191            include "enc_msa.c"
192            include "enc_neon.$NEON"
193            include "enc_sse2.c"
194            include "enc_sse41.c"
195            include "lossless_enc.c"
196            include "lossless_enc_mips32.c"
197            include "lossless_enc_mips_dsp_r2.c"
198            include "lossless_enc_msa.c"
199            include "lossless_enc_neon.$NEON"
200            include "lossless_enc_sse2.c"
201            include "lossless_enc_sse41.c"
202            include "ssim.c"
203            include "ssim_sse2.c"
204            srcDir "src/enc"
205            include "alpha_enc.c"
206            include "analysis_enc.c"
207            include "backward_references_cost_enc.c"
208            include "backward_references_enc.c"
209            include "config_enc.c"
210            include "cost_enc.c"
211            include "filter_enc.c"
212            include "frame_enc.c"
213            include "histogram_enc.c"
214            include "iterator_enc.c"
215            include "near_lossless_enc.c"
216            include "picture_enc.c"
217            include "picture_csp_enc.c"
218            include "picture_psnr_enc.c"
219            include "picture_rescale_enc.c"
220            include "picture_tools_enc.c"
221            include "predictor_enc.c"
222            include "quant_enc.c"
223            include "syntax_enc.c"
224            include "token_enc.c"
225            include "tree_enc.c"
226            include "vp8l_enc.c"
227            include "webp_enc.c"
228            srcDir "src/utils"
229            include "bit_writer_utils.c"
230            include "huffman_encode_utils.c"
231            include "quant_levels_utils.c"
232          }
233          exportedHeaders {
234            srcDir "src"
235          }
236        }
237      }
238    }
239
240    webpdemux(NativeLibrarySpec) {
241      sources {
242        c {
243          source {
244            srcDir "src/demux"
245            include "anim_decode.c"
246            include "demux.c"
247          }
248        }
249      }
250    }
251
252    webpmux(NativeLibrarySpec) {
253      sources {
254        c {
255          source {
256            srcDir "src/mux/"
257            include "anim_encode.c"
258            include "muxedit.c"
259            include "muxinternal.c"
260            include "muxread.c"
261          }
262        }
263      }
264    }
265
266    // Executables from examples.
267    example_util(NativeLibrarySpec) {
268      binaries {
269        all {
270          lib library: "webp", linkage: "static"
271        }
272      }
273      sources {
274        c {
275          source {
276            srcDir "./examples"
277            include "example_util.c"
278          }
279        }
280      }
281    }
282
283    imageio_util(NativeLibrarySpec) {
284      binaries {
285        all {
286          lib library: "webp", linkage: "static"
287        }
288      }
289      sources {
290        c {
291          source {
292            srcDir "./imageio"
293            include "imageio_util.c"
294          }
295        }
296      }
297    }
298
299    imagedec(NativeLibrarySpec) {
300      binaries {
301        all {
302          lib library: "webpdemux", linkage: "static"
303          lib library: "webp", linkage: "static"
304        }
305      }
306      sources {
307        c {
308          source {
309            srcDir "./imageio"
310            include "image_dec.c"
311            include "jpegdec.c"
312            include "metadata.c"
313            include "pngdec.c"
314            include "pnmdec.c"
315            include "tiffdec.c"
316            include "webpdec.c"
317          }
318        }
319      }
320    }
321
322    imageenc(NativeLibrarySpec) {
323      binaries {
324        all {
325          lib library: "webp", linkage: "static"
326          lib library: "imageio_util", linkage: "static"
327        }
328      }
329      sources {
330        c {
331          source {
332            srcDir "./imageio"
333            include "image_enc.c"
334          }
335        }
336      }
337    }
338
339    cwebp(NativeExecutableSpec) {
340      binaries {
341        all {
342          lib library: "example_util", linkage: "static"
343          lib library: "imagedec", linkage: "static"
344          lib library: "imageio_util", linkage: "static"
345          lib library: "webpdemux", linkage: "static"
346          lib library: "webp", linkage: "static"
347        }
348      }
349      sources {
350        c {
351          source {
352            srcDir "./examples"
353            include "cwebp.c"
354          }
355        }
356      }
357    }
358
359    dwebp(NativeExecutableSpec) {
360      binaries {
361        all {
362          lib library: "example_util", linkage: "static"
363          lib library: "imagedec", linkage: "static"
364          lib library: "imageenc", linkage: "static"
365          lib library: "imageio_util", linkage: "static"
366          lib library: "webpdemux", linkage: "static"
367          lib library: "webp"
368        }
369      }
370      sources {
371        c {
372          source {
373              srcDir "./examples"
374              include "dwebp.c"
375          }
376        }
377      }
378    }
379
380    webpmux_example(NativeExecutableSpec) {
381      binaries {
382        all {
383          lib library: "example_util", linkage: "static"
384          lib library: "imageio_util", linkage: "static"
385          lib library: "webpmux", linkage: "static"
386          lib library: "webp"
387        }
388      }
389      sources {
390        c {
391          source {
392            srcDir "./examples"
393            include "webpmux.c"
394          }
395        }
396      }
397    }
398
399    img2webp_example(NativeExecutableSpec) {
400      binaries {
401        all {
402          lib library: "example_util", linkage: "static"
403          lib library: "imagedec", linkage: "static"
404          lib library: "imageio_util", linkage: "static"
405          lib library: "webpmux", linkage: "static"
406          lib library: "webpdemux", linkage: "static"
407          lib library: "webp"
408        }
409      }
410      sources {
411        c {
412          source {
413            srcDir "./examples"
414            include "img2webp.c"
415          }
416        }
417      }
418    }
419
420    webpinfo_example(NativeExecutableSpec) {
421      binaries {
422        all {
423          lib library: "example_util", linkage: "static"
424          lib library: "imageio_util", linkage: "static"
425          lib library: "webp"
426        }
427      }
428      sources {
429        c {
430          source {
431            srcDir "./examples"
432            include "webpinfo.c"
433          }
434        }
435      }
436    }
437  }
438  tasks {
439    // Task to test all possible configurations.
440    buildAllExecutables(Task) {
441      dependsOn $.binaries.findAll { it.buildable }
442    }
443  }
444}
445