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