xref: /aosp_15_r20/external/kotlinx.atomicfu/atomicfu/build.gradle (revision 68017707106cb9da9fed635c150bc497c09c160f)
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