feat: refactor build and flesh out Gradle plugin
This commit is contained in:
parent
1663cc6b22
commit
084387dfda
|
@ -46,3 +46,6 @@ bin/
|
|||
|
||||
### Mac OS ###
|
||||
.DS_Store
|
||||
|
||||
### Android Studio ###
|
||||
local.properties
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
package $basePackage
|
||||
|
||||
internal object ArtifactInfo {
|
||||
const val GROUP = "$publishGroup"
|
||||
const val VERSION = "$publishVersion"
|
||||
|
||||
const val COMPILER_PLUGIN_ARTIFACT = "compiler-plugin"
|
||||
const val GRADLE_PLUGIN_ARTIFACT = "gradle-plugin"
|
||||
const val RUNTIME_ARTIFACT = "runtime"
|
||||
|
||||
const val DEFAULT_TRACELOG_ENABLED = true
|
||||
const val DEFAULT_TRACELOG_ANNOTATION = "dev/msfjarvis/tracelog/runtime/annotations/DebugLog"
|
||||
}
|
|
@ -1,6 +1,18 @@
|
|||
plugins { `kotlin-dsl` }
|
||||
|
||||
dependencies {
|
||||
implementation(libs.android.gradle.plugin)
|
||||
implementation(libs.kotlin.gradlePlugin)
|
||||
dependencies { implementation(libs.kotlin.gradlePlugin.api) }
|
||||
|
||||
kotlin.jvmToolchain(11)
|
||||
|
||||
gradlePlugin {
|
||||
plugins {
|
||||
create("build") {
|
||||
id = "dev.msfjarvis.tracelog.build"
|
||||
implementationClass = "dev.msfjarvis.tracelog.build.TraceLogBuildPlugin"
|
||||
}
|
||||
create("settings") {
|
||||
id = "dev.msfjarvis.tracelog.settings"
|
||||
implementationClass = "dev.msfjarvis.tracelog.build.TraceLogSettingsPlugin"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,6 +39,6 @@ dependencyResolutionManagement {
|
|||
versionCatalogs { maybeCreate("libs").apply { from(files("../gradle/libs.versions.toml")) } }
|
||||
}
|
||||
|
||||
rootProject.name = "buildSrc"
|
||||
rootProject.name = "build-logic"
|
||||
|
||||
enableFeaturePreview("STABLE_CONFIGURATION_CACHE")
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
package dev.msfjarvis.tracelog.build
|
||||
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.tasks.Copy
|
||||
|
||||
class ArtifactInfoCopyAction(
|
||||
private val project: Project,
|
||||
private val basePackage: String,
|
||||
) : Action<Copy> {
|
||||
|
||||
override fun execute(t: Copy) {
|
||||
t.expand(
|
||||
mapOf(
|
||||
"basePackage" to basePackage,
|
||||
"publishGroup" to "${project.rootProject.findProperty("GROUP")}",
|
||||
"publishVersion" to "${project.rootProject.findProperty("VERSION_NAME")}",
|
||||
)
|
||||
)
|
||||
t.filteringCharset = "UTF-8"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
package dev.msfjarvis.tracelog.build
|
||||
|
||||
interface TraceLogBuildExtension {
|
||||
fun publishing()
|
||||
fun generateArtifactInfo(basePackage: String)
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
package dev.msfjarvis.tracelog.build
|
||||
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.plugins.AppliedPlugin
|
||||
import org.gradle.api.tasks.Copy
|
||||
import org.gradle.api.tasks.SourceSetContainer
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtensionConfig
|
||||
|
||||
class TraceLogBuildExtensionImpl(
|
||||
private val project: Project,
|
||||
) : TraceLogBuildExtension {
|
||||
override fun publishing() {
|
||||
project.pluginManager.apply("com.vanniktech.maven.publish")
|
||||
project.pluginManager.apply("org.jetbrains.dokka")
|
||||
project.pluginManager.apply("org.jetbrains.kotlinx.binary-compatibility-validator")
|
||||
|
||||
// Published modules should be explicit about their API visibility.
|
||||
val kotlinPluginHandler = Action<AppliedPlugin> {
|
||||
val kotlin = project.extensions.getByType(
|
||||
KotlinTopLevelExtensionConfig::class.java
|
||||
)
|
||||
kotlin.explicitApi()
|
||||
}
|
||||
project.pluginManager.withPlugin("org.jetbrains.kotlin.jvm", kotlinPluginHandler)
|
||||
project.pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform", kotlinPluginHandler)
|
||||
}
|
||||
|
||||
override fun generateArtifactInfo(basePackage: String) {
|
||||
val generateArtifactInfoProvider = project.tasks.register(
|
||||
"generateArtifactInfo",
|
||||
Copy::class.java,
|
||||
ArtifactInfoCopyAction(project, basePackage),
|
||||
)
|
||||
generateArtifactInfoProvider.configure {
|
||||
from(project.rootProject.layout.projectDirectory.dir("artifact-info-template"))
|
||||
into(project.layout.buildDirectory.dir("generated/source/artifact-info-template/main"))
|
||||
}
|
||||
project.extensions.configure<SourceSetContainer>("sourceSets") {
|
||||
getByName("main").java.srcDir(generateArtifactInfoProvider)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
package dev.msfjarvis.tracelog.build
|
||||
|
||||
import org.gradle.api.Plugin
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.kotlin.dsl.withType
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
|
||||
|
||||
class TraceLogBuildPlugin : Plugin<Project> {
|
||||
override fun apply(target: Project) {
|
||||
target.extensions.add(
|
||||
TraceLogBuildExtension::class.java,
|
||||
"traceLogBuild",
|
||||
TraceLogBuildExtensionImpl(target)
|
||||
)
|
||||
|
||||
commonKotlinConfiguration(target)
|
||||
}
|
||||
|
||||
private fun commonKotlinConfiguration(project: Project) {
|
||||
project.tasks.withType<KotlinCompile<*>>().configureEach {
|
||||
kotlinOptions.freeCompilerArgs += "-progressive"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
package dev.msfjarvis.tracelog.build
|
||||
|
||||
import org.gradle.api.Plugin
|
||||
import org.gradle.api.initialization.Settings
|
||||
|
||||
class TraceLogSettingsPlugin : Plugin<Settings> {
|
||||
override fun apply(target: Settings) {
|
||||
target.gradle.allprojects {
|
||||
pluginManager.apply("dev.msfjarvis.tracelog.build")
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
plugins { `maven-publish` }
|
||||
|
||||
group = "dev.msfjarvis.tracelog"
|
||||
|
||||
version = "1.0.0-SNAPSHOT"
|
|
@ -1,9 +0,0 @@
|
|||
plugins {
|
||||
id("org.jetbrains.kotlin.jvm")
|
||||
id("tracelog-common")
|
||||
}
|
||||
|
||||
kotlin {
|
||||
jvmToolchain(11)
|
||||
explicitApi()
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
plugins {
|
||||
id("org.jetbrains.kotlin.multiplatform")
|
||||
id("com.android.library")
|
||||
id("tracelog-common")
|
||||
}
|
||||
|
||||
kotlin {
|
||||
jvmToolchain(11)
|
||||
explicitApi()
|
||||
jvm()
|
||||
androidTarget()
|
||||
iosX64()
|
||||
iosArm64()
|
||||
tvosX64()
|
||||
tvosArm64()
|
||||
watchosX64()
|
||||
watchosArm32()
|
||||
watchosArm64()
|
||||
macosX64()
|
||||
macosArm64()
|
||||
iosSimulatorArm64()
|
||||
watchosSimulatorArm64()
|
||||
tvosSimulatorArm64()
|
||||
mingwX64()
|
||||
linuxX64()
|
||||
androidNativeArm32()
|
||||
androidNativeArm64()
|
||||
}
|
|
@ -1,13 +1,17 @@
|
|||
plugins {
|
||||
alias(libs.plugins.spotless)
|
||||
id("tracelog-jvm-library") apply false
|
||||
id("tracelog-kmp-library") apply false
|
||||
alias(libs.plugins.android.library) apply false
|
||||
alias(libs.plugins.dokka) apply false
|
||||
alias(libs.plugins.kotlinx.binaryCompatibilityValidator) apply false
|
||||
alias(libs.plugins.kotlin.jvm) apply false
|
||||
alias(libs.plugins.kotlin.multiplatform) apply false
|
||||
alias(libs.plugins.mavenPublish) apply false
|
||||
}
|
||||
|
||||
spotless {
|
||||
kotlin {
|
||||
target("**/*.kt")
|
||||
targetExclude("**/build/")
|
||||
targetExclude("**/build/", "**/artifact-info-template/*")
|
||||
ktfmt().googleStyle()
|
||||
}
|
||||
kotlinGradle {
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
public final class dev/msfjarvis/tracelog/compiler/plugin/DebugLogTransformer : org/jetbrains/kotlin/backend/common/IrElementTransformerVoidWithContext {
|
||||
public fun <init> (Lorg/jetbrains/kotlin/backend/common/extensions/IrPluginContext;Lorg/jetbrains/kotlin/ir/symbols/IrClassSymbol;Lorg/jetbrains/kotlin/ir/symbols/IrSimpleFunctionSymbol;)V
|
||||
public fun visitFunctionNew (Lorg/jetbrains/kotlin/ir/declarations/IrFunction;)Lorg/jetbrains/kotlin/ir/IrStatement;
|
||||
}
|
||||
|
||||
public final class dev/msfjarvis/tracelog/compiler/plugin/TracingCommandLineProcessor : org/jetbrains/kotlin/compiler/plugin/CommandLineProcessor {
|
||||
public fun <init> ()V
|
||||
public fun getPluginId ()Ljava/lang/String;
|
||||
public fun getPluginOptions ()Ljava/util/Collection;
|
||||
public fun processOption (Lorg/jetbrains/kotlin/compiler/plugin/AbstractCliOption;Ljava/lang/String;Lorg/jetbrains/kotlin/config/CompilerConfiguration;)V
|
||||
}
|
||||
|
||||
public final class dev/msfjarvis/tracelog/compiler/plugin/TracingCompilerPluginRegistrar : org/jetbrains/kotlin/compiler/plugin/CompilerPluginRegistrar {
|
||||
public fun <init> ()V
|
||||
public fun getSupportsK2 ()Z
|
||||
public fun registerExtensions (Lorg/jetbrains/kotlin/compiler/plugin/CompilerPluginRegistrar$ExtensionStorage;Lorg/jetbrains/kotlin/config/CompilerConfiguration;)V
|
||||
}
|
||||
|
||||
public final class dev/msfjarvis/tracelog/compiler/plugin/TracingIrGenerationExtension : org/jetbrains/kotlin/backend/common/extensions/IrGenerationExtension {
|
||||
public fun <init> (Lorg/jetbrains/kotlin/cli/common/messages/MessageCollector;Ljava/lang/String;Ljava/lang/String;)V
|
||||
public fun generate (Lorg/jetbrains/kotlin/ir/declarations/IrModuleFragment;Lorg/jetbrains/kotlin/backend/common/extensions/IrPluginContext;)V
|
||||
public fun resolveSymbol (Lorg/jetbrains/kotlin/ir/symbols/IrSymbol;Lorg/jetbrains/kotlin/ir/builders/TranslationPluginContext;)Lorg/jetbrains/kotlin/ir/declarations/IrDeclaration;
|
||||
}
|
||||
|
|
@ -1,17 +1,15 @@
|
|||
import org.gradle.api.tasks.testing.logging.TestLogEvent
|
||||
|
||||
plugins {
|
||||
id("tracelog-jvm-library")
|
||||
alias(libs.plugins.kotlin.jvm)
|
||||
alias(libs.plugins.ksp)
|
||||
alias(libs.plugins.buildconfig)
|
||||
}
|
||||
|
||||
buildConfig {
|
||||
packageName("${group}.compiler.plugin")
|
||||
useKotlinOutput { internalVisibility = true }
|
||||
buildConfigField("String", "KOTLIN_PLUGIN_GROUP", "\"${project.group}\"")
|
||||
buildConfigField("String", "KOTLIN_PLUGIN_NAME", "\"${project.name}\"")
|
||||
buildConfigField("String", "KOTLIN_PLUGIN_VERSION", "\"${project.version}\"")
|
||||
kotlin.jvmToolchain(11)
|
||||
|
||||
traceLogBuild {
|
||||
publishing()
|
||||
generateArtifactInfo("dev.msfjarvis.tracelog")
|
||||
}
|
||||
|
||||
tasks.test.configure {
|
||||
|
@ -20,7 +18,6 @@ tasks.test.configure {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation(platform(embeddedKotlin("bom")))
|
||||
compileOnly(libs.kotlin.compiler)
|
||||
ksp(libs.auto.ksp)
|
||||
compileOnly(libs.auto.annotations)
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
POM_ARTIFACT_ID=compiler-plugin
|
|
@ -1,6 +1,7 @@
|
|||
package dev.msfjarvis.tracelog.compiler.plugin
|
||||
|
||||
import com.google.auto.service.AutoService
|
||||
import dev.msfjarvis.tracelog.ArtifactInfo
|
||||
import org.jetbrains.kotlin.compiler.plugin.AbstractCliOption
|
||||
import org.jetbrains.kotlin.compiler.plugin.CliOption
|
||||
import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor
|
||||
|
@ -25,7 +26,7 @@ public class TracingCommandLineProcessor : CommandLineProcessor {
|
|||
val OPTION_ANNOTATION_NAME =
|
||||
CliOption(
|
||||
optionName = "debugAnnotation",
|
||||
valueDescription = "${BuildConfig.KOTLIN_PLUGIN_GROUP}.runtime.annotations.DebugLog",
|
||||
valueDescription = ArtifactInfo.DEFAULT_TRACELOG_ANNOTATION,
|
||||
description = ANNOTATION_NAME.toString(),
|
||||
required = true,
|
||||
allowMultipleOccurrences = false,
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
../artifact-info-template
|
|
@ -1,25 +1,43 @@
|
|||
@file:Suppress("UnstableApiUsage")
|
||||
|
||||
import java.util.Properties
|
||||
|
||||
plugins {
|
||||
id("tracelog-jvm-library")
|
||||
alias(libs.plugins.kotlin.jvm)
|
||||
`java-gradle-plugin`
|
||||
alias(libs.plugins.buildconfig)
|
||||
alias(libs.plugins.ksp)
|
||||
alias(libs.plugins.mavenPublish).apply(false)
|
||||
alias(libs.plugins.dokka).apply(false)
|
||||
alias(libs.plugins.kotlinx.binaryCompatibilityValidator).apply(false)
|
||||
}
|
||||
|
||||
buildConfig {
|
||||
packageName("${group}.gradle.plugin")
|
||||
useKotlinOutput { internalVisibility = true }
|
||||
buildConfigField("String", "KOTLIN_PLUGIN_GROUP", "\"${project.group}\"")
|
||||
buildConfigField("String", "KOTLIN_PLUGIN_NAME", "\"${project.name}\"")
|
||||
buildConfigField("String", "KOTLIN_PLUGIN_VERSION", "\"${project.version}\"")
|
||||
kotlin.jvmToolchain(11)
|
||||
|
||||
fun loadParentProperties() {
|
||||
val properties = Properties()
|
||||
file("../gradle.properties").inputStream().use { properties.load(it) }
|
||||
|
||||
properties.forEach { (k, v) ->
|
||||
val key = k.toString()
|
||||
val value = providers.gradleProperty(name).getOrElse(v.toString())
|
||||
extra.set(key, value)
|
||||
}
|
||||
}
|
||||
|
||||
loadParentProperties()
|
||||
|
||||
traceLogBuild {
|
||||
publishing()
|
||||
generateArtifactInfo("dev.msfjarvis.tracelog")
|
||||
}
|
||||
|
||||
gradlePlugin.plugins.register("dev.msfjarvis.tracelog") {
|
||||
id = group.toString()
|
||||
implementationClass = "$group.gradle.plugin.TraceLogGradlePlugin"
|
||||
id = properties["GROUP"].toString()
|
||||
implementationClass = "${properties["GROUP"]}.gradle.plugin.TraceLogGradlePlugin"
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(platform(embeddedKotlin("bom")))
|
||||
compileOnly(gradleKotlinDsl())
|
||||
compileOnly(libs.auto.annotations)
|
||||
compileOnly(libs.kotlin.gradlePlugin.api)
|
||||
compileOnly(libs.kotlin.stdlib)
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
POM_ARTIFACT_ID=gradle-plugin
|
||||
kotlin.stdlib.default.dependency=false
|
||||
|
|
|
@ -48,6 +48,8 @@ dependencyResolutionManagement {
|
|||
versionCatalogs { create("libs") { from(files("../gradle/libs.versions.toml")) } }
|
||||
}
|
||||
|
||||
plugins { id("dev.msfjarvis.tracelog.settings") }
|
||||
|
||||
rootProject.name = "TraceLog-Gradle-Plugin"
|
||||
|
||||
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
package dev.msfjarvis.tracelog.gradle.plugin
|
||||
|
||||
import org.gradle.api.provider.Property
|
||||
|
||||
public abstract class TraceLogExtension {
|
||||
|
||||
public abstract val annotationClass: Property<String>
|
||||
|
||||
public abstract val loggerFunction: Property<String>
|
||||
}
|
|
@ -1,31 +1,75 @@
|
|||
package dev.msfjarvis.tracelog.gradle.plugin
|
||||
|
||||
import com.google.auto.service.AutoService
|
||||
import dev.msfjarvis.tracelog.ArtifactInfo
|
||||
import org.gradle.api.Plugin
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.plugins.JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME
|
||||
import org.gradle.api.provider.Provider
|
||||
import org.gradle.kotlin.dsl.create
|
||||
import org.gradle.kotlin.dsl.getByType
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet.Companion.COMMON_MAIN_SOURCE_SET_NAME
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetContainer
|
||||
import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact
|
||||
import org.jetbrains.kotlin.gradle.plugin.SubpluginOption
|
||||
|
||||
@AutoService(Plugin::class)
|
||||
public class TraceLogGradlePlugin : KotlinCompilerPluginSupportPlugin {
|
||||
|
||||
override fun applyToCompilation(
|
||||
kotlinCompilation: KotlinCompilation<*>
|
||||
): Provider<List<SubpluginOption>> {
|
||||
return kotlinCompilation.target.project.provider {
|
||||
buildList { add(SubpluginOption(key = "loggerFunction", value = "kotlin.io.println")) }
|
||||
override fun apply(target: Project) {
|
||||
val extension = target.extensions.create<TraceLogExtension>("traceLog")
|
||||
extension.loggerFunction.convention("kotlin.io.println")
|
||||
extension.annotationClass.convention(ArtifactInfo.DEFAULT_TRACELOG_ANNOTATION)
|
||||
|
||||
target.afterEvaluate {
|
||||
val useLocal =
|
||||
it.rootProject.findProperty("tracelog.internal.project-dependency").toString().toBoolean()
|
||||
val annotationDependency =
|
||||
when (extension.annotationClass.get()) {
|
||||
ArtifactInfo.DEFAULT_TRACELOG_ANNOTATION ->
|
||||
if (useLocal) {
|
||||
it.project(":runtime")
|
||||
} else {
|
||||
"dev.msfjarvis.tracelog:runtime:1.0.0-SNAPSHOT"
|
||||
}
|
||||
else -> null
|
||||
}
|
||||
if (annotationDependency != null) {
|
||||
if (target.plugins.hasPlugin("org.jetbrains.kotlin.multiplatform")) {
|
||||
val kotlin = target.extensions.getByName("kotlin") as KotlinSourceSetContainer
|
||||
kotlin.sourceSets.getByName(COMMON_MAIN_SOURCE_SET_NAME) { sourceSet ->
|
||||
sourceSet.dependencies { implementation(annotationDependency) }
|
||||
}
|
||||
} else {
|
||||
target.dependencies.add(IMPLEMENTATION_CONFIGURATION_NAME, annotationDependency)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun getCompilerPluginId(): String = BuildConfig.KOTLIN_PLUGIN_GROUP
|
||||
override fun applyToCompilation(
|
||||
kotlinCompilation: KotlinCompilation<*>
|
||||
): Provider<List<SubpluginOption>> {
|
||||
val project = kotlinCompilation.target.project
|
||||
val extension = project.extensions.getByType<TraceLogExtension>()
|
||||
|
||||
return kotlinCompilation.target.project.provider {
|
||||
buildList {
|
||||
add(SubpluginOption(key = "loggerFunction", value = extension.loggerFunction.get()))
|
||||
add(SubpluginOption(key = "debugAnnotation", value = extension.annotationClass.get()))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun getCompilerPluginId(): String = ArtifactInfo.GROUP
|
||||
|
||||
override fun getPluginArtifact(): SubpluginArtifact =
|
||||
SubpluginArtifact(
|
||||
groupId = BuildConfig.KOTLIN_PLUGIN_GROUP,
|
||||
artifactId = BuildConfig.KOTLIN_PLUGIN_NAME,
|
||||
version = BuildConfig.KOTLIN_PLUGIN_VERSION,
|
||||
groupId = ArtifactInfo.GROUP,
|
||||
artifactId = ArtifactInfo.COMPILER_PLUGIN_ARTIFACT,
|
||||
version = ArtifactInfo.VERSION,
|
||||
)
|
||||
|
||||
override fun isApplicable(kotlinCompilation: KotlinCompilation<*>): Boolean = true
|
||||
|
|
|
@ -19,3 +19,4 @@ POM_LICENCE_DIST=repo
|
|||
POM_DEVELOPER_ID=msfjarvis
|
||||
POM_DEVELOPER_NAME=Harsh Shandilya
|
||||
POM_DEVELOPER_URL=https://msfjarvis.dev
|
||||
tracelog.internal.project-dependency=true
|
||||
|
|
|
@ -1,9 +1,17 @@
|
|||
[versions]
|
||||
kotlin = "1.9.0"
|
||||
junit = "5.10.0"
|
||||
|
||||
[plugins]
|
||||
android-library = { id = "com.android.library", version = "8.1.1" }
|
||||
buildconfig = "com.github.gmazzo.buildconfig:4.1.2"
|
||||
dokka = { id = "org.jetbrains.dokka", version = "1.8.20" }
|
||||
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
|
||||
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
|
||||
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
|
||||
kotlinx-binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.13.2" }
|
||||
ksp = "com.google.devtools.ksp:1.9.0-1.0.13"
|
||||
mavenPublish = { id = "com.vanniktech.maven.publish", version = "0.25.3" }
|
||||
spotless = "com.diffplug.spotless:6.21.0"
|
||||
|
||||
[libraries]
|
||||
|
@ -14,9 +22,9 @@ junit-jupiter-api = { module = "org.junit.jupiter:junit-jupiter-api", version.re
|
|||
junit-jupiter-engine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "junit" }
|
||||
junit-legacy = "junit:junit:4.13.2"
|
||||
kct = "dev.zacsweers.kctfork:core:0.3.2"
|
||||
kotlin-compiler = { module = "org.jetbrains.kotlin:kotlin-compiler-embeddable" }
|
||||
kotlin-gradlePlugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin" }
|
||||
kotlin-gradlePlugin-api = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin-api" }
|
||||
kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib" }
|
||||
kotlin-compiler = { module = "org.jetbrains.kotlin:kotlin-compiler-embeddable", version.ref = "kotlin" }
|
||||
kotlin-gradlePlugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
|
||||
kotlin-gradlePlugin-api = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin-api", version.ref = "kotlin" }
|
||||
kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" }
|
||||
mordant = "com.github.ajalt.mordant:mordant:2.1.0"
|
||||
truth = "com.google.truth:truth:1.1.5"
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
public abstract interface class dev/msfjarvis/tracelog/runtime/TracingConsumer {
|
||||
public abstract fun trace (JLjava/lang/String;Ljava/lang/String;B)V
|
||||
}
|
||||
|
||||
public abstract interface annotation class dev/msfjarvis/tracelog/runtime/annotations/DebugLog : java/lang/annotation/Annotation {
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
public abstract interface class dev/msfjarvis/tracelog/runtime/TracingConsumer {
|
||||
public abstract fun trace (JLjava/lang/String;Ljava/lang/String;B)V
|
||||
}
|
||||
|
||||
public abstract interface annotation class dev/msfjarvis/tracelog/runtime/annotations/DebugLog : java/lang/annotation/Annotation {
|
||||
}
|
||||
|
|
@ -1,4 +1,31 @@
|
|||
plugins { id("tracelog-kmp-library") }
|
||||
plugins {
|
||||
alias(libs.plugins.kotlin.multiplatform)
|
||||
alias(libs.plugins.android.library)
|
||||
}
|
||||
|
||||
traceLogBuild { publishing() }
|
||||
|
||||
kotlin {
|
||||
jvmToolchain(11)
|
||||
jvm()
|
||||
androidTarget()
|
||||
iosX64()
|
||||
iosArm64()
|
||||
tvosX64()
|
||||
tvosArm64()
|
||||
watchosX64()
|
||||
watchosArm32()
|
||||
watchosArm64()
|
||||
macosX64()
|
||||
macosArm64()
|
||||
iosSimulatorArm64()
|
||||
watchosSimulatorArm64()
|
||||
tvosSimulatorArm64()
|
||||
mingwX64()
|
||||
linuxX64()
|
||||
androidNativeArm32()
|
||||
androidNativeArm64()
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdk = 33
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
POM_ARTIFACT_ID=runtime
|
|
@ -1,24 +1,16 @@
|
|||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
|
||||
plugins {
|
||||
id("tracelog-jvm-library")
|
||||
alias(libs.plugins.kotlin.jvm)
|
||||
id("dev.msfjarvis.tracelog")
|
||||
application
|
||||
}
|
||||
|
||||
kotlin.jvmToolchain(11)
|
||||
|
||||
traceLog { loggerFunction.set("dev.msfjarvis.tracelog.sample.recordMessage") }
|
||||
|
||||
application { mainClass.set("dev.msfjarvis.tracelog.sample.MainKt") }
|
||||
|
||||
tasks.withType<KotlinCompile>().configureEach {
|
||||
compilerOptions.freeCompilerArgs.addAll(
|
||||
"-P",
|
||||
"plugin:dev.msfjarvis.tracelog:loggerFunction=dev.msfjarvis.tracelog.sample.recordMessage",
|
||||
"-P",
|
||||
"plugin:dev.msfjarvis.tracelog:debugAnnotation=dev/msfjarvis/tracelog/runtime/annotations/DebugLog",
|
||||
)
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(platform(embeddedKotlin("bom")))
|
||||
kotlinCompilerPluginClasspath(projects.compilerPlugin)
|
||||
implementation(projects.runtime)
|
||||
implementation(libs.mordant)
|
||||
}
|
||||
|
|
|
@ -1,17 +1,12 @@
|
|||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithHostTests
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
|
||||
plugins { kotlin("multiplatform") }
|
||||
|
||||
tasks.withType<KotlinCompile>().configureEach {
|
||||
compilerOptions.freeCompilerArgs.addAll(
|
||||
"-P",
|
||||
"plugin:dev.msfjarvis.tracelog:loggerFunction=recordMessage",
|
||||
"-P",
|
||||
"plugin:dev.msfjarvis.tracelog:debugAnnotation=dev/msfjarvis/tracelog/runtime/annotations/DebugLog",
|
||||
)
|
||||
plugins {
|
||||
alias(libs.plugins.kotlin.multiplatform)
|
||||
id("dev.msfjarvis.tracelog")
|
||||
}
|
||||
|
||||
traceLog { loggerFunction.set("recordMessage") }
|
||||
|
||||
fun KotlinNativeTargetWithHostTests.configureTarget() = binaries {
|
||||
executable { entryPoint = "main" }
|
||||
}
|
||||
|
@ -22,8 +17,6 @@ kotlin {
|
|||
macosX64 { configureTarget() }
|
||||
|
||||
dependencies {
|
||||
commonMainImplementation(platform(embeddedKotlin("bom")))
|
||||
kotlinCompilerPluginClasspath(projects.compilerPlugin)
|
||||
commonMainImplementation(projects.runtime)
|
||||
commonMainImplementation(libs.mordant)
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ pluginManagement {
|
|||
includeGroup("com.android.tools.lint")
|
||||
includeGroup("com.android.tools.utp")
|
||||
includeGroup("com.google.testing.platform")
|
||||
includeModule("com.android.library", "com.android.library.gradle.plugin")
|
||||
includeModule("com.android.tools", "annotations")
|
||||
includeModule("com.android.tools", "common")
|
||||
includeModule("com.android.tools", "desugar_jdk_libs")
|
||||
|
@ -61,10 +62,13 @@ dependencyResolutionManagement {
|
|||
includeGroup("com.android.tools.lint")
|
||||
}
|
||||
}
|
||||
mavenLocal { content { includeModule("dev.msfjarvis.tracelog", "compiler-plugin") } }
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
|
||||
plugins { id("dev.msfjarvis.tracelog.settings") }
|
||||
|
||||
rootProject.name = "TraceLog"
|
||||
|
||||
include(
|
||||
|
|
Loading…
Reference in New Issue