kotlin multiplatform and proto kind of working?
This commit is contained in:
parent
5bb5f42af0
commit
6dce641d6b
9 changed files with 207 additions and 22 deletions
|
|
@ -50,4 +50,4 @@ class IntelliJPattern : Plugin<Project> {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import org.gradle.api.tasks.SourceSetContainer
|
||||||
import org.gradle.kotlin.dsl.findByType
|
import org.gradle.kotlin.dsl.findByType
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
|
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
|
||||||
|
|
||||||
class KotlinProjectConfiguration : Plugin<Project> {
|
class KotlinJvmProjectConfiguration : Plugin<Project> {
|
||||||
|
|
||||||
override fun apply(project: Project) {
|
override fun apply(project: Project) {
|
||||||
addSourceSets(project)
|
addSourceSets(project)
|
||||||
|
|
@ -15,16 +15,18 @@ class KotlinProjectConfiguration : Plugin<Project> {
|
||||||
|
|
||||||
private fun addSourceSets(project: Project) {
|
private fun addSourceSets(project: Project) {
|
||||||
|
|
||||||
project.extensions.findByType<KotlinJvmProjectExtension>()?.apply {
|
project.beforeEvaluate {
|
||||||
|
extensions.findByType<KotlinJvmProjectExtension>()?.apply {
|
||||||
project.extensions.findByType<SourceSetContainer>()
|
extensions.findByType<SourceSetContainer>()
|
||||||
?.named(SourceSet.MAIN_SOURCE_SET_NAME)
|
?.named(SourceSet.MAIN_SOURCE_SET_NAME)
|
||||||
?.configure {
|
?.configure {
|
||||||
java {
|
java {
|
||||||
srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/java"))
|
srcDir(layout.buildDirectory.dir("pbAndG/generated-sources/java"))
|
||||||
srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/kotlin"))
|
srcDir(layout.buildDirectory.dir("pbAndG/generated-sources/kotlin"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
|
|
||||||
// val srcSet = project.extensions.getByName<SourceSet>(SourceSet.MAIN_SOURCE_SET_NAME)
|
// val srcSet = project.extensions.getByName<SourceSet>(SourceSet.MAIN_SOURCE_SET_NAME)
|
||||||
//
|
//
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
package dev.adamko.gradle.pbandg.pattern
|
||||||
|
|
||||||
|
import org.gradle.api.Plugin
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.kotlin.dsl.findByType
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||||
|
|
||||||
|
class KotlinMultiplatformProjectConfiguration : Plugin<Project> {
|
||||||
|
|
||||||
|
override fun apply(project: Project) {
|
||||||
|
project.afterEvaluate {
|
||||||
|
addSourceSets(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun addSourceSets(project: Project) {
|
||||||
|
|
||||||
|
project.extensions.findByType<KotlinMultiplatformExtension>()?.apply {
|
||||||
|
project.logger.lifecycle("Kotlin Multiplatform source sets: ${sourceSets.joinToString { "${it.name} / ${it.kotlin.sourceDirectories.files.joinToString()}" }}")
|
||||||
|
|
||||||
|
sourceSets.whenObjectAdded {
|
||||||
|
this.name
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// val protoJvm = this.sourceSets.maybeCreate("protoJvm").apply {
|
||||||
|
// kotlin.srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/java"))
|
||||||
|
// kotlin.srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/kotlin"))
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// val protoTypescript = this.sourceSets.maybeCreate("protoJvm").apply {
|
||||||
|
// kotlin.srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/typescript"))
|
||||||
|
// }
|
||||||
|
|
||||||
|
this.sourceSets.named("jvmMain").configure {
|
||||||
|
// dependsOn(protoJvm)
|
||||||
|
kotlin.srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/java"))
|
||||||
|
kotlin.srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/kotlin"))
|
||||||
|
}
|
||||||
|
this.sourceSets.named("jsMain").configure {
|
||||||
|
// dependsOn(protoTypescript)
|
||||||
|
kotlin.srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/typescript"))
|
||||||
|
}
|
||||||
|
|
||||||
|
project.logger.lifecycle("Kotlin Multiplatform source sets: ${sourceSets.joinToString { "${it.name} / ${it.kotlin.sourceDirectories.files.joinToString()}" }}")
|
||||||
|
|
||||||
|
//
|
||||||
|
// targets .forEach {
|
||||||
|
// when (it.platformType){
|
||||||
|
// KotlinPlatformType.jvm -> TODO()
|
||||||
|
// KotlinPlatformType.js -> {
|
||||||
|
// it.defaultConfigurationName
|
||||||
|
// }
|
||||||
|
// KotlinPlatformType.androidJvm -> {}
|
||||||
|
// KotlinPlatformType.common -> {}
|
||||||
|
// KotlinPlatformType.native -> {}
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
package dev.adamko.gradle.pbandg
|
package dev.adamko.gradle.pbandg
|
||||||
|
|
||||||
import dev.adamko.gradle.pbandg.pattern.IntelliJPattern
|
import dev.adamko.gradle.pbandg.pattern.KotlinJvmProjectConfiguration
|
||||||
import dev.adamko.gradle.pbandg.pattern.KotlinProjectConfiguration
|
import dev.adamko.gradle.pbandg.pattern.KotlinMultiplatformProjectConfiguration
|
||||||
import dev.adamko.gradle.pbandg.settings.PBAndGSettings
|
import dev.adamko.gradle.pbandg.settings.PBAndGSettings
|
||||||
import dev.adamko.gradle.pbandg.task.ProtobufCompileTask
|
import dev.adamko.gradle.pbandg.task.ProtobufCompileTask
|
||||||
import dev.adamko.gradle.pbandg.task.ProtobufPrepareLibrariesTask
|
import dev.adamko.gradle.pbandg.task.ProtobufPrepareLibrariesTask
|
||||||
|
|
@ -24,8 +24,15 @@ plugins {
|
||||||
//if (plugins.hasPlugin(IdeaPlugin::class)) {
|
//if (plugins.hasPlugin(IdeaPlugin::class)) {
|
||||||
// IntelliJPattern().apply(project)
|
// IntelliJPattern().apply(project)
|
||||||
//}
|
//}
|
||||||
if (plugins.hasPlugin("org.jetbrains.kotlin.jvm")) {
|
|
||||||
KotlinProjectConfiguration().apply(project)
|
plugins.withId("org.jetbrains.kotlin.jvm") {
|
||||||
|
logger.info("Configuring Kotlin JVM plugin for PB&G")
|
||||||
|
KotlinJvmProjectConfiguration().apply(project)
|
||||||
|
}
|
||||||
|
|
||||||
|
plugins.withId("org.jetbrains.kotlin.multiplatform") {
|
||||||
|
logger.info("Configuring Kotlin Multiplatform plugin for PB&G")
|
||||||
|
KotlinMultiplatformProjectConfiguration().apply(project)
|
||||||
}
|
}
|
||||||
|
|
||||||
val pbAndGSettings =
|
val pbAndGSettings =
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
plugins {
|
plugins {
|
||||||
id("dev.adamko.factoriowebmap.archetype.kotlin-jvm")
|
id("dev.adamko.factoriowebmap.archetype.base")
|
||||||
|
kotlin("multiplatform")
|
||||||
|
|
||||||
|
// id("dev.adamko.factoriowebmap.archetype.kotlin-jvm")
|
||||||
id("dev.adamko.gradle.pbandg.pb-and-g")
|
id("dev.adamko.gradle.pbandg.pb-and-g")
|
||||||
`kotlin-dsl`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val projectId: String by project.extra
|
val projectId: String by project.extra
|
||||||
|
|
@ -10,15 +12,128 @@ val buildDir: Directory = layout.buildDirectory.dir(projectId).get()
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
protobufLibrary("com.google.protobuf:protobuf-javalite:3.19.1")
|
protobufLibrary("com.google.protobuf:protobuf-javalite:3.19.1")
|
||||||
|
//
|
||||||
api("com.google.protobuf:protobuf-javalite:3.19.1")
|
// api("com.google.protobuf:protobuf-javalite:3.19.1")
|
||||||
api("com.google.protobuf:protobuf-kotlin-lite:3.19.1")
|
// api("com.google.protobuf:protobuf-kotlin-lite:3.19.1")
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.protobufCompile {
|
tasks.protobufCompile {
|
||||||
protoFile.set(layout.projectDirectory.file("src/main/proto/FactorioServerLogRecord.proto"))
|
protoFile.set(layout.projectDirectory.file("src/proto/FactorioServerLogRecord.proto"))
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceSets {
|
idea {
|
||||||
|
workspace {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
sourceSets.all {
|
||||||
|
languageSettings.apply {
|
||||||
|
languageVersion = "1.5"
|
||||||
|
// enableLanguageFeature("InlineClasses") // language feature name
|
||||||
|
optIn("kotlin.OptIn")
|
||||||
|
optIn("kotlin.ExperimentalStdlibApi")
|
||||||
|
optIn("kotlin.time.ExperimentalTime")
|
||||||
|
optIn("kotlinx.coroutines.ExperimentalCoroutinesApi")
|
||||||
|
// progressiveMode = true // false by default
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//<editor-fold desc="Protobuf">
|
||||||
|
sourceSets {
|
||||||
|
val proto by creating {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//</editor-fold>
|
||||||
|
|
||||||
|
//<editor-fold desc="Java">
|
||||||
|
jvm {
|
||||||
|
compilations.configureEach {
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = "11"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
val jvmMain by getting {
|
||||||
|
dependencies {
|
||||||
|
api("com.google.protobuf:protobuf-javalite:3.19.1")
|
||||||
|
api("com.google.protobuf:protobuf-kotlin-lite:3.19.1")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val jvmTest by getting {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//</editor-fold>
|
||||||
|
|
||||||
|
//<editor-fold desc="JS">
|
||||||
|
js(IR) {
|
||||||
|
binaries.executable()
|
||||||
|
browser {
|
||||||
|
commonWebpackConfig {
|
||||||
|
cssSupport.enabled = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
useCommonJs()
|
||||||
|
nodejs()
|
||||||
|
|
||||||
|
compilations["main"].apply {
|
||||||
|
packageJson {
|
||||||
|
customField(
|
||||||
|
"scripts",
|
||||||
|
mapOf(
|
||||||
|
"build" to "tstl",
|
||||||
|
"dev" to "tstl --watch",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
|
||||||
|
val jsMain by getting {
|
||||||
|
kotlin.srcDir("externals02")
|
||||||
|
// kotlin.srcDir("externals")
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
|
||||||
|
val kotlinWrappersVersion = "0.0.1-pre.254-kotlin-1.5.31"
|
||||||
|
implementation(
|
||||||
|
project.dependencies.enforcedPlatform(
|
||||||
|
"org.jetbrains.kotlin-wrappers:kotlin-wrappers-bom:${kotlinWrappersVersion}"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
// implementation("org.jetbrains.kotlin-wrappers:kotlin-react")
|
||||||
|
// implementation("org.jetbrains.kotlin-wrappers:kotlin-react-dom")
|
||||||
|
// implementation(npm("react", "17.0.2"))
|
||||||
|
// implementation(npm("react-dom", "17.0.2"))
|
||||||
|
|
||||||
|
// implementation("org.jetbrains.kotlinx:kotlinx-nodejs:0.0.7") {
|
||||||
|
// because("https://github.com/Kotlin/kotlinx-nodejs")
|
||||||
|
// }
|
||||||
|
|
||||||
|
// implementation(npm("typescript-to-lua", "1.0.1"))
|
||||||
|
// implementation(npm("typed-factorio", "0.7.1"))
|
||||||
|
// implementation(npm("lua-types", "2.11.0"))
|
||||||
|
// implementation(npm("typescript", "4.4.3"))
|
||||||
|
|
||||||
|
|
||||||
|
implementation(npm("ts-proto", "1.83.3"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val jsTest by getting {
|
||||||
|
dependencies {
|
||||||
|
implementation(kotlin("test-js"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//</editor-fold>
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue