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
    compileOnly libraries.javax_annotation
}

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
    ].plus(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
    ].plus(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
    ].plus(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
}
