116 lines
4.1 KiB
Groovy
116 lines
4.1 KiB
Groovy
/*
|
|
* Copyright 2016-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
|
|
*/
|
|
|
|
apply plugin: 'kotlin-multiplatform'
|
|
apply from: rootProject.file("gradle/targets.gradle")
|
|
apply from: rootProject.file("gradle/compile-jvm-multiplatform.gradle")
|
|
apply from: rootProject.file("gradle/compile-common.gradle")
|
|
apply from: rootProject.file("gradle/compile-js-multiplatform.gradle")
|
|
apply from: rootProject.file("gradle/compile-native-multiplatform.gradle")
|
|
apply from: rootProject.file('gradle/publish-npm-js.gradle')
|
|
|
|
/*
|
|
* All platform plugins and configuration magic happens here instead of build.gradle
|
|
* because JMV-only projects depend on core, thus core should always be initialized before configuration.
|
|
*/
|
|
kotlin {
|
|
configure(sourceSets) {
|
|
def srcDir = name.endsWith('Main') ? 'src' : 'test'
|
|
def platform = name[0..-5]
|
|
kotlin.srcDir "$platform/$srcDir"
|
|
if (name == "jvmMain") {
|
|
resources.srcDirs = ["$platform/resources"]
|
|
} else if (name == "jvmTest") {
|
|
resources.srcDirs = ["$platform/test-resources"]
|
|
}
|
|
languageSettings {
|
|
progressiveMode = true
|
|
experimentalAnnotations.each { useExperimentalAnnotation(it) }
|
|
}
|
|
}
|
|
|
|
configure(targets) {
|
|
def targetName = it.name
|
|
compilations.all { compilation ->
|
|
def compileTask = tasks.getByName(compilation.compileKotlinTaskName)
|
|
// binary compatibility support
|
|
if (targetName.contains("jvm") && compilation.compilationName == "main") {
|
|
compileTask.kotlinOptions.freeCompilerArgs += ["-Xdump-declarations-to=${buildDir}/visibilities.json"]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
configurations {
|
|
configureKotlinJvmPlatform(kotlinCompilerPluginClasspath)
|
|
}
|
|
|
|
kotlin.sourceSets {
|
|
jvmTest.dependencies {
|
|
api "com.devexperts.lincheck:lincheck:$lincheck_version"
|
|
api "com.esotericsoftware:kryo:4.0.0"
|
|
implementation project (":android-unit-tests")
|
|
}
|
|
}
|
|
|
|
task checkJdk16() {
|
|
// only fail w/o JDK_16 when actually trying to compile, not during project setup phase
|
|
doLast {
|
|
if (!System.env.JDK_16) {
|
|
throw new GradleException("JDK_16 environment variable is not defined. " +
|
|
"Can't build against JDK 1.6 runtime and run JDK 1.6 compatibility tests. " +
|
|
"Please ensure JDK 1.6 is installed and that JDK_16 points to it.")
|
|
}
|
|
}
|
|
}
|
|
|
|
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {
|
|
kotlinOptions.jdkHome = System.env.JDK_16
|
|
// only fail when actually trying to compile, not during project setup phase
|
|
dependsOn(checkJdk16)
|
|
}
|
|
|
|
jvmTest {
|
|
minHeapSize = '1g'
|
|
maxHeapSize = '1g'
|
|
enableAssertions = true
|
|
systemProperty 'java.security.manager', 'kotlinx.coroutines.TestSecurityManager'
|
|
exclude '**/*LFStressTest.*'
|
|
systemProperty 'kotlinx.coroutines.scheduler.keep.alive.sec', '100000' // any unpark problem hangs test
|
|
}
|
|
|
|
task lockFreedomTest(type: Test, dependsOn: compileTestKotlinJvm) {
|
|
classpath = files { jvmTest.classpath }
|
|
testClassesDirs = files { jvmTest.testClassesDirs }
|
|
include '**/*LFStressTest.*'
|
|
enableAssertions = true
|
|
testLogging.showStandardStreams = true
|
|
}
|
|
|
|
task jdk16Test(type: Test, dependsOn: [compileTestKotlinJvm, checkJdk16]) {
|
|
classpath = files { jvmTest.classpath }
|
|
testClassesDirs = files { jvmTest.testClassesDirs }
|
|
executable = "$System.env.JDK_16/bin/java"
|
|
exclude '**/*LFStressTest.*' // lock-freedom tests use LockFreedomTestEnvironment which needs JDK8
|
|
exclude '**/*LCStressTest.*' // lic-check tests use LinChecker which needs JDK8
|
|
exclude '**/exceptions/**' // exceptions tests check suppressed exception which needs JDK8
|
|
exclude '**/ExceptionsGuideTest.*'
|
|
}
|
|
|
|
// Run these tests only during nightly stress test
|
|
jdk16Test.onlyIf { project.properties['stressTest'] != null }
|
|
|
|
// Always run those tests
|
|
task moreTest(dependsOn: [lockFreedomTest, jdk16Test])
|
|
build.dependsOn moreTest
|
|
|
|
task testsJar(type: Jar, dependsOn: jvmTestClasses) {
|
|
classifier = 'tests'
|
|
from compileTestKotlinJvm.destinationDir
|
|
}
|
|
|
|
artifacts {
|
|
archives testsJar
|
|
}
|