// Define dependencies.
buildscript {
  repositories {
    maven {
      url "https://jcenter.bintray.com"
    }
  }
  dependencies {
    classpath "com.android.tools.build:gradle:${ANDROID_GRADLE_PLUGIN_VERSION}"
  }
}

// Define versions in the project.
project.ext {
  buildToolsVersion = "${BUILD_TOOLS_VERSION}"
  compileSdkVersion = COMPILE_SDK_VERSION.toInteger()
}

// Core libraries and executables.
apply plugin: "c"
def NEON
model {
  buildTypes {
    debug
    release
  }
  platforms {
    arm {
      architecture "arm"
    }
    arm64 {
      architecture "arm64"
    }
    x86 {
      architecture "x86"
    }
    x64 {
      architecture "x86_64"
    }
    mips32r2
    mips32r5
    mips64r6
  }
  toolChains {
    gcc(Gcc) {
      target("mips32r2") {
        cCompiler.args "-mips32r2"
      }
      target("mips32r5") {
        cCompiler.args "-mips32r5"
      }
      target("mips64r6") {
        cCompiler.args "-mips64r6"
      }
    }
  }
  binaries {
    all {
      if (toolChain in Gcc) {
        cCompiler.args "-fPIC"
        cCompiler.args "-Wall"
        cCompiler.define "ANDROID"
        cCompiler.define "HAVE_MALLOC_H"
      }
      // Optimizations.
      if (buildType == buildTypes.release) {
        if (toolChain in Gcc) {
          cCompiler.args "-finline-functions"
          cCompiler.args "-ffast-math"
          cCompiler.args "-ffunction-sections"
          cCompiler.args "-fdata-sections"
        }
        if (toolChain in Clang) {
          cCompiler.args "-frename-registers -s"
        }
      }
      // mips32 fails to build with clang from r14b
      // https://bugs.chromium.org/p/webp/issues/detail?id=343
      if (toolChain in Clang) {
        if (getTargetPlatform() == "mips") {
          cCompiler.args "-no-integrated-as"
        }
      }
      // Check for NEON usage.
      if (getTargetPlatform() == "arm") {
        NEON = "c.neon"
        cCompiler.define "HAVE_CPU_FEATURES_H"
      } else {
        NEON = "c"
      }

      cCompiler.args "-I" + file(".").absolutePath
    }
    // Link to pthread for shared libraries.
    withType(SharedLibraryBinarySpec) {
      if (toolChain in Gcc) {
        cCompiler.define "HAVE_PTHREAD"
        cCompiler.define "WEBP_USE_THREAD"
        linker.args "-pthread"
      }
    }
  }
  components {
    webp(NativeLibrarySpec) {
      sources {
        c {
          source {
            srcDir "src/dec"
            include "alpha_dec.c"
            include "buffer_dec.c"
            include "frame_dec.c"
            include "idec_dec.c"
            include "io_dec.c"
            include "quant_dec.c"
            include "tree_dec.c"
            include "vp8_dec.c"
            include "vp8l_dec.c"
            include "webp_dec.c"
            srcDir "src/dsp"
            include "alpha_processing.c"
            include "alpha_processing_mips_dsp_r2.c"
            include "alpha_processing_neon.$NEON"
            include "alpha_processing_sse2.c"
            include "alpha_processing_sse41.c"
            include "cpu.c"
            include "dec.c"
            include "dec_clip_tables.c"
            include "dec_mips32.c"
            include "dec_mips_dsp_r2.c"
            include "dec_msa.c"
            include "dec_neon.$NEON"
            include "dec_sse2.c"
            include "dec_sse41.c"
            include "filters.c"
            include "filters_mips_dsp_r2.c"
            include "filters_msa.c"
            include "filters_neon.$NEON"
            include "filters_sse2.c"
            include "lossless.c"
            include "lossless_mips_dsp_r2.c"
            include "lossless_msa.c"
            include "lossless_neon.$NEON"
            include "lossless_sse2.c"
            include "rescaler.c"
            include "rescaler_mips32.c"
            include "rescaler_mips_dsp_r2.c"
            include "rescaler_msa.c"
            include "rescaler_neon.$NEON"
            include "rescaler_sse2.c"
            include "upsampling.c"
            include "upsampling_mips_dsp_r2.c"
            include "upsampling_msa.c"
            include "upsampling_neon.$NEON"
            include "upsampling_sse2.c"
            include "upsampling_sse41.c"
            include "yuv.c"
            include "yuv_mips32.c"
            include "yuv_mips_dsp_r2.c"
            include "yuv_neon.$NEON"
            include "yuv_sse2.c"
            include "yuv_sse41.c"
            srcDir "src/utils"
            include "bit_reader_utils.c"
            include "color_cache_utils.c"
            include "filters_utils.c"
            include "huffman_utils.c"
            include "quant_levels_dec_utils.c"
            include "random_utils.c"
            include "rescaler_utils.c"
            include "thread_utils.c"
            include "utils.c"
            srcDir "src/dsp"
            include "cost.c"
            include "cost_mips32.c"
            include "cost_mips_dsp_r2.c"
            include "cost_sse2.c"
            include "enc.c"
            include "enc_avx2.c"
            include "enc_mips32.c"
            include "enc_mips_dsp_r2.c"
            include "enc_msa.c"
            include "enc_neon.$NEON"
            include "enc_sse2.c"
            include "enc_sse41.c"
            include "lossless_enc.c"
            include "lossless_enc_mips32.c"
            include "lossless_enc_mips_dsp_r2.c"
            include "lossless_enc_msa.c"
            include "lossless_enc_neon.$NEON"
            include "lossless_enc_sse2.c"
            include "lossless_enc_sse41.c"
            include "ssim.c"
            include "ssim_sse2.c"
            srcDir "src/enc"
            include "alpha_enc.c"
            include "analysis_enc.c"
            include "backward_references_cost_enc.c"
            include "backward_references_enc.c"
            include "config_enc.c"
            include "cost_enc.c"
            include "filter_enc.c"
            include "frame_enc.c"
            include "histogram_enc.c"
            include "iterator_enc.c"
            include "near_lossless_enc.c"
            include "picture_enc.c"
            include "picture_csp_enc.c"
            include "picture_psnr_enc.c"
            include "picture_rescale_enc.c"
            include "picture_tools_enc.c"
            include "predictor_enc.c"
            include "quant_enc.c"
            include "syntax_enc.c"
            include "token_enc.c"
            include "tree_enc.c"
            include "vp8l_enc.c"
            include "webp_enc.c"
            srcDir "src/utils"
            include "bit_writer_utils.c"
            include "huffman_encode_utils.c"
            include "quant_levels_utils.c"
          }
          exportedHeaders {
            srcDir "src"
          }
        }
      }
    }

    webpdemux(NativeLibrarySpec) {
      sources {
        c {
          source {
            srcDir "src/demux"
            include "anim_decode.c"
            include "demux.c"
          }
        }
      }
    }

    webpmux(NativeLibrarySpec) {
      sources {
        c {
          source {
            srcDir "src/mux/"
            include "anim_encode.c"
            include "muxedit.c"
            include "muxinternal.c"
            include "muxread.c"
          }
        }
      }
    }

    // Executables from examples.
    example_util(NativeLibrarySpec) {
      binaries {
        all {
          lib library: "webp", linkage: "static"
        }
      }
      sources {
        c {
          source {
            srcDir "./examples"
            include "example_util.c"
          }
        }
      }
    }

    imageio_util(NativeLibrarySpec) {
      binaries {
        all {
          lib library: "webp", linkage: "static"
        }
      }
      sources {
        c {
          source {
            srcDir "./imageio"
            include "imageio_util.c"
          }
        }
      }
    }

    imagedec(NativeLibrarySpec) {
      binaries {
        all {
          lib library: "webpdemux", linkage: "static"
          lib library: "webp", linkage: "static"
        }
      }
      sources {
        c {
          source {
            srcDir "./imageio"
            include "image_dec.c"
            include "jpegdec.c"
            include "metadata.c"
            include "pngdec.c"
            include "pnmdec.c"
            include "tiffdec.c"
            include "webpdec.c"
          }
        }
      }
    }

    imageenc(NativeLibrarySpec) {
      binaries {
        all {
          lib library: "webp", linkage: "static"
          lib library: "imageio_util", linkage: "static"
        }
      }
      sources {
        c {
          source {
            srcDir "./imageio"
            include "image_enc.c"
          }
        }
      }
    }

    cwebp(NativeExecutableSpec) {
      binaries {
        all {
          lib library: "example_util", linkage: "static"
          lib library: "imagedec", linkage: "static"
          lib library: "imageio_util", linkage: "static"
          lib library: "webpdemux", linkage: "static"
          lib library: "webp", linkage: "static"
        }
      }
      sources {
        c {
          source {
            srcDir "./examples"
            include "cwebp.c"
          }
        }
      }
    }

    dwebp(NativeExecutableSpec) {
      binaries {
        all {
          lib library: "example_util", linkage: "static"
          lib library: "imagedec", linkage: "static"
          lib library: "imageenc", linkage: "static"
          lib library: "imageio_util", linkage: "static"
          lib library: "webpdemux", linkage: "static"
          lib library: "webp"
        }
      }
      sources {
        c {
          source {
              srcDir "./examples"
              include "dwebp.c"
          }
        }
      }
    }

    webpmux_example(NativeExecutableSpec) {
      binaries {
        all {
          lib library: "example_util", linkage: "static"
          lib library: "imageio_util", linkage: "static"
          lib library: "webpmux", linkage: "static"
          lib library: "webp"
        }
      }
      sources {
        c {
          source {
            srcDir "./examples"
            include "webpmux.c"
          }
        }
      }
    }

    img2webp_example(NativeExecutableSpec) {
      binaries {
        all {
          lib library: "example_util", linkage: "static"
          lib library: "imagedec", linkage: "static"
          lib library: "imageio_util", linkage: "static"
          lib library: "webpmux", linkage: "static"
          lib library: "webpdemux", linkage: "static"
          lib library: "webp"
        }
      }
      sources {
        c {
          source {
            srcDir "./examples"
            include "img2webp.c"
          }
        }
      }
    }

    webpinfo_example(NativeExecutableSpec) {
      binaries {
        all {
          lib library: "example_util", linkage: "static"
          lib library: "imageio_util", linkage: "static"
          lib library: "webp"
        }
      }
      sources {
        c {
          source {
            srcDir "./examples"
            include "webpinfo.c"
          }
        }
      }
    }
  }
  tasks {
    // Task to test all possible configurations.
    buildAllExecutables(Task) {
      dependsOn $.binaries.findAll { it.buildable }
    }
  }
}

// Task to generate the wrapper.
task wrapper(type: Wrapper) {
  gradleVersion = '2.13'
}
