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