Files
phoebench/common/build.gradle.kts
T

81 lines
2.4 KiB
Kotlin

@file:OptIn(ExperimentalWasmDsl::class)
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.serialization)
}
val partialsDirectory = layout.buildDirectory.dir("generated/sources/partials")
val versionDirectory = layout.buildDirectory.dir("generated/sources/version")
val requestsDirectory = layout.projectDirectory.dir("src/commonMain/kotlin/com/jaytux/phoebench/common/")
val generatePartials = tasks.register<Exec>("generatePartials") {
group = "generation"
description = "Generate Partial classes (requests with all-nullable fields)"
val scriptFile = project.file("partialize.main.kts")
val targets = fileTree(requestsDirectory) {
include("**/*.kt")
}
val lst = targets.map { it.absolutePath }
inputs.file(scriptFile)
inputs.files(targets)
outputs.dir(partialsDirectory)
executable = "kotlin"
doFirst {
args(scriptFile.absolutePath, partialsDirectory.get().asFile.absolutePath, *lst.toTypedArray())
}
}
val generateVersion = tasks.register<Task>("protocolVersion") {
doFirst {
val outFile = versionDirectory.get().file("com/jaytux/phoebench/common/Version.kt").asFile
outFile.parentFile.mkdirs()
outFile.writeText("""
package com.jaytux.phoebench.common
object ProtocolVersion {
const val VERSION="${rootProject.version}"
}
""".trimIndent())
}
}
kotlin {
jvm("desktop")
wasmJs {
browser()
}
sourceSets {
val commonMain by getting {
kotlin {
srcDir(generatePartials)
srcDir(versionDirectory)
}
dependencies {
implementation(libs.ktor.client.core)
implementation(libs.ktor.client.auth)
implementation(libs.kotlinx.datetime)
implementation(libs.kotlinx.serialization)
implementation(libs.kotlinx.serialization.json)
}
}
}
targets.all {
compilations.all {
compileTaskProvider.configure {
dependsOn(generatePartials)
dependsOn(generateVersion)
}
}
}
compilerOptions {
freeCompilerArgs.add("-Xcontext-parameters")
optIn.add("kotlin.uuid.ExperimentalUuidApi")
}
}