1*57b5a4a6SAndroid Build Coastguard Workerimport org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile 2*57b5a4a6SAndroid Build Coastguard Worker 3*57b5a4a6SAndroid Build Coastguard Worker/* 4*57b5a4a6SAndroid Build Coastguard Worker * Copyright 2017-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. 5*57b5a4a6SAndroid Build Coastguard Worker */ 6*57b5a4a6SAndroid Build Coastguard Worker 7*57b5a4a6SAndroid Build Coastguard Workerapply plugin: 'kotlin-multiplatform' 8*57b5a4a6SAndroid Build Coastguard Workerapply plugin: 'kotlinx-serialization' 9*57b5a4a6SAndroid Build Coastguard Worker 10*57b5a4a6SAndroid Build Coastguard Workerapply from: rootProject.file("gradle/native-targets.gradle") 11*57b5a4a6SAndroid Build Coastguard Workerapply from: rootProject.file("gradle/configure-source-sets.gradle") 12*57b5a4a6SAndroid Build Coastguard Worker 13*57b5a4a6SAndroid Build Coastguard Workerkotlin { 14*57b5a4a6SAndroid Build Coastguard Worker sourceSets { 15*57b5a4a6SAndroid Build Coastguard Worker jvmTest { 16*57b5a4a6SAndroid Build Coastguard Worker dependencies { 17*57b5a4a6SAndroid Build Coastguard Worker implementation 'io.kotlintest:kotlintest:2.0.7' 18*57b5a4a6SAndroid Build Coastguard Worker implementation 'com.google.guava:guava:24.1.1-jre' 19*57b5a4a6SAndroid Build Coastguard Worker implementation 'com.google.code.gson:gson:2.8.5' 20*57b5a4a6SAndroid Build Coastguard Worker implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version" 21*57b5a4a6SAndroid Build Coastguard Worker } 22*57b5a4a6SAndroid Build Coastguard Worker } 23*57b5a4a6SAndroid Build Coastguard Worker } 24*57b5a4a6SAndroid Build Coastguard Worker} 25*57b5a4a6SAndroid Build Coastguard Worker 26*57b5a4a6SAndroid Build Coastguard Worker/* 27*57b5a4a6SAndroid Build Coastguard Worker These manifest values help kotlinx.serialization compiler plugin determine if it is compatible with a given runtime library. 28*57b5a4a6SAndroid Build Coastguard Worker Plugin reads them during compilation. 29*57b5a4a6SAndroid Build Coastguard Worker 30*57b5a4a6SAndroid Build Coastguard Worker Implementation-Version is used to determine whether runtime library supports a given plugin feature (e.g. value classes serialization 31*57b5a4a6SAndroid Build Coastguard Worker in Kotlin 1.x may require runtime library version 1.y to work). 32*57b5a4a6SAndroid Build Coastguard Worker Compiler plugin may enable or disable features by looking on Implementation-Version. 33*57b5a4a6SAndroid Build Coastguard Worker 34*57b5a4a6SAndroid Build Coastguard Worker Require-Kotlin-Version is used to determine whether runtime library with new features can work with old compilers. 35*57b5a4a6SAndroid Build Coastguard Worker In ideal case, its value should always be 1.4, but some refactorings (e.g. adding a method to the Encoder interface) 36*57b5a4a6SAndroid Build Coastguard Worker may unexpectedly break old compilers, so it is left out as a safety net. Compiler plugins, starting from 1.4 are instructed 37*57b5a4a6SAndroid Build Coastguard Worker to reject runtime if runtime's Require-Kotlin-Version is greater then the current compiler. 38*57b5a4a6SAndroid Build Coastguard Worker */ 39*57b5a4a6SAndroid Build Coastguard Workertasks.withType(Jar).named(kotlin.jvm().artifactsTaskName) { 40*57b5a4a6SAndroid Build Coastguard Worker 41*57b5a4a6SAndroid Build Coastguard Worker // adding the ProGuard rules to the jar 42*57b5a4a6SAndroid Build Coastguard Worker from(rootProject.file("rules/common.pro")) { 43*57b5a4a6SAndroid Build Coastguard Worker rename { "kotlinx-serialization-common.pro" } 44*57b5a4a6SAndroid Build Coastguard Worker into("META-INF/proguard") 45*57b5a4a6SAndroid Build Coastguard Worker } 46*57b5a4a6SAndroid Build Coastguard Worker from(rootProject.file("rules/common.pro")) { 47*57b5a4a6SAndroid Build Coastguard Worker rename { "kotlinx-serialization-common.pro" } 48*57b5a4a6SAndroid Build Coastguard Worker into("META-INF/com.android.tools/proguard") 49*57b5a4a6SAndroid Build Coastguard Worker } 50*57b5a4a6SAndroid Build Coastguard Worker from(rootProject.file("rules/common.pro")) { 51*57b5a4a6SAndroid Build Coastguard Worker rename { "kotlinx-serialization-common.pro" } 52*57b5a4a6SAndroid Build Coastguard Worker into("META-INF/com.android.tools/r8") 53*57b5a4a6SAndroid Build Coastguard Worker } 54*57b5a4a6SAndroid Build Coastguard Worker from(rootProject.file("rules/r8.pro")) { 55*57b5a4a6SAndroid Build Coastguard Worker rename { "kotlinx-serialization-r8.pro" } 56*57b5a4a6SAndroid Build Coastguard Worker into("META-INF/com.android.tools/r8") 57*57b5a4a6SAndroid Build Coastguard Worker } 58*57b5a4a6SAndroid Build Coastguard Worker 59*57b5a4a6SAndroid Build Coastguard Worker 60*57b5a4a6SAndroid Build Coastguard Worker manifest { 61*57b5a4a6SAndroid Build Coastguard Worker attributes( 62*57b5a4a6SAndroid Build Coastguard Worker "Implementation-Version": version, 63*57b5a4a6SAndroid Build Coastguard Worker "Require-Kotlin-Version": "1.4.30-M1", 64*57b5a4a6SAndroid Build Coastguard Worker ) 65*57b5a4a6SAndroid Build Coastguard Worker } 66*57b5a4a6SAndroid Build Coastguard Worker} 67*57b5a4a6SAndroid Build Coastguard Worker 68*57b5a4a6SAndroid Build Coastguard WorkerJava9Modularity.configureJava9ModuleInfo(project) 69*57b5a4a6SAndroid Build Coastguard Worker 70*57b5a4a6SAndroid Build Coastguard Workertasks.withType(org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrLink.class).configureEach { 71*57b5a4a6SAndroid Build Coastguard Worker kotlinOptions.freeCompilerArgs += "-Xwasm-enable-array-range-checks" 72*57b5a4a6SAndroid Build Coastguard Worker} 73