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 {
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = "11"
|
||||
}
|
||||
|
||||
kotlinOptions.freeCompilerArgs += listOf(
|
||||
"-Xopt-in=kotlin.OptIn",
|
||||
"-Xopt-in=kotlin.ExperimentalStdlibApi",
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ class KotlinMultiplatformProjectConfiguration : Plugin<Project> {
|
|||
|
||||
override fun apply(project: Project) {
|
||||
project.afterEvaluate {
|
||||
addSourceSets(this)
|
||||
addSourceSets(project)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -19,10 +19,6 @@ class KotlinMultiplatformProjectConfiguration : Plugin<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 jvmProto = this.sourceSets.maybeCreate("jvmProto").apply {
|
||||
|
||||
kotlin.srcDir(project.layout.pbAndGBuildDir.get().dir("generated-sources/java"))
|
||||
|
|
@ -55,7 +51,7 @@ class KotlinMultiplatformProjectConfiguration : Plugin<Project> {
|
|||
//
|
||||
// targets .forEach {
|
||||
// when (it.platformType){
|
||||
// KotlinPlatformType.jvm -> TODO()
|
||||
// KotlinPlatformType.jvm -> {}
|
||||
// KotlinPlatformType.js -> {
|
||||
// it.defaultConfigurationName
|
||||
// }
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
package dev.adamko.gradle.pbandg
|
||||
|
||||
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.task.ProtobufCompileTask
|
||||
import dev.adamko.gradle.pbandg.task.ProtobufPrepareLibrariesTask
|
||||
|
|
@ -19,21 +17,21 @@ plugins {
|
|||
// IntelliJPattern().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)
|
||||
}
|
||||
//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 =
|
||||
project.extensions.create(Constants.PBG_SETTINGS_NAME, PBAndGSettings::class, project)
|
||||
|
||||
//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"
|
||||
isVisible = false
|
||||
isCanBeConsumed = false
|
||||
|
|
@ -53,14 +51,10 @@ val protobufLibraryDependencies: Configuration =
|
|||
isTransitive = false
|
||||
}
|
||||
|
||||
|
||||
project.dependencies {
|
||||
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")
|
||||
// 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")
|
||||
protobufLibraryDependencies("com.google.protobuf:protobuf-javalite:3.19.1") {
|
||||
because("This dep contains common Google .proto files that will be extracted")
|
||||
}
|
||||
}
|
||||
|
||||
val protobufPrepareLibrariesTask =
|
||||
|
|
@ -73,7 +67,7 @@ project.tasks.withType<ProtobufCompileTask> {
|
|||
protobufLibraryDirectories.add(protobufPrepareLibrariesTask.flatMap { it.librariesDirectory })
|
||||
|
||||
val exe = protocDep.singleFile
|
||||
logger.lifecycle("protoc.exe: $exe")
|
||||
logger.debug("Configuring Protobuf task with protoc.exe: $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 pbCompileTasks = tasks.withType<ProtobufCompileTask>()
|
||||
from(pbCompileTasks.map { it.temporaryDir })
|
||||
into(genSrcDir)
|
||||
includeEmptyDirs = false
|
||||
val pbCompileTasks = tasks.withType<ProtobufCompileTask>()
|
||||
from(pbCompileTasks.map { it.temporaryDir })
|
||||
into(genSrcDir)
|
||||
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 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.NpmProject
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.RootPackageJsonTask
|
||||
|
||||
plugins {
|
||||
id("dev.adamko.factoriowebmap.archetype.base")
|
||||
kotlin("multiplatform")
|
||||
|
||||
// id("dev.adamko.factoriowebmap.archetype.kotlin-jvm")
|
||||
id("dev.adamko.gradle.pbandg.pb-and-g")
|
||||
}
|
||||
|
||||
val projectId: String by project.extra
|
||||
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 {
|
||||
// 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">
|
||||
jvm {
|
||||
|
|
@ -51,21 +23,6 @@ kotlin {
|
|||
}
|
||||
}
|
||||
|
||||
//</editor-fold>
|
||||
|
||||
//<editor-fold desc="JS">
|
||||
// js(IR) {
|
||||
// binaries.executable()
|
||||
//// browser {
|
||||
////// commonWebpackConfig {
|
||||
////// cssSupport.enabled = true
|
||||
////// }
|
||||
//// }
|
||||
//
|
||||
// useCommonJs()
|
||||
// nodejs()
|
||||
//
|
||||
// }
|
||||
|
||||
sourceSets {
|
||||
val jvmMain by getting {
|
||||
|
|
@ -76,76 +33,101 @@ kotlin {
|
|||
}
|
||||
val jvmTest by getting {
|
||||
}
|
||||
}
|
||||
|
||||
// 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 desc="JS">
|
||||
js(IR) {
|
||||
browser()
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
val jsMain by getting {
|
||||
dependencies {
|
||||
implementation(npm("ts-proto", "1.83.3"))
|
||||
}
|
||||
}
|
||||
|
||||
val jsTest by getting {
|
||||
dependencies {
|
||||
implementation(kotlin("test-js"))
|
||||
}
|
||||
}
|
||||
}
|
||||
//</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 {
|
||||
//}
|
||||
|
||||
//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}")
|
||||
dependencies {
|
||||
protobufLibrary("com.google.protobuf:protobuf-javalite:3.19.1")
|
||||
}
|
||||
|
||||
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") {
|
||||
description = "proto2typescript"
|
||||
val nodeModulesDir: Directory by extra {
|
||||
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")
|
||||
// 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")
|
||||
// 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("--ts_proto_out=${project.mkdir("$temporaryDir/typescript").canonicalPath}")
|
||||
cliArgs.add("--ts_proto_out=${project.mkdir("$temporaryDir/typescript").canonicalPath}")
|
||||
|
||||
cliArgs.addAll(
|
||||
"--ts_proto_opt=useOptionals=true",
|
||||
"--ts_proto_opt=outputServices=false",
|
||||
"--ts_proto_opt=outputJsonMethods=false",
|
||||
"--ts_proto_opt=outputEncodeMethods=false",
|
||||
"--ts_proto_opt=forceLong=string",
|
||||
"--ts_proto_opt=forceLong=number",
|
||||
"--ts_proto_opt=esModuleInterop=true",
|
||||
"--ts_proto_opt=exportCommonSymbols=false",
|
||||
cliArgs.addAll(
|
||||
"--ts_proto_opt=useOptionals=true",
|
||||
"--ts_proto_opt=outputServices=false",
|
||||
"--ts_proto_opt=outputJsonMethods=false",
|
||||
"--ts_proto_opt=outputEncodeMethods=false",
|
||||
"--ts_proto_opt=forceLong=string",
|
||||
"--ts_proto_opt=forceLong=number",
|
||||
"--ts_proto_opt=esModuleInterop=true",
|
||||
"--ts_proto_opt=exportCommonSymbols=false",
|
||||
// "--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