/* * 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 }