jvm+kt+ts code gen working
This commit is contained in:
parent
ac8428f36d
commit
96d8ceda2c
4 changed files with 108 additions and 138 deletions
|
|
@ -24,6 +24,11 @@ dependencies {
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType<KotlinCompile>().configureEach {
|
tasks.withType<KotlinCompile>().configureEach {
|
||||||
|
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = "11"
|
||||||
|
}
|
||||||
|
|
||||||
kotlinOptions.freeCompilerArgs += listOf(
|
kotlinOptions.freeCompilerArgs += listOf(
|
||||||
"-Xopt-in=kotlin.OptIn",
|
"-Xopt-in=kotlin.OptIn",
|
||||||
"-Xopt-in=kotlin.ExperimentalStdlibApi",
|
"-Xopt-in=kotlin.ExperimentalStdlibApi",
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ class KotlinMultiplatformProjectConfiguration : Plugin<Project> {
|
||||||
|
|
||||||
override fun apply(project: Project) {
|
override fun apply(project: Project) {
|
||||||
project.afterEvaluate {
|
project.afterEvaluate {
|
||||||
addSourceSets(this)
|
addSourceSets(project)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -19,10 +19,6 @@ class KotlinMultiplatformProjectConfiguration : Plugin<Project> {
|
||||||
project.extensions.findByType<KotlinMultiplatformExtension>()?.apply {
|
project.extensions.findByType<KotlinMultiplatformExtension>()?.apply {
|
||||||
project.logger.lifecycle("Kotlin Multiplatform source sets: ${sourceSets.joinToString { "${it.name} / ${it.kotlin.sourceDirectories.files.joinToString()}" }}")
|
project.logger.lifecycle("Kotlin Multiplatform source sets: ${sourceSets.joinToString { "${it.name} / ${it.kotlin.sourceDirectories.files.joinToString()}" }}")
|
||||||
|
|
||||||
// sourceSets.whenObjectAdded {
|
|
||||||
// this.name
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
val jvmProto = this.sourceSets.maybeCreate("jvmProto").apply {
|
val jvmProto = this.sourceSets.maybeCreate("jvmProto").apply {
|
||||||
|
|
||||||
kotlin.srcDir(project.layout.pbAndGBuildDir.get().dir("generated-sources/java"))
|
kotlin.srcDir(project.layout.pbAndGBuildDir.get().dir("generated-sources/java"))
|
||||||
|
|
@ -55,7 +51,7 @@ class KotlinMultiplatformProjectConfiguration : Plugin<Project> {
|
||||||
//
|
//
|
||||||
// targets .forEach {
|
// targets .forEach {
|
||||||
// when (it.platformType){
|
// when (it.platformType){
|
||||||
// KotlinPlatformType.jvm -> TODO()
|
// KotlinPlatformType.jvm -> {}
|
||||||
// KotlinPlatformType.js -> {
|
// KotlinPlatformType.js -> {
|
||||||
// it.defaultConfigurationName
|
// it.defaultConfigurationName
|
||||||
// }
|
// }
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
package dev.adamko.gradle.pbandg
|
package dev.adamko.gradle.pbandg
|
||||||
|
|
||||||
import dev.adamko.gradle.pbandg.Constants.pbAndGBuildDir
|
import dev.adamko.gradle.pbandg.Constants.pbAndGBuildDir
|
||||||
import dev.adamko.gradle.pbandg.pattern.KotlinJvmProjectConfiguration
|
|
||||||
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
|
||||||
|
|
@ -19,21 +17,21 @@ plugins {
|
||||||
// IntelliJPattern().apply(project)
|
// IntelliJPattern().apply(project)
|
||||||
//}
|
//}
|
||||||
|
|
||||||
plugins.withId("org.jetbrains.kotlin.jvm") {
|
//plugins.withId("org.jetbrains.kotlin.jvm") {
|
||||||
logger.info("Configuring Kotlin JVM plugin for PB&G")
|
// logger.info("Configuring Kotlin JVM plugin for PB&G")
|
||||||
KotlinJvmProjectConfiguration().apply(project)
|
// KotlinJvmProjectConfiguration().apply(project)
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
plugins.withId("org.jetbrains.kotlin.multiplatform") {
|
//plugins.withId("org.jetbrains.kotlin.multiplatform") {
|
||||||
logger.info("Configuring Kotlin Multiplatform plugin for PB&G")
|
// logger.info("Configuring Kotlin Multiplatform plugin for PB&G")
|
||||||
KotlinMultiplatformProjectConfiguration().apply(project)
|
// KotlinMultiplatformProjectConfiguration().apply(project)
|
||||||
}
|
//}
|
||||||
|
|
||||||
val pbAndGSettings =
|
val pbAndGSettings =
|
||||||
project.extensions.create(Constants.PBG_SETTINGS_NAME, PBAndGSettings::class, project)
|
project.extensions.create(Constants.PBG_SETTINGS_NAME, PBAndGSettings::class, project)
|
||||||
|
|
||||||
//val protocDep = ProtobufCompilerDependency(project, pbAndGSettings)
|
//val protocDep = ProtobufCompilerDependency(project, pbAndGSettings)
|
||||||
val protocDep = project.configurations.create("protobufCompiler") {
|
val protocDep: Configuration = project.configurations.create("protobufCompiler") {
|
||||||
this.description = "Define a single dependency that provides the protoc.exe for this system"
|
this.description = "Define a single dependency that provides the protoc.exe for this system"
|
||||||
isVisible = false
|
isVisible = false
|
||||||
isCanBeConsumed = false
|
isCanBeConsumed = false
|
||||||
|
|
@ -53,14 +51,10 @@ val protobufLibraryDependencies: Configuration =
|
||||||
isTransitive = false
|
isTransitive = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
project.dependencies {
|
project.dependencies {
|
||||||
protobufLibraryDependencies("com.google.protobuf:protobuf-javalite:3.19.1")
|
protobufLibraryDependencies("com.google.protobuf:protobuf-javalite:3.19.1") {
|
||||||
// implementation("com.google.protobuf:protobuf-javalite:3.19.1")
|
because("This dep contains common Google .proto files that will be extracted")
|
||||||
// implementation("com.google.protobuf:protobuf-kotlin-lite:3.19.1")
|
}
|
||||||
// protobufLibraryDependencies("com.google.protobuf:protobuf-javalite:3.19.1")
|
|
||||||
//// implementation("com.google.protobuf:protobuf-javalite:3.19.1")
|
|
||||||
//// implementation("com.google.protobuf:protobuf-kotlin-lite:3.19.1")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val protobufPrepareLibrariesTask =
|
val protobufPrepareLibrariesTask =
|
||||||
|
|
@ -73,7 +67,7 @@ project.tasks.withType<ProtobufCompileTask> {
|
||||||
protobufLibraryDirectories.add(protobufPrepareLibrariesTask.flatMap { it.librariesDirectory })
|
protobufLibraryDirectories.add(protobufPrepareLibrariesTask.flatMap { it.librariesDirectory })
|
||||||
|
|
||||||
val exe = protocDep.singleFile
|
val exe = protocDep.singleFile
|
||||||
logger.lifecycle("protoc.exe: $exe")
|
logger.debug("Configuring Protobuf task with protoc.exe: $exe")
|
||||||
protocExecutable.set(exe)
|
protocExecutable.set(exe)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -84,18 +78,11 @@ val aggregateTask = project.tasks.register<Sync>("protobufCompileAll") {
|
||||||
|
|
||||||
val genSrcDir = project.layout.pbAndGBuildDir.map { it.dir("generated-sources") }
|
val genSrcDir = project.layout.pbAndGBuildDir.map { it.dir("generated-sources") }
|
||||||
|
|
||||||
val pbCompileTasks = tasks.withType<ProtobufCompileTask>()
|
val pbCompileTasks = tasks.withType<ProtobufCompileTask>()
|
||||||
from(pbCompileTasks.map { it.temporaryDir })
|
from(pbCompileTasks.map { it.temporaryDir })
|
||||||
into(genSrcDir)
|
into(genSrcDir)
|
||||||
includeEmptyDirs = false
|
includeEmptyDirs = false
|
||||||
|
|
||||||
}
|
}
|
||||||
//project.tasks.assemble { dependsOn(aggregateTask) }
|
|
||||||
|
|
||||||
|
|
||||||
///** Convert `.proto` files to Kotlin */
|
|
||||||
//val pbCompileTask = project.tasks.create<ProtobufCompileTask>("protobufJava") {
|
|
||||||
// protocOutputs += KotlinOutput()
|
|
||||||
// protocOutputs += JavaOutput()
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
project.tasks.assemble { dependsOn(aggregateTask) }
|
||||||
|
|
|
||||||
|
|
@ -1,46 +1,18 @@
|
||||||
import dev.adamko.gradle.pbandg.task.ProtobufCompileTask
|
import dev.adamko.gradle.pbandg.task.ProtobufCompileTask
|
||||||
//import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject
|
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject
|
||||||
//import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.RootPackageJsonTask
|
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.RootPackageJsonTask
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("dev.adamko.factoriowebmap.archetype.base")
|
id("dev.adamko.factoriowebmap.archetype.base")
|
||||||
kotlin("multiplatform")
|
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")
|
||||||
}
|
}
|
||||||
|
|
||||||
val projectId: String by project.extra
|
val projectId: String by project.extra
|
||||||
val buildDir: Directory = layout.buildDirectory.dir(projectId).get()
|
val buildDir: Directory = layout.buildDirectory.dir(projectId).get()
|
||||||
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
protobufLibrary("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")
|
|
||||||
}
|
|
||||||
|
|
||||||
kotlin {
|
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")
|
|
||||||
// optIn("kotlin.js.ExperimentalJsExport")
|
|
||||||
//// progressiveMode = true // false by default
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
//<editor-fold desc="Protobuf">
|
|
||||||
// sourceSets {
|
|
||||||
// val proto by creating {
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//</editor-fold>
|
|
||||||
|
|
||||||
//<editor-fold desc="Java">
|
//<editor-fold desc="Java">
|
||||||
jvm {
|
jvm {
|
||||||
|
|
@ -51,21 +23,6 @@ kotlin {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//</editor-fold>
|
|
||||||
|
|
||||||
//<editor-fold desc="JS">
|
|
||||||
// js(IR) {
|
|
||||||
// binaries.executable()
|
|
||||||
//// browser {
|
|
||||||
////// commonWebpackConfig {
|
|
||||||
////// cssSupport.enabled = true
|
|
||||||
////// }
|
|
||||||
//// }
|
|
||||||
//
|
|
||||||
// useCommonJs()
|
|
||||||
// nodejs()
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
val jvmMain by getting {
|
val jvmMain by getting {
|
||||||
|
|
@ -76,76 +33,101 @@ kotlin {
|
||||||
}
|
}
|
||||||
val jvmTest by getting {
|
val jvmTest by getting {
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// val jsMain by getting {
|
//</editor-fold>
|
||||||
// dependencies {
|
|
||||||
// implementation(npm("ts-proto", "1.83.3"))
|
//<editor-fold desc="JS">
|
||||||
// }
|
js(IR) {
|
||||||
// }
|
browser()
|
||||||
//
|
}
|
||||||
// val jsTest by getting {
|
|
||||||
// dependencies {
|
sourceSets {
|
||||||
// implementation(kotlin("test-js"))
|
val jsMain by getting {
|
||||||
// }
|
dependencies {
|
||||||
// }
|
implementation(npm("ts-proto", "1.83.3"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val jsTest by getting {
|
||||||
|
dependencies {
|
||||||
|
implementation(kotlin("test-js"))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//</editor-fold>
|
//</editor-fold>
|
||||||
|
|
||||||
|
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")
|
||||||
|
optIn("kotlin.js.ExperimentalJsExport")
|
||||||
|
// progressiveMode = true // false by default
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//rootProject.tasks.withType<RootPackageJsonTask>().configureEach {
|
dependencies {
|
||||||
//}
|
protobufLibrary("com.google.protobuf:protobuf-javalite:3.19.1")
|
||||||
|
|
||||||
//val rootPackageJson by rootProject.tasks.getting(RootPackageJsonTask::class)
|
|
||||||
//val nodePath: Directory by extra {
|
|
||||||
// val file = rootPackageJson.rootPackageJson.parentFile.normalize()
|
|
||||||
// logger.lifecycle("Kotlin/JS NODE_PATH: $file")
|
|
||||||
// project.layout.dir(provider { file }).get()
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//val nodeModulesDir: Directory by extra {
|
|
||||||
// val file = nodePath.dir(NpmProject.NODE_MODULES)
|
|
||||||
// logger.lifecycle("Kotlin/JS NODE_MODULES: $file")
|
|
||||||
// file
|
|
||||||
//}
|
|
||||||
|
|
||||||
// build/js/node_modules/ts-proto/node_modules/.bin
|
|
||||||
//
|
|
||||||
tasks.register<ProtobufCompileTask>("protobufJava") {
|
|
||||||
description = "proto2java"
|
|
||||||
protoFile.set(file("$projectDir/src/proto/FactorioServerLogRecord.proto"))
|
|
||||||
|
|
||||||
cliArgs.add("--java_out=lite:${project.mkdir("$temporaryDir/java").canonicalPath}")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.create<ProtobufCompileTask>("protobufKotlin") {
|
|
||||||
description = "proto2kotlin"
|
|
||||||
protoFile.set(file("$projectDir/src/proto/FactorioServerLogRecord.proto"))
|
|
||||||
|
|
||||||
cliArgs.add("--kotlin_out=lite:${project.mkdir("$temporaryDir/kotlin").canonicalPath}")
|
val rootPackageJson by rootProject.tasks.getting(RootPackageJsonTask::class)
|
||||||
|
val nodePath: Directory by extra {
|
||||||
|
val file = rootPackageJson.rootPackageJson.parentFile.normalize()
|
||||||
|
logger.lifecycle("Kotlin/JS NODE_PATH: $file")
|
||||||
|
project.layout.dir(provider { file }).get()
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.create<ProtobufCompileTask>("protobufTypescript") {
|
val nodeModulesDir: Directory by extra {
|
||||||
description = "proto2typescript"
|
val file = nodePath.dir(NpmProject.NODE_MODULES)
|
||||||
|
logger.lifecycle("Kotlin/JS NODE_MODULES: $file")
|
||||||
|
file
|
||||||
|
}
|
||||||
|
|
||||||
// linux:
|
afterEvaluate {
|
||||||
|
tasks.register<ProtobufCompileTask>("protobufJava") {
|
||||||
|
description = "proto2java"
|
||||||
|
protoFile.set(file("$projectDir/src/proto/FactorioServerLogRecord.proto"))
|
||||||
|
|
||||||
|
cliArgs.add("--java_out=lite:${project.mkdir("$temporaryDir/java").canonicalPath}")
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.register<ProtobufCompileTask>("protobufKotlin") {
|
||||||
|
description = "proto2kotlin"
|
||||||
|
protoFile.set(file("$projectDir/src/proto/FactorioServerLogRecord.proto"))
|
||||||
|
|
||||||
|
cliArgs.add("--kotlin_out=lite:${project.mkdir("$temporaryDir/kotlin").canonicalPath}")
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.register<ProtobufCompileTask>("protobufTypescript") {
|
||||||
|
description = "proto2typescript"
|
||||||
|
|
||||||
|
this.taskDependencies
|
||||||
|
|
||||||
|
// linux:
|
||||||
// cliArgs.add("--plugin=${rootProject.buildDir}/js/packages/factorio-web-map-factorio-events-data-model/node_modules/.bin/protoc-gen-ts_proto.cmd")
|
// cliArgs.add("--plugin=${rootProject.buildDir}/js/packages/factorio-web-map-factorio-events-data-model/node_modules/.bin/protoc-gen-ts_proto.cmd")
|
||||||
// windows:
|
// windows:
|
||||||
cliArgs.add("--plugin=protoc-gen-ts_proto=${rootProject.buildDir}/js/packages/factorio-web-map-factorio-events-data-model/node_modules/.bin/protoc-gen-ts_proto.cmd")
|
cliArgs.add("--plugin=protoc-gen-ts_proto=${rootProject.buildDir}/js/packages/factorio-web-map-factorio-events-data-model/node_modules/.bin/protoc-gen-ts_proto.cmd")
|
||||||
|
|
||||||
cliArgs.add("--ts_proto_out=${project.mkdir("$temporaryDir/typescript").canonicalPath}")
|
cliArgs.add("--ts_proto_out=${project.mkdir("$temporaryDir/typescript").canonicalPath}")
|
||||||
|
|
||||||
cliArgs.addAll(
|
cliArgs.addAll(
|
||||||
"--ts_proto_opt=useOptionals=true",
|
"--ts_proto_opt=useOptionals=true",
|
||||||
"--ts_proto_opt=outputServices=false",
|
"--ts_proto_opt=outputServices=false",
|
||||||
"--ts_proto_opt=outputJsonMethods=false",
|
"--ts_proto_opt=outputJsonMethods=false",
|
||||||
"--ts_proto_opt=outputEncodeMethods=false",
|
"--ts_proto_opt=outputEncodeMethods=false",
|
||||||
"--ts_proto_opt=forceLong=string",
|
"--ts_proto_opt=forceLong=string",
|
||||||
"--ts_proto_opt=forceLong=number",
|
"--ts_proto_opt=forceLong=number",
|
||||||
"--ts_proto_opt=esModuleInterop=true",
|
"--ts_proto_opt=esModuleInterop=true",
|
||||||
"--ts_proto_opt=exportCommonSymbols=false",
|
"--ts_proto_opt=exportCommonSymbols=false",
|
||||||
// "--proto_path=${rootProject.rootDir}",
|
// "--proto_path=${rootProject.rootDir}",
|
||||||
)
|
)
|
||||||
|
|
||||||
protoFile.set(file("$projectDir/src/proto/FactorioServerLogRecord.proto"))
|
protoFile.set(file("$projectDir/src/proto/FactorioServerLogRecord.proto"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue