Files
Alexander Shabalin 7702374dbd [K/N][tests] In atomicfu make check task run all backends ^KT-65392
- test task will run JVM and JS backend tests; called by CI
- nativeTest will run Native backend tests; called by CI
- check will run all backends tests; called locally;
2024-02-12 17:52:38 +00:00

207 lines
7.8 KiB
Kotlin

import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsCompilerAttribute
import org.jetbrains.kotlin.gradle.targets.js.d8.D8RootPlugin
import org.jetbrains.kotlin.konan.target.HostManager
description = "Atomicfu Compiler Plugin"
plugins {
kotlin("jvm")
id("jps-compatible")
}
// WARNING: Native target is host-dependent. Re-running the same build on another host OS may bring to a different result.
val nativeTargetName = HostManager.host.name
val antLauncherJar by configurations.creating
val testJsRuntime by configurations.creating {
attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named(KotlinUsages.KOTLIN_RUNTIME))
attribute(KotlinPlatformType.attribute, KotlinPlatformType.js)
}
}
val atomicfuJsClasspath by configurations.creating {
attributes {
attribute(KotlinPlatformType.attribute, KotlinPlatformType.js)
attribute(KotlinJsCompilerAttribute.jsCompilerAttribute, KotlinJsCompilerAttribute.ir)
}
}
val atomicfuJvmClasspath by configurations.creating
val atomicfuNativeKlib by configurations.creating {
attributes {
attribute(KotlinPlatformType.attribute, KotlinPlatformType.native)
// WARNING: Native target is host-dependent. Re-running the same build on another host OS may bring to a different result.
attribute(KotlinNativeTarget.konanTargetAttribute, nativeTargetName)
attribute(Usage.USAGE_ATTRIBUTE, objects.named(KotlinUsages.KOTLIN_API))
attribute(KotlinPlatformType.attribute, KotlinPlatformType.native)
}
}
val atomicfuJsIrRuntimeForTests by configurations.creating {
attributes {
attribute(KotlinPlatformType.attribute, KotlinPlatformType.js)
attribute(KotlinJsCompilerAttribute.jsCompilerAttribute, KotlinJsCompilerAttribute.ir)
attribute(Usage.USAGE_ATTRIBUTE, objects.named(KotlinUsages.KOTLIN_RUNTIME))
}
}
val atomicfuCompilerPluginForTests by configurations.creating
repositories {
mavenCentral()
}
dependencies {
compileOnly(intellijCore())
compileOnly(commonDependency("org.jetbrains.intellij.deps:asm-all"))
compileOnly(project(":compiler:plugin-api"))
compileOnly(project(":compiler:cli-common"))
compileOnly(project(":compiler:frontend"))
compileOnly(project(":compiler:backend"))
compileOnly(project(":compiler:ir.backend.common"))
compileOnly(project(":js:js.frontend"))
compileOnly(project(":js:js.translator"))
compileOnly(project(":compiler:backend.js"))
compileOnly(project(":compiler:backend.jvm"))
compileOnly(project(":compiler:ir.tree"))
compileOnly(kotlinStdlib())
testApi(projectTests(":compiler:tests-common"))
testApi(projectTests(":compiler:test-infrastructure"))
testApi(projectTests(":compiler:test-infrastructure-utils"))
testApi(projectTests(":compiler:tests-compiler-utils"))
testApi(projectTests(":compiler:tests-common-new"))
testImplementation(projectTests(":generators:test-generator"))
testImplementation(projectTests(":js:js.tests"))
testImplementation(libs.junit4)
testApi(kotlinTest())
// Dependencies for Kotlin/Native test infra:
if (!kotlinBuildProperties.isInIdeaSync) {
testImplementation(projectTests(":native:native.tests"))
}
testImplementation(project(":native:kotlin-native-utils"))
testImplementation(commonDependency("org.jetbrains.teamcity:serviceMessages"))
// todo: remove unnecessary dependencies
testImplementation(project(":kotlin-compiler-runner-unshaded"))
testImplementation(commonDependency("commons-lang:commons-lang"))
testImplementation(projectTests(":compiler:tests-common"))
testImplementation(projectTests(":compiler:tests-common-new"))
testImplementation(projectTests(":compiler:test-infrastructure"))
testCompileOnly("org.jetbrains.kotlinx:atomicfu:0.21.0")
testApi(platform(libs.junit.bom))
testImplementation(libs.junit.jupiter.api)
testRuntimeOnly(libs.junit.jupiter.engine)
testRuntimeOnly(kotlinStdlib())
testRuntimeOnly(project(":kotlin-preloader")) // it's required for ant tests
testRuntimeOnly(project(":compiler:backend-common"))
testRuntimeOnly(commonDependency("org.fusesource.jansi", "jansi"))
atomicfuJsClasspath("org.jetbrains.kotlinx:atomicfu-js:0.21.0") { isTransitive = false }
atomicfuJsIrRuntimeForTests(project(":kotlinx-atomicfu-runtime")) { isTransitive = false }
atomicfuJvmClasspath("org.jetbrains.kotlinx:atomicfu:0.21.0") { isTransitive = false }
atomicfuNativeKlib("org.jetbrains.kotlinx:atomicfu:0.21.0") { isTransitive = false }
atomicfuCompilerPluginForTests(project(":kotlin-atomicfu-compiler-plugin"))
// Implicit dependencies on native artifacts to run native tests on CI
implicitDependencies("org.jetbrains.kotlinx:atomicfu-linuxx64:0.21.0") {
attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named(KotlinUsages.KOTLIN_API))
}
}
implicitDependencies("org.jetbrains.kotlinx:atomicfu-macosarm64:0.21.0"){
attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named(KotlinUsages.KOTLIN_API))
}
}
implicitDependencies("org.jetbrains.kotlinx:atomicfu-macosx64:0.21.0"){
attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named(KotlinUsages.KOTLIN_API))
}
}
implicitDependencies("org.jetbrains.kotlinx:atomicfu-mingwx64:0.21.0"){
attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named(KotlinUsages.KOTLIN_API))
}
}
embedded(project(":kotlinx-atomicfu-runtime")) {
attributes {
attribute(KotlinPlatformType.attribute, KotlinPlatformType.js)
attribute(KotlinJsCompilerAttribute.jsCompilerAttribute, KotlinJsCompilerAttribute.ir)
attribute(Usage.USAGE_ATTRIBUTE, objects.named(KotlinUsages.KOTLIN_RUNTIME))
}
isTransitive = false
}
testImplementation("org.jetbrains.kotlinx:atomicfu:0.21.0")
testRuntimeOnly(libs.junit.vintage.engine)
}
optInToExperimentalCompilerApi()
optInToUnsafeDuringIrConstructionAPI()
sourceSets {
"main" { projectDefault() }
"test" { projectDefault() }
}
testsJar()
useD8Plugin()
projectTest(jUnitMode = JUnitMode.JUnit5) {
useJUnitPlatform {
// Exclude all tests with the "atomicfu-native" tag. They should be launched by another test task.
excludeTags("atomicfu-native")
}
useJsIrBoxTests(version = version, buildDir = layout.buildDirectory)
workingDir = rootDir
dependsOn(":dist")
dependsOn(atomicfuJsIrRuntimeForTests)
val localAtomicfuJsIrRuntimeForTests: FileCollection = atomicfuJsIrRuntimeForTests
val localAtomicfuJsClasspath: FileCollection = atomicfuJsClasspath
val localAtomicfuJvmClasspath: FileCollection = atomicfuJvmClasspath
doFirst {
systemProperty("atomicfuJsIrRuntimeForTests.classpath", localAtomicfuJsIrRuntimeForTests.asPath)
systemProperty("atomicfuJs.classpath", localAtomicfuJsClasspath.asPath)
systemProperty("atomicfuJvm.classpath", localAtomicfuJvmClasspath.asPath)
}
}
publish()
standardPublicJars()
val nativeTest = nativeTest(
taskName = "nativeTest",
tag = "atomicfu-native", // Include all tests with the "atomicfu-native" tag.
requirePlatformLibs = true,
customCompilerDependencies = listOf(atomicfuJvmClasspath),
customTestDependencies = listOf(atomicfuNativeKlib),
compilerPluginDependencies = listOf(atomicfuCompilerPluginForTests)
)
tasks.named("check") {
// Depend on the test task that launches Native tests so that it will also run together with tests
// for all other targets if K/N is enabled
if (kotlinBuildProperties.isKotlinNativeEnabled) {
dependsOn(nativeTest)
}
}