1*68017707SAndroid Build Coastguard Worker/* 2*68017707SAndroid Build Coastguard Worker * Copyright 2016-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. 3*68017707SAndroid Build Coastguard Worker */ 4*68017707SAndroid Build Coastguard Worker 5*68017707SAndroid Build Coastguard Workerimport org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile 6*68017707SAndroid Build Coastguard Worker 7*68017707SAndroid Build Coastguard Workerapply plugin: 'kotlin-multiplatform' 8*68017707SAndroid Build Coastguard Workerapply from: rootProject.file("gradle/targets.gradle") 9*68017707SAndroid Build Coastguard Worker 10*68017707SAndroid Build Coastguard Workerext { 11*68017707SAndroid Build Coastguard Worker nativeMainSets = [] 12*68017707SAndroid Build Coastguard Worker nativeTestSets = [] 13*68017707SAndroid Build Coastguard Worker nativeCompilations = [] 14*68017707SAndroid Build Coastguard Worker 15*68017707SAndroid Build Coastguard Worker addNative = { preset -> 16*68017707SAndroid Build Coastguard Worker nativeMainSets.add(preset.compilations['main'].kotlinSourceSets.first()) 17*68017707SAndroid Build Coastguard Worker nativeTestSets.add(preset.compilations['test'].kotlinSourceSets.first()) 18*68017707SAndroid Build Coastguard Worker nativeCompilations.add(preset.compilations['main']) 19*68017707SAndroid Build Coastguard Worker } 20*68017707SAndroid Build Coastguard Worker} 21*68017707SAndroid Build Coastguard Worker 22*68017707SAndroid Build Coastguard Worker 23*68017707SAndroid Build Coastguard Workerkotlin { 24*68017707SAndroid Build Coastguard Worker targets { 25*68017707SAndroid Build Coastguard Worker delegate.metaClass.addTarget = { preset -> 26*68017707SAndroid Build Coastguard Worker addNative(delegate.fromPreset(preset, preset.name)) 27*68017707SAndroid Build Coastguard Worker } 28*68017707SAndroid Build Coastguard Worker } 29*68017707SAndroid Build Coastguard Worker 30*68017707SAndroid Build Coastguard Worker // JS -- always 31*68017707SAndroid Build Coastguard Worker js(IR) { 32*68017707SAndroid Build Coastguard Worker moduleName = "kotlinx-atomicfu" 33*68017707SAndroid Build Coastguard Worker // TODO: commented out because browser tests do not work on TeamCity 34*68017707SAndroid Build Coastguard Worker // browser() 35*68017707SAndroid Build Coastguard Worker nodejs() 36*68017707SAndroid Build Coastguard Worker } 37*68017707SAndroid Build Coastguard Worker 38*68017707SAndroid Build Coastguard Worker // JVM -- always 39*68017707SAndroid Build Coastguard Worker jvm() 40*68017707SAndroid Build Coastguard Worker 41*68017707SAndroid Build Coastguard Worker // Wasm -- always 42*68017707SAndroid Build Coastguard Worker wasmJs { 43*68017707SAndroid Build Coastguard Worker nodejs() 44*68017707SAndroid Build Coastguard Worker } 45*68017707SAndroid Build Coastguard Worker 46*68017707SAndroid Build Coastguard Worker wasmWasi { 47*68017707SAndroid Build Coastguard Worker nodejs() 48*68017707SAndroid Build Coastguard Worker } 49*68017707SAndroid Build Coastguard Worker 50*68017707SAndroid Build Coastguard Worker sourceSets { 51*68017707SAndroid Build Coastguard Worker commonMain { 52*68017707SAndroid Build Coastguard Worker dependencies { 53*68017707SAndroid Build Coastguard Worker implementation 'org.jetbrains.kotlin:kotlin-stdlib-common' 54*68017707SAndroid Build Coastguard Worker } 55*68017707SAndroid Build Coastguard Worker } 56*68017707SAndroid Build Coastguard Worker commonTest { 57*68017707SAndroid Build Coastguard Worker dependencies { 58*68017707SAndroid Build Coastguard Worker implementation 'org.jetbrains.kotlin:kotlin-test-common' 59*68017707SAndroid Build Coastguard Worker implementation 'org.jetbrains.kotlin:kotlin-test-annotations-common' 60*68017707SAndroid Build Coastguard Worker } 61*68017707SAndroid Build Coastguard Worker } 62*68017707SAndroid Build Coastguard Worker 63*68017707SAndroid Build Coastguard Worker jsAndWasmSharedMain { 64*68017707SAndroid Build Coastguard Worker dependsOn(sourceSets.commonMain) 65*68017707SAndroid Build Coastguard Worker } 66*68017707SAndroid Build Coastguard Worker 67*68017707SAndroid Build Coastguard Worker jsMain { 68*68017707SAndroid Build Coastguard Worker dependsOn(sourceSets.jsAndWasmSharedMain) 69*68017707SAndroid Build Coastguard Worker dependencies { 70*68017707SAndroid Build Coastguard Worker implementation 'org.jetbrains.kotlin:kotlin-stdlib-js' 71*68017707SAndroid Build Coastguard Worker } 72*68017707SAndroid Build Coastguard Worker } 73*68017707SAndroid Build Coastguard Worker jsTest { 74*68017707SAndroid Build Coastguard Worker dependencies { 75*68017707SAndroid Build Coastguard Worker implementation 'org.jetbrains.kotlin:kotlin-test-js' 76*68017707SAndroid Build Coastguard Worker } 77*68017707SAndroid Build Coastguard Worker } 78*68017707SAndroid Build Coastguard Worker 79*68017707SAndroid Build Coastguard Worker wasmJsMain { 80*68017707SAndroid Build Coastguard Worker dependsOn(sourceSets.jsAndWasmSharedMain) 81*68017707SAndroid Build Coastguard Worker dependencies { 82*68017707SAndroid Build Coastguard Worker implementation 'org.jetbrains.kotlin:kotlin-stdlib-wasm-js' 83*68017707SAndroid Build Coastguard Worker } 84*68017707SAndroid Build Coastguard Worker } 85*68017707SAndroid Build Coastguard Worker 86*68017707SAndroid Build Coastguard Worker wasmJsTest { 87*68017707SAndroid Build Coastguard Worker dependencies { 88*68017707SAndroid Build Coastguard Worker implementation 'org.jetbrains.kotlin:kotlin-test-wasm-js' 89*68017707SAndroid Build Coastguard Worker } 90*68017707SAndroid Build Coastguard Worker } 91*68017707SAndroid Build Coastguard Worker 92*68017707SAndroid Build Coastguard Worker wasmWasiMain { 93*68017707SAndroid Build Coastguard Worker dependsOn(sourceSets.jsAndWasmSharedMain) 94*68017707SAndroid Build Coastguard Worker dependencies { 95*68017707SAndroid Build Coastguard Worker implementation 'org.jetbrains.kotlin:kotlin-stdlib-wasm-wasi' 96*68017707SAndroid Build Coastguard Worker } 97*68017707SAndroid Build Coastguard Worker } 98*68017707SAndroid Build Coastguard Worker wasmWasiTest { 99*68017707SAndroid Build Coastguard Worker dependencies { 100*68017707SAndroid Build Coastguard Worker implementation 'org.jetbrains.kotlin:kotlin-test-wasm-wasi' 101*68017707SAndroid Build Coastguard Worker } 102*68017707SAndroid Build Coastguard Worker } 103*68017707SAndroid Build Coastguard Worker 104*68017707SAndroid Build Coastguard Worker jvmMain { 105*68017707SAndroid Build Coastguard Worker dependencies { 106*68017707SAndroid Build Coastguard Worker implementation 'org.jetbrains.kotlin:kotlin-stdlib' 107*68017707SAndroid Build Coastguard Worker } 108*68017707SAndroid Build Coastguard Worker } 109*68017707SAndroid Build Coastguard Worker jvmTest { 110*68017707SAndroid Build Coastguard Worker dependencies { 111*68017707SAndroid Build Coastguard Worker implementation 'org.jetbrains.kotlin:kotlin-reflect' 112*68017707SAndroid Build Coastguard Worker implementation 'org.jetbrains.kotlin:kotlin-test' 113*68017707SAndroid Build Coastguard Worker implementation 'org.jetbrains.kotlin:kotlin-test-junit' 114*68017707SAndroid Build Coastguard Worker implementation "junit:junit:$junit_version" 115*68017707SAndroid Build Coastguard Worker } 116*68017707SAndroid Build Coastguard Worker } 117*68017707SAndroid Build Coastguard Worker } 118*68017707SAndroid Build Coastguard Worker} 119*68017707SAndroid Build Coastguard Worker 120*68017707SAndroid Build Coastguard Worker// configure native targets only if they're not disabled 121*68017707SAndroid Build Coastguard Workerif (rootProject.ext.native_targets_enabled) { 122*68017707SAndroid Build Coastguard Worker kotlin { 123*68017707SAndroid Build Coastguard Worker targets { 124*68017707SAndroid Build Coastguard Worker if (project.ext.ideaActive) { 125*68017707SAndroid Build Coastguard Worker addNative(fromPreset(project.ext.ideaPreset, 'native')) 126*68017707SAndroid Build Coastguard Worker } else { 127*68017707SAndroid Build Coastguard Worker // Support of all non-deprecated targets from official tier list: https://kotlinlang.org/docs/native-target-support.html 128*68017707SAndroid Build Coastguard Worker 129*68017707SAndroid Build Coastguard Worker // Tier #1 130*68017707SAndroid Build Coastguard Worker addTarget(presets.linuxX64) 131*68017707SAndroid Build Coastguard Worker addTarget(presets.macosX64) 132*68017707SAndroid Build Coastguard Worker addTarget(presets.macosArm64) 133*68017707SAndroid Build Coastguard Worker addTarget(presets.iosSimulatorArm64) 134*68017707SAndroid Build Coastguard Worker addTarget(presets.iosX64) 135*68017707SAndroid Build Coastguard Worker 136*68017707SAndroid Build Coastguard Worker // Tier #2 137*68017707SAndroid Build Coastguard Worker addTarget(presets.linuxArm64) 138*68017707SAndroid Build Coastguard Worker addTarget(presets.watchosSimulatorArm64) 139*68017707SAndroid Build Coastguard Worker addTarget(presets.watchosX64) 140*68017707SAndroid Build Coastguard Worker addTarget(presets.watchosArm32) 141*68017707SAndroid Build Coastguard Worker addTarget(presets.watchosArm64) 142*68017707SAndroid Build Coastguard Worker addTarget(presets.tvosSimulatorArm64) 143*68017707SAndroid Build Coastguard Worker addTarget(presets.tvosX64) 144*68017707SAndroid Build Coastguard Worker addTarget(presets.tvosArm64) 145*68017707SAndroid Build Coastguard Worker addTarget(presets.iosArm64) 146*68017707SAndroid Build Coastguard Worker 147*68017707SAndroid Build Coastguard Worker 148*68017707SAndroid Build Coastguard Worker // Tier #3 149*68017707SAndroid Build Coastguard Worker addTarget(presets.androidNativeArm32) 150*68017707SAndroid Build Coastguard Worker addTarget(presets.androidNativeArm64) 151*68017707SAndroid Build Coastguard Worker addTarget(presets.androidNativeX86) 152*68017707SAndroid Build Coastguard Worker addTarget(presets.androidNativeX64) 153*68017707SAndroid Build Coastguard Worker addTarget(presets.mingwX64) 154*68017707SAndroid Build Coastguard Worker addTarget(presets.watchosDeviceArm64) 155*68017707SAndroid Build Coastguard Worker } 156*68017707SAndroid Build Coastguard Worker } 157*68017707SAndroid Build Coastguard Worker 158*68017707SAndroid Build Coastguard Worker sourceSets { 159*68017707SAndroid Build Coastguard Worker nativeMain { dependsOn commonMain } 160*68017707SAndroid Build Coastguard Worker 161*68017707SAndroid Build Coastguard Worker nativeTest {} 162*68017707SAndroid Build Coastguard Worker 163*68017707SAndroid Build Coastguard Worker if (!project.ext.ideaActive) { 164*68017707SAndroid Build Coastguard Worker configure(nativeMainSets) { 165*68017707SAndroid Build Coastguard Worker dependsOn nativeMain 166*68017707SAndroid Build Coastguard Worker } 167*68017707SAndroid Build Coastguard Worker 168*68017707SAndroid Build Coastguard Worker configure(nativeTestSets) { 169*68017707SAndroid Build Coastguard Worker dependsOn nativeTest 170*68017707SAndroid Build Coastguard Worker } 171*68017707SAndroid Build Coastguard Worker } 172*68017707SAndroid Build Coastguard Worker } 173*68017707SAndroid Build Coastguard Worker 174*68017707SAndroid Build Coastguard Worker configure(nativeCompilations) { 175*68017707SAndroid Build Coastguard Worker cinterops { 176*68017707SAndroid Build Coastguard Worker interop { 177*68017707SAndroid Build Coastguard Worker defFile 'src/nativeInterop/cinterop/interop.def' 178*68017707SAndroid Build Coastguard Worker } 179*68017707SAndroid Build Coastguard Worker } 180*68017707SAndroid Build Coastguard Worker } 181*68017707SAndroid Build Coastguard Worker } 182*68017707SAndroid Build Coastguard Worker} 183*68017707SAndroid Build Coastguard Worker 184*68017707SAndroid Build Coastguard Workerconfigurations { 185*68017707SAndroid Build Coastguard Worker transformer 186*68017707SAndroid Build Coastguard Worker} 187*68017707SAndroid Build Coastguard Worker 188*68017707SAndroid Build Coastguard Workerapply from: rootProject.file('gradle/compile-options.gradle') 189*68017707SAndroid Build Coastguard Worker 190*68017707SAndroid Build Coastguard Workerext.configureKotlin() 191*68017707SAndroid Build Coastguard Worker 192*68017707SAndroid Build Coastguard Workerdependencies { 193*68017707SAndroid Build Coastguard Worker transformer project(":atomicfu-transformer") 194*68017707SAndroid Build Coastguard Worker} 195*68017707SAndroid Build Coastguard Worker 196*68017707SAndroid Build Coastguard Worker// ==== CONFIGURE JVM ===== 197*68017707SAndroid Build Coastguard Worker 198*68017707SAndroid Build Coastguard Workerdef classesPreAtomicFuDir = file("$buildDir/classes/kotlin/jvm/test") 199*68017707SAndroid Build Coastguard Workerdef classesPostTransformFU = file("$buildDir/classes/kotlin/jvm/postTransformedFU") 200*68017707SAndroid Build Coastguard Workerdef classesPostTransformVH = file("$buildDir/classes/kotlin/jvm/postTransformedVH") 201*68017707SAndroid Build Coastguard Workerdef classesPostTransformBOTH = file("$buildDir/classes/kotlin/jvm/postTransformedBOTH") 202*68017707SAndroid Build Coastguard Worker 203*68017707SAndroid Build Coastguard Workertasks.withType(compileTestKotlinJvm.getClass()) { 204*68017707SAndroid Build Coastguard Worker kotlinOptions { 205*68017707SAndroid Build Coastguard Worker jvmTarget = "1.8" 206*68017707SAndroid Build Coastguard Worker } 207*68017707SAndroid Build Coastguard Worker} 208*68017707SAndroid Build Coastguard Worker 209*68017707SAndroid Build Coastguard Workertask transformFU(type: JavaExec, dependsOn: compileTestKotlinJvm) { 210*68017707SAndroid Build Coastguard Worker main = "kotlinx.atomicfu.transformer.AtomicFUTransformerKt" 211*68017707SAndroid Build Coastguard Worker args = [classesPreAtomicFuDir, classesPostTransformFU, "FU"] 212*68017707SAndroid Build Coastguard Worker classpath = configurations.transformer 213*68017707SAndroid Build Coastguard Worker inputs.dir(classesPreAtomicFuDir) 214*68017707SAndroid Build Coastguard Worker outputs.dir(classesPostTransformFU) 215*68017707SAndroid Build Coastguard Worker} 216*68017707SAndroid Build Coastguard Worker 217*68017707SAndroid Build Coastguard Workertask transformBOTH(type: JavaExec, dependsOn: compileTestKotlinJvm) { 218*68017707SAndroid Build Coastguard Worker main = "kotlinx.atomicfu.transformer.AtomicFUTransformerKt" 219*68017707SAndroid Build Coastguard Worker args = [classesPreAtomicFuDir, classesPostTransformBOTH, "BOTH"] 220*68017707SAndroid Build Coastguard Worker classpath = configurations.transformer 221*68017707SAndroid Build Coastguard Worker inputs.dir(classesPreAtomicFuDir) 222*68017707SAndroid Build Coastguard Worker outputs.dir(classesPostTransformBOTH) 223*68017707SAndroid Build Coastguard Worker} 224*68017707SAndroid Build Coastguard Worker 225*68017707SAndroid Build Coastguard Workertask transformVH(type: JavaExec, dependsOn: compileTestKotlinJvm) { 226*68017707SAndroid Build Coastguard Worker main = "kotlinx.atomicfu.transformer.AtomicFUTransformerKt" 227*68017707SAndroid Build Coastguard Worker args = [classesPreAtomicFuDir, classesPostTransformVH, "VH"] 228*68017707SAndroid Build Coastguard Worker classpath = configurations.transformer 229*68017707SAndroid Build Coastguard Worker inputs.dir(classesPreAtomicFuDir) 230*68017707SAndroid Build Coastguard Worker outputs.dir(classesPostTransformVH) 231*68017707SAndroid Build Coastguard Worker} 232*68017707SAndroid Build Coastguard Worker 233*68017707SAndroid Build Coastguard Workertask transformedTestFU_current(type: Test, dependsOn: transformFU) { 234*68017707SAndroid Build Coastguard Worker classpath = files(configurations.jvmTestRuntimeClasspath, classesPostTransformFU) 235*68017707SAndroid Build Coastguard Worker testClassesDirs = project.files(classesPostTransformFU) 236*68017707SAndroid Build Coastguard Worker exclude '**/*LFTest.*', '**/TraceToStringTest.*', '**/AtomicfuReferenceJsTest.*' 237*68017707SAndroid Build Coastguard Worker filter { setFailOnNoMatchingTests(false) } 238*68017707SAndroid Build Coastguard Worker} 239*68017707SAndroid Build Coastguard Worker 240*68017707SAndroid Build Coastguard Workertask transformedTestBOTH_current(type: Test, dependsOn: transformBOTH) { 241*68017707SAndroid Build Coastguard Worker classpath = files(configurations.jvmTestRuntimeClasspath, classesPostTransformBOTH) 242*68017707SAndroid Build Coastguard Worker testClassesDirs = project.files(classesPostTransformBOTH) 243*68017707SAndroid Build Coastguard Worker exclude '**/*LFTest.*', '**/TraceToStringTest.*', '**/TopLevelGeneratedDeclarationsReflectionTest.*', '**/SyntheticFUFieldsTest.*', '**/AtomicfuReferenceJsTest.*' 244*68017707SAndroid Build Coastguard Worker filter { setFailOnNoMatchingTests(false) } 245*68017707SAndroid Build Coastguard Worker} 246*68017707SAndroid Build Coastguard Worker 247*68017707SAndroid Build Coastguard Workertask transformedTestVH(type: Test, dependsOn: transformVH) { 248*68017707SAndroid Build Coastguard Worker classpath = files(configurations.jvmTestRuntimeClasspath, classesPostTransformVH) 249*68017707SAndroid Build Coastguard Worker testClassesDirs = project.files(classesPostTransformVH) 250*68017707SAndroid Build Coastguard Worker exclude '**/*LFTest.*', '**/TraceToStringTest.*', '**/TopLevelGeneratedDeclarationsReflectionTest.*', '**/SyntheticFUFieldsTest.*', '**/AtomicfuReferenceJsTest.*' 251*68017707SAndroid Build Coastguard Worker filter { setFailOnNoMatchingTests(false) } 252*68017707SAndroid Build Coastguard Worker} 253*68017707SAndroid Build Coastguard Worker 254*68017707SAndroid Build Coastguard WorkertransformedTestVH.onlyIf { 255*68017707SAndroid Build Coastguard Worker logger.println(JavaVersion.current()) 256*68017707SAndroid Build Coastguard Worker JavaVersion.current().ordinal() >= JavaVersion.VERSION_1_9.ordinal() 257*68017707SAndroid Build Coastguard Worker} 258*68017707SAndroid Build Coastguard Worker 259*68017707SAndroid Build Coastguard Workertask jvmTestAll(dependsOn: [ 260*68017707SAndroid Build Coastguard Worker transformedTestFU_current, 261*68017707SAndroid Build Coastguard Worker transformedTestBOTH_current, 262*68017707SAndroid Build Coastguard Worker transformedTestVH 263*68017707SAndroid Build Coastguard Worker]) 264*68017707SAndroid Build Coastguard Worker 265*68017707SAndroid Build Coastguard Workertasks.withType(Test) { 266*68017707SAndroid Build Coastguard Worker testLogging { 267*68017707SAndroid Build Coastguard Worker showStandardStreams = true 268*68017707SAndroid Build Coastguard Worker events "passed", "failed" 269*68017707SAndroid Build Coastguard Worker } 270*68017707SAndroid Build Coastguard Worker} 271*68017707SAndroid Build Coastguard Worker 272*68017707SAndroid Build Coastguard Workertask compileJavaModuleInfo(type: JavaCompile) { 273*68017707SAndroid Build Coastguard Worker def moduleName = "kotlinx.atomicfu" // this module's name 274*68017707SAndroid Build Coastguard Worker def compilation = kotlin.targets["jvm"].compilations["main"] 275*68017707SAndroid Build Coastguard Worker def compileKotlinTask = compilation.compileTaskProvider.get() as KotlinJvmCompile 276*68017707SAndroid Build Coastguard Worker def targetDir = compileKotlinTask.destinationDirectory.dir("../java9") 277*68017707SAndroid Build Coastguard Worker def sourceDir = file("src/jvmMain/java9/") 278*68017707SAndroid Build Coastguard Worker 279*68017707SAndroid Build Coastguard Worker // Use a Java 11 compiler for the module info. 280*68017707SAndroid Build Coastguard Worker javaCompiler.set(project.javaToolchains.compilerFor { languageVersion.set(JavaLanguageVersion.of(11)) }) 281*68017707SAndroid Build Coastguard Worker 282*68017707SAndroid Build Coastguard Worker // Always compile kotlin classes before the module descriptor. 283*68017707SAndroid Build Coastguard Worker dependsOn(compileKotlinTask) 284*68017707SAndroid Build Coastguard Worker 285*68017707SAndroid Build Coastguard Worker // Add the module-info source file. 286*68017707SAndroid Build Coastguard Worker source(sourceDir) 287*68017707SAndroid Build Coastguard Worker 288*68017707SAndroid Build Coastguard Worker // Also add the module-info.java source file to the Kotlin compile task. 289*68017707SAndroid Build Coastguard Worker // The Kotlin compiler will parse and check module dependencies, 290*68017707SAndroid Build Coastguard Worker // but it currently won't compile to a module-info.class file. 291*68017707SAndroid Build Coastguard Worker // Note that module checking only works on JDK 9+, 292*68017707SAndroid Build Coastguard Worker // because the JDK built-in base modules are not available in earlier versions. 293*68017707SAndroid Build Coastguard Worker def javaVersion = compileKotlinTask.kotlinJavaToolchain.javaVersion.getOrNull() 294*68017707SAndroid Build Coastguard Worker if (javaVersion?.isJava9Compatible() == true) { 295*68017707SAndroid Build Coastguard Worker logger.info("Module-info checking is enabled; $compileKotlinJvm is compiled using Java $javaVersion") 296*68017707SAndroid Build Coastguard Worker compileKotlinJvm.source(sourceDir) 297*68017707SAndroid Build Coastguard Worker } else { 298*68017707SAndroid Build Coastguard Worker logger.info("Module-info checking is disabled") 299*68017707SAndroid Build Coastguard Worker } 300*68017707SAndroid Build Coastguard Worker 301*68017707SAndroid Build Coastguard Worker // Set the task outputs and destination dir 302*68017707SAndroid Build Coastguard Worker outputs.dir(targetDir) 303*68017707SAndroid Build Coastguard Worker destinationDirectory.set(targetDir) 304*68017707SAndroid Build Coastguard Worker 305*68017707SAndroid Build Coastguard Worker // Configure JVM compatibility 306*68017707SAndroid Build Coastguard Worker sourceCompatibility = JavaVersion.VERSION_1_9.toString() 307*68017707SAndroid Build Coastguard Worker targetCompatibility = JavaVersion.VERSION_1_9.toString() 308*68017707SAndroid Build Coastguard Worker 309*68017707SAndroid Build Coastguard Worker // Set the Java release version. 310*68017707SAndroid Build Coastguard Worker options.release.set(9) 311*68017707SAndroid Build Coastguard Worker 312*68017707SAndroid Build Coastguard Worker // Ignore warnings about using 'requires transitive' on automatic modules. 313*68017707SAndroid Build Coastguard Worker // not needed when compiling with recent JDKs, e.g. 17 314*68017707SAndroid Build Coastguard Worker options.compilerArgs.add("-Xlint:-requires-transitive-automatic") 315*68017707SAndroid Build Coastguard Worker 316*68017707SAndroid Build Coastguard Worker // Patch the compileKotlinJvm output classes into the compilation so exporting packages works correctly. 317*68017707SAndroid Build Coastguard Worker options.compilerArgs.addAll(["--patch-module", "$moduleName=${compileKotlinTask.destinationDirectory.get().getAsFile()}"]) 318*68017707SAndroid Build Coastguard Worker 319*68017707SAndroid Build Coastguard Worker // Use the classpath of the compileKotlinJvm task. 320*68017707SAndroid Build Coastguard Worker // Also ensure that the module path is used instead of classpath. 321*68017707SAndroid Build Coastguard Worker classpath = compileKotlinTask.libraries 322*68017707SAndroid Build Coastguard Worker modularity.inferModulePath.set(true) 323*68017707SAndroid Build Coastguard Worker 324*68017707SAndroid Build Coastguard Worker doFirst { 325*68017707SAndroid Build Coastguard Worker logger.warn("Task destination directory: ${destinationDirectory.get().getAsFile()}") 326*68017707SAndroid Build Coastguard Worker } 327*68017707SAndroid Build Coastguard Worker} 328*68017707SAndroid Build Coastguard Worker 329*68017707SAndroid Build Coastguard Worker// Configure the JAR task so that it will include the compiled module-info class file. 330*68017707SAndroid Build Coastguard Workertasks.named("jvmJar") { 331*68017707SAndroid Build Coastguard Worker manifest { 332*68017707SAndroid Build Coastguard Worker attributes(["Multi-Release": true]) 333*68017707SAndroid Build Coastguard Worker } 334*68017707SAndroid Build Coastguard Worker from(compileJavaModuleInfo.destinationDirectory) { 335*68017707SAndroid Build Coastguard Worker into("META-INF/versions/9/") 336*68017707SAndroid Build Coastguard Worker } 337*68017707SAndroid Build Coastguard Worker} 338*68017707SAndroid Build Coastguard Worker 339*68017707SAndroid Build Coastguard WorkerjvmTest { 340*68017707SAndroid Build Coastguard Worker exclude "**/AtomicfuBytecodeTest*", "**/AtomicfuReferenceJsTest*", '**/TopLevelGeneratedDeclarationsReflectionTest.*', '**/SyntheticFUFieldsTest.*' // run them only for transformed code 341*68017707SAndroid Build Coastguard Worker} 342*68017707SAndroid Build Coastguard Worker 343*68017707SAndroid Build Coastguard WorkerjvmTest.dependsOn jvmTestAll 344*68017707SAndroid Build Coastguard Worker 345*68017707SAndroid Build Coastguard WorkerafterEvaluate { 346*68017707SAndroid Build Coastguard Worker publishing.publications { 347*68017707SAndroid Build Coastguard Worker kotlinMultiplatform { 348*68017707SAndroid Build Coastguard Worker apply from: "$rootDir/gradle/publish-mpp-root-module-in-platform.gradle" 349*68017707SAndroid Build Coastguard Worker publishPlatformArtifactsInRootModule(jvm) 350*68017707SAndroid Build Coastguard Worker } 351*68017707SAndroid Build Coastguard Worker } 352*68017707SAndroid Build Coastguard Worker} 353*68017707SAndroid Build Coastguard Worker 354*68017707SAndroid Build Coastguard Workertasks.matching { it.name == "generatePomFileForKotlinMultiplatformPublication" }.configureEach { 355*68017707SAndroid Build Coastguard Worker dependsOn(tasks["generatePomFileForJvmPublication"]) 356*68017707SAndroid Build Coastguard Worker} 357*68017707SAndroid Build Coastguard Worker 358*68017707SAndroid Build Coastguard Worker// Workaround for https://youtrack.jetbrains.com/issue/KT-58303: 359*68017707SAndroid Build Coastguard Worker// the `clean` task can't delete the expanded.lock file on Windows as it's still held by Gradle, failing the build 360*68017707SAndroid Build Coastguard Workertasks.clean { 361*68017707SAndroid Build Coastguard Worker setDelete(layout.buildDirectory.asFileTree.matching { 362*68017707SAndroid Build Coastguard Worker exclude("tmp/.cache/expanded/expanded.lock") 363*68017707SAndroid Build Coastguard Worker }) 364*68017707SAndroid Build Coastguard Worker} 365