xref: /aosp_15_r20/external/kotlinx.serialization/gradle/configure-source-sets.gradle (revision 57b5a4a64c534cf7f27ac9427ceab07f3d8ed3d8)
1*57b5a4a6SAndroid Build Coastguard Worker/*
2*57b5a4a6SAndroid Build Coastguard Worker * Copyright 2017-2022 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
3*57b5a4a6SAndroid Build Coastguard Worker */
4*57b5a4a6SAndroid Build Coastguard Worker
5*57b5a4a6SAndroid Build Coastguard Workerimport static KotlinVersion.*
6*57b5a4a6SAndroid Build Coastguard Worker
7*57b5a4a6SAndroid Build Coastguard Workerjava {
8*57b5a4a6SAndroid Build Coastguard Worker    toolchain {
9*57b5a4a6SAndroid Build Coastguard Worker        languageVersion.set(JavaLanguageVersion.of(11))
10*57b5a4a6SAndroid Build Coastguard Worker    }
11*57b5a4a6SAndroid Build Coastguard Worker}
12*57b5a4a6SAndroid Build Coastguard Worker
13*57b5a4a6SAndroid Build Coastguard Workertasks.withType(JavaCompile).configureEach {
14*57b5a4a6SAndroid Build Coastguard Worker    options.release = 8
15*57b5a4a6SAndroid Build Coastguard Worker}
16*57b5a4a6SAndroid Build Coastguard Worker
17*57b5a4a6SAndroid Build Coastguard Worker// Unfortunately there is no compatible version of okio for Wasm WASI target, so we need to skip to configure WASI for json-okio and json-tests.
18*57b5a4a6SAndroid Build Coastguard Worker// json-tests uses okio with incorporate with other formatter tests so it is hard and not worth to separate it for two projects for WASI.
19*57b5a4a6SAndroid Build Coastguard Worker// So we disable WASI target in it and we hope, that WASI version of compiler and serialization plugin are identical to the WasmJS target so WASI target is being covered.
20*57b5a4a6SAndroid Build Coastguard WorkerBoolean isOkIoOrFormatTests = (project.name == 'kotlinx-serialization-json-okio' || project.name == 'kotlinx-serialization-json-tests')
21*57b5a4a6SAndroid Build Coastguard Worker
22*57b5a4a6SAndroid Build Coastguard Workerkotlin {
23*57b5a4a6SAndroid Build Coastguard Worker    jvm {
24*57b5a4a6SAndroid Build Coastguard Worker        withJava()
25*57b5a4a6SAndroid Build Coastguard Worker        compilations.configureEach {
26*57b5a4a6SAndroid Build Coastguard Worker            kotlinOptions {
27*57b5a4a6SAndroid Build Coastguard Worker                jvmTarget = '1.8'
28*57b5a4a6SAndroid Build Coastguard Worker                freeCompilerArgs += '-Xjdk-release=1.8'
29*57b5a4a6SAndroid Build Coastguard Worker            }
30*57b5a4a6SAndroid Build Coastguard Worker        }
31*57b5a4a6SAndroid Build Coastguard Worker    }
32*57b5a4a6SAndroid Build Coastguard Worker
33*57b5a4a6SAndroid Build Coastguard Worker    js {
34*57b5a4a6SAndroid Build Coastguard Worker        nodejs {
35*57b5a4a6SAndroid Build Coastguard Worker            testTask {
36*57b5a4a6SAndroid Build Coastguard Worker                useMocha {
37*57b5a4a6SAndroid Build Coastguard Worker		    timeout = "10s"
38*57b5a4a6SAndroid Build Coastguard Worker                }
39*57b5a4a6SAndroid Build Coastguard Worker            }
40*57b5a4a6SAndroid Build Coastguard Worker        }
41*57b5a4a6SAndroid Build Coastguard Worker        configure([compilations.main, compilations.test]) {
42*57b5a4a6SAndroid Build Coastguard Worker            kotlinOptions {
43*57b5a4a6SAndroid Build Coastguard Worker                sourceMap = true
44*57b5a4a6SAndroid Build Coastguard Worker                moduleKind = "umd"
45*57b5a4a6SAndroid Build Coastguard Worker            }
46*57b5a4a6SAndroid Build Coastguard Worker        }
47*57b5a4a6SAndroid Build Coastguard Worker    }
48*57b5a4a6SAndroid Build Coastguard Worker
49*57b5a4a6SAndroid Build Coastguard Worker    wasmJs {
50*57b5a4a6SAndroid Build Coastguard Worker        nodejs()
51*57b5a4a6SAndroid Build Coastguard Worker    }
52*57b5a4a6SAndroid Build Coastguard Worker
53*57b5a4a6SAndroid Build Coastguard Worker    if (!isOkIoOrFormatTests) {
54*57b5a4a6SAndroid Build Coastguard Worker        wasmWasi {
55*57b5a4a6SAndroid Build Coastguard Worker            nodejs()
56*57b5a4a6SAndroid Build Coastguard Worker        }
57*57b5a4a6SAndroid Build Coastguard Worker    }
58*57b5a4a6SAndroid Build Coastguard Worker
59*57b5a4a6SAndroid Build Coastguard Worker    sourceSets.all {
60*57b5a4a6SAndroid Build Coastguard Worker        kotlin.srcDirs = ["$it.name/src"]
61*57b5a4a6SAndroid Build Coastguard Worker        resources.srcDirs = ["$it.name/resources"]
62*57b5a4a6SAndroid Build Coastguard Worker        languageSettings {
63*57b5a4a6SAndroid Build Coastguard Worker            progressiveMode = true
64*57b5a4a6SAndroid Build Coastguard Worker
65*57b5a4a6SAndroid Build Coastguard Worker            optIn("kotlin.ExperimentalMultiplatform")
66*57b5a4a6SAndroid Build Coastguard Worker            optIn("kotlin.ExperimentalStdlibApi")
67*57b5a4a6SAndroid Build Coastguard Worker            optIn("kotlinx.serialization.InternalSerializationApi")
68*57b5a4a6SAndroid Build Coastguard Worker        }
69*57b5a4a6SAndroid Build Coastguard Worker    }
70*57b5a4a6SAndroid Build Coastguard Worker
71*57b5a4a6SAndroid Build Coastguard Worker    sourceSets {
72*57b5a4a6SAndroid Build Coastguard Worker        commonMain {
73*57b5a4a6SAndroid Build Coastguard Worker            dependencies {
74*57b5a4a6SAndroid Build Coastguard Worker                api 'org.jetbrains.kotlin:kotlin-stdlib-common'
75*57b5a4a6SAndroid Build Coastguard Worker            }
76*57b5a4a6SAndroid Build Coastguard Worker        }
77*57b5a4a6SAndroid Build Coastguard Worker
78*57b5a4a6SAndroid Build Coastguard Worker        commonTest {
79*57b5a4a6SAndroid Build Coastguard Worker            dependencies {
80*57b5a4a6SAndroid Build Coastguard Worker                api 'org.jetbrains.kotlin:kotlin-test-common'
81*57b5a4a6SAndroid Build Coastguard Worker                api 'org.jetbrains.kotlin:kotlin-test-annotations-common'
82*57b5a4a6SAndroid Build Coastguard Worker            }
83*57b5a4a6SAndroid Build Coastguard Worker        }
84*57b5a4a6SAndroid Build Coastguard Worker
85*57b5a4a6SAndroid Build Coastguard Worker        jvmMain {
86*57b5a4a6SAndroid Build Coastguard Worker            dependencies {
87*57b5a4a6SAndroid Build Coastguard Worker                api 'org.jetbrains.kotlin:kotlin-stdlib'
88*57b5a4a6SAndroid Build Coastguard Worker            }
89*57b5a4a6SAndroid Build Coastguard Worker        }
90*57b5a4a6SAndroid Build Coastguard Worker
91*57b5a4a6SAndroid Build Coastguard Worker        jvmTest {
92*57b5a4a6SAndroid Build Coastguard Worker            dependencies {
93*57b5a4a6SAndroid Build Coastguard Worker                api 'org.jetbrains.kotlin:kotlin-test-junit'
94*57b5a4a6SAndroid Build Coastguard Worker            }
95*57b5a4a6SAndroid Build Coastguard Worker        }
96*57b5a4a6SAndroid Build Coastguard Worker
97*57b5a4a6SAndroid Build Coastguard Worker        jsMain {
98*57b5a4a6SAndroid Build Coastguard Worker            dependencies {
99*57b5a4a6SAndroid Build Coastguard Worker                api 'org.jetbrains.kotlin:kotlin-stdlib-js'
100*57b5a4a6SAndroid Build Coastguard Worker            }
101*57b5a4a6SAndroid Build Coastguard Worker        }
102*57b5a4a6SAndroid Build Coastguard Worker
103*57b5a4a6SAndroid Build Coastguard Worker        jsTest {
104*57b5a4a6SAndroid Build Coastguard Worker            dependencies {
105*57b5a4a6SAndroid Build Coastguard Worker                api 'org.jetbrains.kotlin:kotlin-test-js'
106*57b5a4a6SAndroid Build Coastguard Worker            }
107*57b5a4a6SAndroid Build Coastguard Worker        }
108*57b5a4a6SAndroid Build Coastguard Worker
109*57b5a4a6SAndroid Build Coastguard Worker        create("wasmMain") {
110*57b5a4a6SAndroid Build Coastguard Worker            dependsOn(commonMain)
111*57b5a4a6SAndroid Build Coastguard Worker        }
112*57b5a4a6SAndroid Build Coastguard Worker        create("wasmTest") {
113*57b5a4a6SAndroid Build Coastguard Worker            dependsOn(commonTest)
114*57b5a4a6SAndroid Build Coastguard Worker        }
115*57b5a4a6SAndroid Build Coastguard Worker
116*57b5a4a6SAndroid Build Coastguard Worker        wasmJsMain {
117*57b5a4a6SAndroid Build Coastguard Worker            dependsOn(wasmMain)
118*57b5a4a6SAndroid Build Coastguard Worker            dependencies {
119*57b5a4a6SAndroid Build Coastguard Worker                api 'org.jetbrains.kotlin:kotlin-stdlib-wasm-js'
120*57b5a4a6SAndroid Build Coastguard Worker            }
121*57b5a4a6SAndroid Build Coastguard Worker        }
122*57b5a4a6SAndroid Build Coastguard Worker
123*57b5a4a6SAndroid Build Coastguard Worker        wasmJsTest {
124*57b5a4a6SAndroid Build Coastguard Worker            dependsOn(wasmTest)
125*57b5a4a6SAndroid Build Coastguard Worker            dependencies {
126*57b5a4a6SAndroid Build Coastguard Worker                api 'org.jetbrains.kotlin:kotlin-test-wasm-js'
127*57b5a4a6SAndroid Build Coastguard Worker            }
128*57b5a4a6SAndroid Build Coastguard Worker        }
129*57b5a4a6SAndroid Build Coastguard Worker
130*57b5a4a6SAndroid Build Coastguard Worker        if (!isOkIoOrFormatTests) {
131*57b5a4a6SAndroid Build Coastguard Worker            wasmWasiMain {
132*57b5a4a6SAndroid Build Coastguard Worker                dependsOn(wasmMain)
133*57b5a4a6SAndroid Build Coastguard Worker                dependencies {
134*57b5a4a6SAndroid Build Coastguard Worker                    api 'org.jetbrains.kotlin:kotlin-stdlib-wasm-wasi'
135*57b5a4a6SAndroid Build Coastguard Worker                }
136*57b5a4a6SAndroid Build Coastguard Worker            }
137*57b5a4a6SAndroid Build Coastguard Worker
138*57b5a4a6SAndroid Build Coastguard Worker            wasmWasiTest {
139*57b5a4a6SAndroid Build Coastguard Worker                dependsOn(wasmTest)
140*57b5a4a6SAndroid Build Coastguard Worker                dependencies {
141*57b5a4a6SAndroid Build Coastguard Worker                    api 'org.jetbrains.kotlin:kotlin-test-wasm-wasi'
142*57b5a4a6SAndroid Build Coastguard Worker                }
143*57b5a4a6SAndroid Build Coastguard Worker            }
144*57b5a4a6SAndroid Build Coastguard Worker        }
145*57b5a4a6SAndroid Build Coastguard Worker
146*57b5a4a6SAndroid Build Coastguard Worker        nativeMain.dependencies {
147*57b5a4a6SAndroid Build Coastguard Worker        }
148*57b5a4a6SAndroid Build Coastguard Worker    }
149*57b5a4a6SAndroid Build Coastguard Worker
150*57b5a4a6SAndroid Build Coastguard Worker    sourceSets.findAll({ it.name.contains("Test") }).forEach { srcSet ->
151*57b5a4a6SAndroid Build Coastguard Worker        srcSet.languageSettings {
152*57b5a4a6SAndroid Build Coastguard Worker            it.optIn("kotlinx.serialization.InternalSerializationApi")
153*57b5a4a6SAndroid Build Coastguard Worker            it.optIn("kotlinx.serialization.ExperimentalSerializationApi")
154*57b5a4a6SAndroid Build Coastguard Worker        }
155*57b5a4a6SAndroid Build Coastguard Worker    }
156*57b5a4a6SAndroid Build Coastguard Worker
157*57b5a4a6SAndroid Build Coastguard Worker    sourceSets.matching({ it.name.contains("Main") }).all { srcSet ->
158*57b5a4a6SAndroid Build Coastguard Worker        project.ext.set("kotlin.mpp.freeCompilerArgsForSourceSet.${srcSet.name}", ["-Xexplicit-api=strict"])
159*57b5a4a6SAndroid Build Coastguard Worker    }
160*57b5a4a6SAndroid Build Coastguard Worker
161*57b5a4a6SAndroid Build Coastguard Worker    targets.all {
162*57b5a4a6SAndroid Build Coastguard Worker        compilations.all {
163*57b5a4a6SAndroid Build Coastguard Worker            kotlinOptions {
164*57b5a4a6SAndroid Build Coastguard Worker                if (rootProject.ext.kotlin_lv_override != null) {
165*57b5a4a6SAndroid Build Coastguard Worker                    languageVersion = rootProject.ext.kotlin_lv_override
166*57b5a4a6SAndroid Build Coastguard Worker                    freeCompilerArgs += "-Xsuppress-version-warnings"
167*57b5a4a6SAndroid Build Coastguard Worker                }
168*57b5a4a6SAndroid Build Coastguard Worker                freeCompilerArgs += "-Xexpect-actual-classes"
169*57b5a4a6SAndroid Build Coastguard Worker            }
170*57b5a4a6SAndroid Build Coastguard Worker        }
171*57b5a4a6SAndroid Build Coastguard Worker        compilations.main {
172*57b5a4a6SAndroid Build Coastguard Worker            kotlinOptions {
173*57b5a4a6SAndroid Build Coastguard Worker                allWarningsAsErrors = true
174*57b5a4a6SAndroid Build Coastguard Worker            }
175*57b5a4a6SAndroid Build Coastguard Worker        }
176*57b5a4a6SAndroid Build Coastguard Worker    }
177*57b5a4a6SAndroid Build Coastguard Worker
178*57b5a4a6SAndroid Build Coastguard Worker    def targetsWithoutTestRunners = ["linuxArm64", "linuxArm32Hfp"]
179*57b5a4a6SAndroid Build Coastguard Worker    configure(targets) {
180*57b5a4a6SAndroid Build Coastguard Worker        // Configure additional binaries to run tests in the background
181*57b5a4a6SAndroid Build Coastguard Worker        if (["macos", "linux", "mingw"].any { name.startsWith(it) && !targetsWithoutTestRunners.contains(name) }) {
182*57b5a4a6SAndroid Build Coastguard Worker            binaries {
183*57b5a4a6SAndroid Build Coastguard Worker                test("background", [nativeDebugBuild]) {
184*57b5a4a6SAndroid Build Coastguard Worker                    freeCompilerArgs += ["-trw"]
185*57b5a4a6SAndroid Build Coastguard Worker                }
186*57b5a4a6SAndroid Build Coastguard Worker            }
187*57b5a4a6SAndroid Build Coastguard Worker            testRuns {
188*57b5a4a6SAndroid Build Coastguard Worker                background { setExecutionSourceFrom(binaries.backgroundDebugTest) }
189*57b5a4a6SAndroid Build Coastguard Worker            }
190*57b5a4a6SAndroid Build Coastguard Worker        }
191*57b5a4a6SAndroid Build Coastguard Worker    }
192*57b5a4a6SAndroid Build Coastguard Worker}
193*57b5a4a6SAndroid Build Coastguard Worker
194*57b5a4a6SAndroid Build Coastguard WorkerrootProject.extensions.findByType(org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension.class).with {
195*57b5a4a6SAndroid Build Coastguard Worker    // canary nodejs that supports recent Wasm GC changes
196*57b5a4a6SAndroid Build Coastguard Worker    it.nodeVersion = "21.0.0-v8-canary202309167e82ab1fa2"
197*57b5a4a6SAndroid Build Coastguard Worker    it.nodeDownloadBaseUrl = "https://nodejs.org/download/v8-canary"
198*57b5a4a6SAndroid Build Coastguard Worker}