buildscript {
    repositories {
        maven {
            // The google mirror is less flaky than mavenCentral()
            url "https://maven-central.storage-download.googleapis.com/repos/central/data/"
        }
    }
    dependencies {
        classpath libraries.protobuf_plugin
    }
}

apply plugin: 'application'

description = "grpc Benchmarks"

startScripts.enabled = false
run.enabled = false

jmh {
    jvmArgs = "-server -Xms2g -Xmx2g"
    // Workaround
    // https://github.com/melix/jmh-gradle-plugin/issues/97#issuecomment-316664026
    includeTests = true
}

dependencies {
    compile project(':grpc-core'),
            project(':grpc-netty'),
            project(':grpc-okhttp'),
            project(':grpc-stub'),
            project(':grpc-protobuf'),
            project(':grpc-testing'),
            libraries.junit,
            libraries.mockito,
            libraries.hdrhistogram,
            libraries.netty_tcnative,
            libraries.netty_epoll,
            libraries.math
}

compileJava {
  // The Control.Void protobuf clashes
  options.compilerArgs += ["-Xep:JavaLangClash:OFF"]
}

configureProtoCompilation()

def vmArgs = [
        "-server",
        "-Xms2g",
        "-Xmx2g",
        "-XX:+PrintGCDetails"
]

task qps_client(type: CreateStartScripts) {
    mainClassName = "io.grpc.benchmarks.qps.AsyncClient"
    applicationName = "qps_client"
    defaultJvmOpts = ["-javaagent:" + configurations.alpnagent.asPath] + vmArgs
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task openloop_client(type: CreateStartScripts) {
    mainClassName = "io.grpc.benchmarks.qps.OpenLoopClient"
    applicationName = "openloop_client"
    defaultJvmOpts = ["-javaagent:" + configurations.alpnagent.asPath] + vmArgs
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task qps_server(type: CreateStartScripts) {
    mainClassName = "io.grpc.benchmarks.qps.AsyncServer"
    applicationName = "qps_server"
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task benchmark_worker(type: CreateStartScripts) {
    mainClassName = "io.grpc.benchmarks.driver.LoadWorker"
    applicationName = "benchmark_worker"
    defaultJvmOpts = ["-javaagent:" + configurations.alpnagent.asPath] + vmArgs
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

applicationDistribution.into("bin") {
    from(qps_client)
    from(openloop_client)
    from(qps_server)
    from(benchmark_worker)
    fileMode = 0755
}
