apply plugin: 'application'

description = "grpc Benchmarks"

startScripts.enabled = false
run.enabled = false

buildscript {
    repositories {
        mavenCentral()
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath libraries.protobuf_plugin
        classpath "me.champeau.gradle:jmh-gradle-plugin:0.2.0"
    }
}
apply plugin: 'me.champeau.gradle.jmh'

jmh {
    jmhVersion = '1.7.1'
    warmupIterations = 10
    iterations = 10
    fork = 1
    jvmArgs = "-server -Xms768m -Xmx768m -dsa -da -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+UseFastAccessorMethods -XX:+OptimizeStringConcat"
}

configurations {
    alpnboot
}

dependencies {
    List deps = [project(':grpc-core'),
                 project(':grpc-netty'),
                 project(':grpc-okhttp'),
                 project(':grpc-stub'),
                 project(':grpc-integration-testing'),
                 libraries.junit,
                 libraries.mockito,
                 libraries.hdrhistogram]
    if (osdetector.os == "linux") {
        // These are only available on linux.
        deps += [libraries.netty_tcnative, libraries.netty_transport_native_epoll]
    }

    compile deps

    alpnboot alpnboot_package_name
}

configureProtoCompilation()

task qps_client(type: CreateStartScripts) {
    mainClassName = "io.grpc.benchmarks.qps.AsyncClient"
    applicationName = "qps_client"
    defaultJvmOpts = ["-Xbootclasspath/p:" + configurations.alpnboot.asPath]
    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 = ["-Xbootclasspath/p:" + configurations.alpnboot.asPath]
    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"
    defaultJvmOpts = ["-Xbootclasspath/p:" + configurations.alpnboot.asPath]
    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)
    fileMode = 0755
}

// Allow intellij projects to refer to generated-sources
idea {
    module {
        // The whole build dir is excluded by default, but we need build/generated-sources,
        // which contains the generated proto classes.
        excludeDirs = [file('.gradle')]
        if (buildDir.exists()) {
            excludeDirs += files(buildDir.listFiles())
            excludeDirs -= file("$buildDir/generated-sources")
        }
    }
}

