repositories {
    google()
    jcenter()
}

buildscript {
    repositories {
        google()
        // TODO: jcenter will soon go away. Find a replacement: https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:4.2.0'
    }
}

apply plugin: 'com.android.library'

def cmakeListDir = "${rootDir}/../../.."
def hostBuildDir = "${cmakeListDir}/../iree-build-host"
def hostInstallDir = "${hostBuildDir}/install"

android {
    compileSdkVersion 29
    defaultConfig {
        minSdkVersion 28
        targetSdkVersion 29

        externalNativeBuild {
            cmake {
                arguments "-DIREE_BUILD_BINDINGS_TFLITE=ON",
                        "-DIREE_BUILD_BINDINGS_TFLITE_JAVA=ON",
                        "-DIREE_HAL_DRIVER_DEFAULTS=OFF",
                        "-DIREE_HAL_DRIVER_VMVX=ON",

                        // Disable all but the runtime components needed for the
                        // java bindings.
                        "-DIREE_BUILD_COMPILER=OFF",
                        "-DIREE_BUILD_TESTS=OFF",
                        "-DIREE_BUILD_SAMPLES=OFF",
                        "-DIREE_BUILD_PYTHON_BINDINGS=OFF",
                        "-DIREE_HOST_BINARY_ROOT=${hostInstallDir}"

                targets "iree-tflite-bindings"
            }
        }
    }

    sourceSets {
        main {
            manifest.srcFile 'org/tensorflow/lite/AndroidManifest.xml'
            java {
                srcDirs('org/tensorflow/lite')
                exclude('tests/**') // Don't build tests into the library
            }
            jni.srcDirs = ['org/tensorflow/lite/native']
            jniLibs.srcDirs = ['jniLibs/']
        }
    }

    externalNativeBuild {
        cmake {
            version "3.13.4.0+"
            path "../../../CMakeLists.txt"
        }
    }
}

dependencies {
    implementation 'com.android.support:support-annotations:22.2.0'
}

// Task to cmake configure the host
task cmakeConfigureHost(type: Exec) {
    doFirst {
        println "Configuring host tools with cmake..."
    }
    workingDir cmakeListDir
    commandLine "cmake",
            "-G" , "Ninja",
            "-B", hostBuildDir ,
            "-DIREE_HAL_DRIVER_DEFAULTS=OFF",
            "-DIREE_HAL_DRIVER_VMVX=ON",
            "-DIREE_BUILD_COMPILER=OFF",
            "-DIREE_BUILD_TESTS=OFF ",
            "-DIREE_BUILD_SAMPLES=OFF",
            "-DCMAKE_INSTALL_PREFIX=${hostInstallDir}",
            "."
}

// Task to cmake build the host
task cmakeBuildHost(type: Exec) {
    doFirst {
        println "Building host tools with cmake..."
    }
    workingDir cmakeListDir
    commandLine "cmake", "--build", hostBuildDir, "--target", "install"
}

// Build host tools before building the app
preBuild.dependsOn cmakeBuildHost
cmakeBuildHost.dependsOn cmakeConfigureHost
