xref: /aosp_15_r20/external/kotlinx.atomicfu/atomicfu-gradle-plugin/build.gradle (revision 68017707106cb9da9fed635c150bc497c09c160f)
1*68017707SAndroid Build Coastguard Worker/*
2*68017707SAndroid Build Coastguard Worker * Copyright 2017-2018 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 Workerapply plugin: 'kotlin'
6*68017707SAndroid Build Coastguard Workerapply plugin: 'java-gradle-plugin'
7*68017707SAndroid Build Coastguard Worker
8*68017707SAndroid Build Coastguard Worker// Gradle plugin must be compiled targeting the same Kotlin version as used by Gradle
9*68017707SAndroid Build Coastguard Workerkotlin.sourceSets.configureEach {
10*68017707SAndroid Build Coastguard Worker    languageSettings {
11*68017707SAndroid Build Coastguard Worker        languageVersion = KotlinConfiguration.getOverridingKotlinLanguageVersion(project) ?: "1.4"
12*68017707SAndroid Build Coastguard Worker        apiVersion = KotlinConfiguration.getOverridingKotlinApiVersion(project) ?: "1.4"
13*68017707SAndroid Build Coastguard Worker    }
14*68017707SAndroid Build Coastguard Worker}
15*68017707SAndroid Build Coastguard Worker
16*68017707SAndroid Build Coastguard Workerdependencies {
17*68017707SAndroid Build Coastguard Worker    implementation(project(":atomicfu-transformer")) {
18*68017707SAndroid Build Coastguard Worker        exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib'
19*68017707SAndroid Build Coastguard Worker    }
20*68017707SAndroid Build Coastguard Worker
21*68017707SAndroid Build Coastguard Worker    compileOnly gradleApi()
22*68017707SAndroid Build Coastguard Worker    compileOnly 'org.jetbrains.kotlin:kotlin-stdlib'
23*68017707SAndroid Build Coastguard Worker    compileOnly "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
24*68017707SAndroid Build Coastguard Worker    // Atomicfu compiler plugin dependency will be loaded to kotlinCompilerPluginClasspath
25*68017707SAndroid Build Coastguard Worker    // Atomicfu plugin will only be applied if the flag is set kotlinx.atomicfu.enableJsIrTransformation=true
26*68017707SAndroid Build Coastguard Worker    implementation "org.jetbrains.kotlin:atomicfu:$kotlin_version"
27*68017707SAndroid Build Coastguard Worker
28*68017707SAndroid Build Coastguard Worker    testImplementation gradleTestKit()
29*68017707SAndroid Build Coastguard Worker    testImplementation 'org.jetbrains.kotlin:kotlin-test'
30*68017707SAndroid Build Coastguard Worker    testImplementation 'org.jetbrains.kotlin:kotlin-test-junit'
31*68017707SAndroid Build Coastguard Worker    testImplementation 'junit:junit:4.12'
32*68017707SAndroid Build Coastguard Worker}
33*68017707SAndroid Build Coastguard Worker
34*68017707SAndroid Build Coastguard Workerconfigurations {
35*68017707SAndroid Build Coastguard Worker    testPluginClasspath {
36*68017707SAndroid Build Coastguard Worker        attributes {
37*68017707SAndroid Build Coastguard Worker            attribute(
38*68017707SAndroid Build Coastguard Worker                    Usage.USAGE_ATTRIBUTE,
39*68017707SAndroid Build Coastguard Worker                    project.objects.named(Usage.class, Usage.JAVA_RUNTIME)
40*68017707SAndroid Build Coastguard Worker            )
41*68017707SAndroid Build Coastguard Worker            attribute(
42*68017707SAndroid Build Coastguard Worker                    Category.CATEGORY_ATTRIBUTE,
43*68017707SAndroid Build Coastguard Worker                    project.objects.named(Category.class, Category.LIBRARY)
44*68017707SAndroid Build Coastguard Worker            )
45*68017707SAndroid Build Coastguard Worker        }
46*68017707SAndroid Build Coastguard Worker    }
47*68017707SAndroid Build Coastguard Worker}
48*68017707SAndroid Build Coastguard Worker
49*68017707SAndroid Build Coastguard Workerdependencies {
50*68017707SAndroid Build Coastguard Worker    testPluginClasspath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
51*68017707SAndroid Build Coastguard Worker}
52*68017707SAndroid Build Coastguard Worker
53*68017707SAndroid Build Coastguard WorkerevaluationDependsOn(':atomicfu')
54*68017707SAndroid Build Coastguard Workerdef atomicfu = project(':atomicfu')
55*68017707SAndroid Build Coastguard Workerdef atomicfuJvmJarTask = atomicfu.tasks.getByName(atomicfu.kotlin.targets.jvm.artifactsTaskName)
56*68017707SAndroid Build Coastguard Worker
57*68017707SAndroid Build Coastguard Workerdef jsLegacy = atomicfu.kotlin.targets.hasProperty("jsLegacy")
58*68017707SAndroid Build Coastguard Worker        ? atomicfu.kotlin.targets.jsLegacy
59*68017707SAndroid Build Coastguard Worker        : atomicfu.kotlin.targets.js
60*68017707SAndroid Build Coastguard Workerdef atomicfuJsJarTask = atomicfu.tasks.getByName(jsLegacy.artifactsTaskName)
61*68017707SAndroid Build Coastguard Worker
62*68017707SAndroid Build Coastguard Workerdef atomicfuMetadataOutput = atomicfu.kotlin.targets.metadata.compilations["main"].output.allOutputs
63*68017707SAndroid Build Coastguard Worker
64*68017707SAndroid Build Coastguard Worker// Write the plugin's classpath to a file to share with the tests
65*68017707SAndroid Build Coastguard Workertask createClasspathManifest {
66*68017707SAndroid Build Coastguard Worker    dependsOn(atomicfuJvmJarTask)
67*68017707SAndroid Build Coastguard Worker    dependsOn(atomicfuJsJarTask)
68*68017707SAndroid Build Coastguard Worker    dependsOn(atomicfuMetadataOutput)
69*68017707SAndroid Build Coastguard Worker
70*68017707SAndroid Build Coastguard Worker    def outputDir = file("$buildDir/$name")
71*68017707SAndroid Build Coastguard Worker    outputs.dir outputDir
72*68017707SAndroid Build Coastguard Worker
73*68017707SAndroid Build Coastguard Worker    doLast {
74*68017707SAndroid Build Coastguard Worker        outputDir.mkdirs()
75*68017707SAndroid Build Coastguard Worker        file("$outputDir/plugin-classpath.txt").text = (sourceSets.main.runtimeClasspath + configurations.testPluginClasspath).join("\n")
76*68017707SAndroid Build Coastguard Worker        file("$outputDir/atomicfu-jvm.txt").text = atomicfuJvmJarTask.archivePath
77*68017707SAndroid Build Coastguard Worker        file("$outputDir/atomicfu-js.txt").text = atomicfuJsJarTask.archivePath
78*68017707SAndroid Build Coastguard Worker        file("$outputDir/atomicfu-metadata.txt").text = atomicfuMetadataOutput.join("\n")
79*68017707SAndroid Build Coastguard Worker    }
80*68017707SAndroid Build Coastguard Worker}
81*68017707SAndroid Build Coastguard Worker
82*68017707SAndroid Build Coastguard Workertask createKotlinRepoUrlResource {
83*68017707SAndroid Build Coastguard Worker    def customKotlinRepoUrl = KotlinConfiguration.getCustomKotlinRepositoryURL(project)
84*68017707SAndroid Build Coastguard Worker    if (customKotlinRepoUrl == null) return
85*68017707SAndroid Build Coastguard Worker
86*68017707SAndroid Build Coastguard Worker    def outputDir = file("$buildDir/$name")
87*68017707SAndroid Build Coastguard Worker    outputs.dir outputDir
88*68017707SAndroid Build Coastguard Worker
89*68017707SAndroid Build Coastguard Worker    doLast {
90*68017707SAndroid Build Coastguard Worker        outputDir.mkdirs()
91*68017707SAndroid Build Coastguard Worker        file("$outputDir/kotlin-repo-url.txt").text = customKotlinRepoUrl
92*68017707SAndroid Build Coastguard Worker    }
93*68017707SAndroid Build Coastguard Worker}
94*68017707SAndroid Build Coastguard Worker
95*68017707SAndroid Build Coastguard Worker// Add the classpath file to the test runtime classpath
96*68017707SAndroid Build Coastguard Workerdependencies {
97*68017707SAndroid Build Coastguard Worker    testRuntimeOnly files(createClasspathManifest)
98*68017707SAndroid Build Coastguard Worker    testRuntimeOnly files(createKotlinRepoUrlResource)
99*68017707SAndroid Build Coastguard Worker}
100