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}