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