Files
kotlin-fork/libraries/tools/gradle/regression-benchmarks/build.gradle.kts
T
Yahor Berdnikau 10a1d2ca1d Pass current Kotlin version to benchmark script
Allows using different current Kotlin versions in benchmark.
For example, SNAPSHOT version when current branch is master and
dev version on CI build.

^KT-49921 In Progress
2021-12-23 10:00:23 +01:00

79 lines
2.4 KiB
Kotlin

plugins {
`java-base`
}
val compilerClasspath = configurations.create("compilerClasspath") {
isCanBeResolved = true
isCanBeConsumed = false
}
val scriptsClasspath = configurations.create("scriptsClasspath") {
isCanBeResolved = true
isCanBeConsumed = false
}
dependencies {
compilerClasspath.name(project(":kotlin-compiler-embeddable"))
compilerClasspath.name(project(":kotlin-scripting-compiler-embeddable"))
scriptsClasspath.name(project(":gradle:regression-benchmark-templates"))
scriptsClasspath.name(project(":kotlin-script-runtime"))
scriptsClasspath.name(kotlinStdlib())
}
val service = project.extensions.getByType<JavaToolchainService>()
abstract class ScriptArgumentProvider @Inject constructor(
layout: ProjectLayout,
private val releaseKotlinVersion: String
) : CommandLineArgumentProvider {
@get:Classpath
abstract val scriptClasspath: ConfigurableFileCollection
@get:Input
abstract val script: Property<String>
@get:OutputDirectory
val scriptOutputDirectories: Provider<Directory> = layout.buildDirectory.dir("benchmark-script")
override fun asArguments(): Iterable<String> {
return listOf(
"-no-reflect",
"-no-stdlib",
"-classpath", scriptClasspath.asFileTree.files.joinToString(separator = File.pathSeparator),
"-script", "benchmarkScripts/${script.get()}",
scriptOutputDirectories.get().asFile.absolutePath,
releaseKotlinVersion
)
}
}
fun addBenchmarkTask(
taskName: String,
script: String,
jdkVersion: JavaLanguageVersion = JavaLanguageVersion.of(8)
): TaskProvider<JavaExec> {
return tasks.register<JavaExec>(taskName) {
group = "Gradle Regression Benchmark"
description = "Runs regression benchmark from $script"
dependsOn(":kotlin-gradle-plugin:install")
javaLauncher.set(service.launcherFor {
languageVersion.set(jdkVersion)
})
classpath = compilerClasspath
mainClass.set("org.jetbrains.kotlin.cli.jvm.K2JVMCompiler")
val scriptArgs = objects.newInstance<ScriptArgumentProvider>(version)
scriptArgs.script.set(script)
scriptArgs.scriptClasspath.from(scriptsClasspath)
argumentProviders.add(scriptArgs)
}
}
addBenchmarkTask(
taskName = "benchmarkRegressionDuckduckgo",
script = "duckduckgo.benchmark.kts",
JavaLanguageVersion.of(11)
)