From 8fc703adf189b9bdbf812d8a17cbce96e3464507 Mon Sep 17 00:00:00 2001 From: Carter Jernigan Date: Thu, 21 Apr 2022 10:36:51 -0400 Subject: [PATCH] [#31] Configure multiplatform build scripts --- .git-blame-ignore-revs | 1 + build-conventions/build.gradle.kts | 25 ++++++++ build-conventions/buildscript-gradle.lockfile | 45 +++++++++++++++ build-conventions/settings.gradle.kts | 13 +++++ ...otlin-multiplatform-conventions.gradle.kts | 32 +++++++++++ gradle.properties | 7 +++ gradle/libs.versions.toml | 2 +- lib/build.gradle.kts | 57 +++++++++---------- settings-gradle.lockfile | 4 ++ settings.gradle.kts | 2 + 10 files changed, 156 insertions(+), 32 deletions(-) create mode 100644 .git-blame-ignore-revs create mode 100644 build-conventions/build.gradle.kts create mode 100644 build-conventions/buildscript-gradle.lockfile create mode 100644 build-conventions/settings.gradle.kts create mode 100644 build-conventions/src/main/kotlin/bip39.kotlin-multiplatform-conventions.gradle.kts create mode 100644 settings-gradle.lockfile diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 0000000..e4a761c --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1 @@ +3f24445329869fd19b9ea3fe72d97aefa768ea0a diff --git a/build-conventions/build.gradle.kts b/build-conventions/build.gradle.kts new file mode 100644 index 0000000..b5d3d56 --- /dev/null +++ b/build-conventions/build.gradle.kts @@ -0,0 +1,25 @@ +plugins { + `kotlin-dsl` +} + +buildscript { + dependencyLocking { + lockAllConfigurations() + } +} + +dependencyLocking { + lockAllConfigurations() +} + +// Per conversation in the KotlinLang Slack, Gradle uses Java 8 compatibility internally +// for all build scripts. +// https://kotlinlang.slack.com/archives/C19FD9681/p1636632870122900?thread_ts=1636572288.117000&cid=C19FD9681 +java { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} + +dependencies { + implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:${libs.versions.kotlin.get()}") +} diff --git a/build-conventions/buildscript-gradle.lockfile b/build-conventions/buildscript-gradle.lockfile new file mode 100644 index 0000000..504107c --- /dev/null +++ b/build-conventions/buildscript-gradle.lockfile @@ -0,0 +1,45 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +com.github.gundy:semver4j:0.16.4=classpath +com.google.code.findbugs:jsr305:3.0.2=classpath +com.google.code.gson:gson:2.8.6=classpath +com.google.errorprone:error_prone_annotations:2.3.4=classpath +com.google.guava:failureaccess:1.0.1=classpath +com.google.guava:guava:29.0-jre=classpath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=classpath +com.google.j2objc:j2objc-annotations:1.3=classpath +de.undercouch:gradle-download-task:4.1.1=classpath +org.checkerframework:checker-qual:2.11.1=classpath +org.gradle.kotlin.kotlin-dsl:org.gradle.kotlin.kotlin-dsl.gradle.plugin:2.1.7=classpath +org.gradle.kotlin:gradle-kotlin-dsl-plugins:2.1.7=classpath +org.jetbrains.intellij.deps:trove4j:1.0.20181211=classpath +org.jetbrains.kotlin:kotlin-android-extensions:1.5.31=classpath +org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.5.31=classpath +org.jetbrains.kotlin:kotlin-build-common:1.5.31=classpath +org.jetbrains.kotlin:kotlin-compiler-embeddable:1.5.31=classpath +org.jetbrains.kotlin:kotlin-compiler-runner:1.5.31=classpath +org.jetbrains.kotlin:kotlin-daemon-client:1.5.31=classpath +org.jetbrains.kotlin:kotlin-daemon-embeddable:1.5.31=classpath +org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.5.31=classpath +org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.5.31=classpath +org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31=classpath +org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.5.31=classpath +org.jetbrains.kotlin:kotlin-native-utils:1.5.31=classpath +org.jetbrains.kotlin:kotlin-project-model:1.5.31=classpath +org.jetbrains.kotlin:kotlin-sam-with-receiver:1.5.31=classpath +org.jetbrains.kotlin:kotlin-scripting-common:1.5.31=classpath +org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.5.31=classpath +org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.5.31=classpath +org.jetbrains.kotlin:kotlin-scripting-jvm:1.5.31=classpath +org.jetbrains.kotlin:kotlin-stdlib-common:1.5.31=classpath +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.5.31=classpath +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.31=classpath +org.jetbrains.kotlin:kotlin-stdlib:1.5.31=classpath +org.jetbrains.kotlin:kotlin-tooling-metadata:1.5.31=classpath +org.jetbrains.kotlin:kotlin-util-io:1.5.31=classpath +org.jetbrains.kotlin:kotlin-util-klib:1.5.31=classpath +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=classpath +org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0=classpath +org.jetbrains:annotations:13.0=classpath +empty= diff --git a/build-conventions/settings.gradle.kts b/build-conventions/settings.gradle.kts new file mode 100644 index 0000000..f52da4b --- /dev/null +++ b/build-conventions/settings.gradle.kts @@ -0,0 +1,13 @@ +@Suppress("UnstableApiUsage") +dependencyResolutionManagement { + repositories { + mavenCentral() + } + dependencyResolutionManagement { + versionCatalogs { + create("libs") { + from(files("../gradle/libs.versions.toml")) + } + } + } +} diff --git a/build-conventions/src/main/kotlin/bip39.kotlin-multiplatform-conventions.gradle.kts b/build-conventions/src/main/kotlin/bip39.kotlin-multiplatform-conventions.gradle.kts new file mode 100644 index 0000000..3b819f8 --- /dev/null +++ b/build-conventions/src/main/kotlin/bip39.kotlin-multiplatform-conventions.gradle.kts @@ -0,0 +1,32 @@ +import org.gradle.jvm.toolchain.JavaToolchainSpec + +pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") { + extensions.findByType()?.apply { + jvmToolchain { + val javaVersion = JavaVersion.toVersion(project.property("JVM_TOOLCHAIN").toString()) + val javaLanguageVersion = JavaLanguageVersion.of(javaVersion.majorVersion) + (this as JavaToolchainSpec).languageVersion.set(javaLanguageVersion) + } + + targets.matching { it.platformType.name == "jvm" }.all { + (this as org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget).apply { + val javaTargetVersion = project.property("JVM_TARGET").toString() + + compilations.all { + kotlinOptions { + jvmTarget = javaTargetVersion + } + } + } + } + + targets.all { + compilations.all { + kotlinOptions { + allWarningsAsErrors = project.property("BIP39_IS_TREAT_WARNINGS_AS_ERRORS").toString().toBoolean() + freeCompilerArgs = freeCompilerArgs + "-opt-in=kotlin.RequiresOptIn" + } + } + } + } +} diff --git a/gradle.properties b/gradle.properties index 822a3c9..50c556e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,6 +6,13 @@ org.gradle.caching=true org.gradle.parallel=true org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m +kotlin.mpp.stability.nowarn=true + +BIP39_IS_TREAT_WARNINGS_AS_ERRORS=false + +JVM_TOOLCHAIN=17 +JVM_TARGET=1.8 + # Publishing : Required GROUP=cash.z.ecc.android POM_ARTIFACT_ID=kotlin-bip39 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c2addda..c48834f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,7 @@ moshi-core = { module = "com.squareup.moshi:moshi", version.ref = "moshi" } moshi-kotlin = { module = "com.squareup.moshi:moshi-kotlin", version.ref = "moshi" } [plugins] -kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } +kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } dokka = "org.jetbrains.dokka:1.6.20" versions = "com.github.ben-manes.versions:0.42.0" publish = "com.vanniktech.maven.publish:0.18.0" diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index 864e44d..2c7120a 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - alias(libs.plugins.kotlin) + id("org.jetbrains.kotlin.multiplatform") version(libs.versions.kotlin.get()) id("java-library") alias(libs.plugins.dokka) alias(libs.plugins.publish) @@ -8,37 +8,32 @@ plugins { group = project.property("GROUP").toString() version = project.property("VERSION_NAME").toString() -sourceSets { - main { - java { - setSrcDirs(listOf("src/jvmMain/kotlin")) - } - } - - test { - java { - setSrcDirs(listOf("src/jvmTest/kotlin", "src/jvmTest/resources")) - } - } -} - kotlin { - jvmToolchain { - // This should be set lower for Android, although there's no compatible JVM for Apple Silicon - (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(11)) + jvm() + sourceSets { + val commonMain by getting { + dependencies { + } + } + val commonTest by getting { + dependencies { + implementation(kotlin("test")) + } + } + val jvmMain by getting { + dependencies { + } + } + val jvmTest by getting { + dependencies { + implementation(kotlin("test")) + implementation(libs.kotest.runner) + implementation(libs.kotest.assertion) + implementation(libs.kotest.property) + implementation(libs.moshi.core) + implementation(libs.moshi.kotlin) + } + } } } -dependencies { - // Tests - testImplementation(kotlin("test")) - testImplementation(libs.kotest.runner) - testImplementation(libs.kotest.assertion) - testImplementation(libs.kotest.property) - testImplementation(libs.moshi.core) - testImplementation(libs.moshi.kotlin) -} - -tasks.withType { - useJUnitPlatform() -} diff --git a/settings-gradle.lockfile b/settings-gradle.lockfile new file mode 100644 index 0000000..709a43f --- /dev/null +++ b/settings-gradle.lockfile @@ -0,0 +1,4 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +empty=incomingCatalogForLibs0 diff --git a/settings.gradle.kts b/settings.gradle.kts index 209362d..58fa35b 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -7,3 +7,5 @@ dependencyResolutionManagement { rootProject.name = "kotlin-bip39" include(":lib") + +includeBuild("build-conventions")