Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ on:
options:
- ''
- ':chasm-gradle-plugin:'
- ':chasm-gradle-plugin-api:'
- ':chasm-gradle-plugin-compat:'
- ':chasm-gradle-plugin-codegen:'
- ':chasm-gradle-plugin-agp8:'
- ':chasm-gradle-plugin-agp9:'
default: ''
jobs:
publish:
Expand Down
34 changes: 34 additions & 0 deletions chasm-gradle-plugin-agp8/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import org.jetbrains.kotlin.gradle.dsl.abi.ExperimentalAbiValidation

plugins {
alias(libs.plugins.kotlin.jvm)
`kotlin-dsl`

alias(libs.plugins.conventions.linting)
alias(libs.plugins.conventions.publishing)
}

group = "io.github.charlietap.chasm"
version = libs.versions.plugin.version.name.get()

configure<PublishingConventionsExtension> {
name = "chasm-gradle-plugin-agp8"
description = "AGP 8 integration for the chasm Gradle plugin"
}

kotlin {

jvmToolchain {
languageVersion.set(JavaLanguageVersion.of(libs.versions.java.compiler.version.get().toInt()))
}

dependencies {
implementation(projects.chasmGradlePluginCompat)
implementation(projects.chasmGradlePluginCodegen)
compileOnly(libs.android.gradle.plugin8)

testImplementation(libs.kotlin.test)
testImplementation(libs.android.gradle.plugin8)
testImplementation(gradleTestKit())
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package io.github.charlietap.chasm.gradle.agp

import com.android.build.api.variant.AndroidComponentsExtension
import com.android.build.api.variant.Variant
import io.github.charlietap.chasm.gradle.AndroidConfigContext
import io.github.charlietap.chasm.gradle.AndroidConfigurer
import io.github.charlietap.chasm.gradle.CodegenTask
import io.github.charlietap.chasm.gradle.Mode
import io.github.charlietap.chasm.gradle.registerCodegenTask

class Agp8AndroidConfigurer : AndroidConfigurer {
override fun configure(androidComponents: Any, context: AndroidConfigContext) {
@Suppress("UNCHECKED_CAST")
val components = androidComponents as AndroidComponentsExtension<*, *, *>

components.onVariants { variant: Variant ->
context.extension.modules.configureEach {
if (context.extension.mode.get() == Mode.PRODUCER) {
context.project.logger.error(
"Producer mode is only supported for Kotlin Multiplatform projects with WASM targets",
)
return@configureEach
}

val task = registerCodegenTask(context.project, this, variant.name, context.workerClasspath)
variant.sources.java?.addGeneratedSourceDirectory(task, CodegenTask::outputDirectory)
variant.sources.kotlin?.addGeneratedSourceDirectory(task, CodegenTask::outputDirectory)
}
}
}
}
34 changes: 34 additions & 0 deletions chasm-gradle-plugin-agp9/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import org.jetbrains.kotlin.gradle.dsl.abi.ExperimentalAbiValidation

plugins {
alias(libs.plugins.kotlin.jvm)
`kotlin-dsl`

alias(libs.plugins.conventions.linting)
alias(libs.plugins.conventions.publishing)
}

group = "io.github.charlietap.chasm"
version = libs.versions.plugin.version.name.get()

configure<PublishingConventionsExtension> {
name = "chasm-gradle-plugin-agp9"
description = "AGP 9 integration for the chasm Gradle plugin"
}

kotlin {

jvmToolchain {
languageVersion.set(JavaLanguageVersion.of(libs.versions.java.compiler.version.get().toInt()))
}

dependencies {
implementation(projects.chasmGradlePluginCompat)
implementation(projects.chasmGradlePluginCodegen)
compileOnly(libs.android.gradle.plugin)

testImplementation(libs.kotlin.test)
testImplementation(libs.android.gradle.plugin)
testImplementation(gradleTestKit())
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package io.github.charlietap.chasm.gradle.agp

import com.android.build.api.variant.AndroidComponentsExtension
import com.android.build.api.variant.Variant
import io.github.charlietap.chasm.gradle.AndroidConfigContext
import io.github.charlietap.chasm.gradle.AndroidConfigurer
import io.github.charlietap.chasm.gradle.CodegenTask
import io.github.charlietap.chasm.gradle.Mode
import io.github.charlietap.chasm.gradle.registerCodegenTask

class Agp9AndroidConfigurer : AndroidConfigurer {
override fun configure(androidComponents: Any, context: AndroidConfigContext) {
@Suppress("UNCHECKED_CAST")
val components = androidComponents as AndroidComponentsExtension<*, *, *>

components.onVariants { variant: Variant ->
context.extension.modules.configureEach {
if (context.extension.mode.get() == Mode.PRODUCER) {
context.project.logger.error(
"Producer mode is only supported for Kotlin Multiplatform projects with WASM targets",
)
return@configureEach
}

val task = registerCodegenTask(context.project, this, variant.name, context.workerClasspath)
variant.sources.java?.addGeneratedSourceDirectory(task, CodegenTask::outputDirectory)
variant.sources.kotlin?.addGeneratedSourceDirectory(task, CodegenTask::outputDirectory)
}
}
}
}
178 changes: 178 additions & 0 deletions chasm-gradle-plugin-api/api/chasm-gradle-plugin-api.api
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
public abstract interface annotation class io/github/charlietap/chasm/gradle/ChasmDsl : java/lang/annotation/Annotation {
}

public class io/github/charlietap/chasm/gradle/ChasmExtension {
public fun <init> (Lorg/gradle/api/model/ObjectFactory;)V
public final fun getMode ()Lorg/gradle/api/provider/Property;
public final fun getModules ()Lorg/gradle/api/NamedDomainObjectContainer;
public final fun getRuntimeDependencyConfiguration ()Lorg/gradle/api/provider/Property;
}

public final class io/github/charlietap/chasm/gradle/CodegenConfig : java/io/Serializable {
public fun <init> ()V
public fun <init> (Z)V
public synthetic fun <init> (ZILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Z
public final fun copy (Z)Lio/github/charlietap/chasm/gradle/CodegenConfig;
public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/CodegenConfig;ZILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/CodegenConfig;
public fun equals (Ljava/lang/Object;)Z
public final fun getGenerateTypesafeGlobalProperties ()Z
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}

public final class io/github/charlietap/chasm/gradle/ExportedAllocator : java/io/Serializable {
public fun <init> (Ljava/lang/String;Ljava/lang/String;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/lang/String;
public final fun copy (Ljava/lang/String;Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/ExportedAllocator;
public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/ExportedAllocator;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/ExportedAllocator;
public fun equals (Ljava/lang/Object;)Z
public final fun getAllocationFunction ()Ljava/lang/String;
public final fun getDeallocationFunction ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}

public final class io/github/charlietap/chasm/gradle/FunctionParameterDefinition : java/io/Serializable {
public fun <init> (Ljava/lang/String;Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;Lio/github/charlietap/chasm/gradle/StringAllocationStrategy;)V
public synthetic fun <init> (Ljava/lang/String;Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;Lio/github/charlietap/chasm/gradle/StringAllocationStrategy;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Lio/github/charlietap/chasm/gradle/Type;
public final fun component3 ()Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;
public final fun component4 ()Lio/github/charlietap/chasm/gradle/StringAllocationStrategy;
public final fun copy (Ljava/lang/String;Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;Lio/github/charlietap/chasm/gradle/StringAllocationStrategy;)Lio/github/charlietap/chasm/gradle/FunctionParameterDefinition;
public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/FunctionParameterDefinition;Ljava/lang/String;Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;Lio/github/charlietap/chasm/gradle/StringAllocationStrategy;ILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/FunctionParameterDefinition;
public fun equals (Ljava/lang/Object;)Z
public final fun getName ()Ljava/lang/String;
public final fun getStringAllocationStrategy ()Lio/github/charlietap/chasm/gradle/StringAllocationStrategy;
public final fun getStringEncodingStrategy ()Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;
public final fun getType ()Lio/github/charlietap/chasm/gradle/Type;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}

public final class io/github/charlietap/chasm/gradle/Mode : java/lang/Enum {
public static final field CONSUMER Lio/github/charlietap/chasm/gradle/Mode;
public static final field PRODUCER Lio/github/charlietap/chasm/gradle/Mode;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public static fun valueOf (Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/Mode;
public static fun values ()[Lio/github/charlietap/chasm/gradle/Mode;
}

public final class io/github/charlietap/chasm/gradle/ReturnTypeDefinition : java/io/Serializable {
public fun <init> (Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;)V
public synthetic fun <init> (Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Lio/github/charlietap/chasm/gradle/Type;
public final fun component2 ()Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;
public final fun copy (Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;)Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition;
public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition;Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;ILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition;
public fun equals (Ljava/lang/Object;)Z
public final fun getStringEncodingStrategy ()Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;
public final fun getType ()Lio/github/charlietap/chasm/gradle/Type;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}

public final class io/github/charlietap/chasm/gradle/RuntimeDependencyConfiguration : java/lang/Enum {
public static final field API Lio/github/charlietap/chasm/gradle/RuntimeDependencyConfiguration;
public static final field IMPLEMENTATION Lio/github/charlietap/chasm/gradle/RuntimeDependencyConfiguration;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public static fun valueOf (Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/RuntimeDependencyConfiguration;
public static fun values ()[Lio/github/charlietap/chasm/gradle/RuntimeDependencyConfiguration;
}

public final class io/github/charlietap/chasm/gradle/Scalar : java/lang/Enum, io/github/charlietap/chasm/gradle/Type {
public static final field Double Lio/github/charlietap/chasm/gradle/Scalar;
public static final field Float Lio/github/charlietap/chasm/gradle/Scalar;
public static final field Integer Lio/github/charlietap/chasm/gradle/Scalar;
public static final field Long Lio/github/charlietap/chasm/gradle/Scalar;
public static final field String Lio/github/charlietap/chasm/gradle/Scalar;
public static final field Unit Lio/github/charlietap/chasm/gradle/Scalar;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public static fun valueOf (Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/Scalar;
public static fun values ()[Lio/github/charlietap/chasm/gradle/Scalar;
}

public final class io/github/charlietap/chasm/gradle/StringAllocationStrategy : java/io/Serializable {
public fun <init> (Z)V
public final fun component1 ()Z
public final fun copy (Z)Lio/github/charlietap/chasm/gradle/StringAllocationStrategy;
public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/StringAllocationStrategy;ZILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/StringAllocationStrategy;
public fun equals (Ljava/lang/Object;)Z
public final fun getFreeAfterCall ()Z
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}

public final class io/github/charlietap/chasm/gradle/StringEncodingStrategy : java/lang/Enum {
public static final field LENGTH_PREFIXED Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;
public static final field NULL_TERMINATED Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;
public static final field PACKED_POINTER_AND_LENGTH Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;
public static final field POINTER_AND_LENGTH Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public static fun valueOf (Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;
public static fun values ()[Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;
}

public abstract interface class io/github/charlietap/chasm/gradle/Type : java/io/Serializable {
}

public final class io/github/charlietap/chasm/gradle/TypeVisibility : java/lang/Enum {
public static final field INTERNAL Lio/github/charlietap/chasm/gradle/TypeVisibility;
public static final field PUBLIC Lio/github/charlietap/chasm/gradle/TypeVisibility;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public static fun valueOf (Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/TypeVisibility;
public static fun values ()[Lio/github/charlietap/chasm/gradle/TypeVisibility;
}

public final class io/github/charlietap/chasm/gradle/WasmFunction : java/io/Serializable {
public fun <init> (Ljava/lang/String;Ljava/util/List;Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/util/List;
public final fun component3 ()Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition;
public final fun copy (Ljava/lang/String;Ljava/util/List;Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition;)Lio/github/charlietap/chasm/gradle/WasmFunction;
public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/WasmFunction;Ljava/lang/String;Ljava/util/List;Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition;ILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/WasmFunction;
public fun equals (Ljava/lang/Object;)Z
public final fun getName ()Ljava/lang/String;
public final fun getParameters ()Ljava/util/List;
public final fun getReturnType ()Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}

public final class io/github/charlietap/chasm/gradle/WasmFunctionBuilder {
public fun <init> (Ljava/lang/String;)V
public final fun build ()Lio/github/charlietap/chasm/gradle/WasmFunction;
public final fun doubleParam (Ljava/lang/String;)V
public final fun doubleReturnType ()V
public final fun floatParam (Ljava/lang/String;)V
public final fun floatReturnType ()V
public final fun getName ()Ljava/lang/String;
public final fun intParam (Ljava/lang/String;)V
public final fun intReturnType ()V
public final fun longParam (Ljava/lang/String;)V
public final fun longReturnType ()V
public final fun stringParam (Ljava/lang/String;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;Z)V
public static synthetic fun stringParam$default (Lio/github/charlietap/chasm/gradle/WasmFunctionBuilder;Ljava/lang/String;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;ZILjava/lang/Object;)V
public final fun stringReturnType (Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;)V
public static synthetic fun stringReturnType$default (Lio/github/charlietap/chasm/gradle/WasmFunctionBuilder;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;ILjava/lang/Object;)V
}

public abstract class io/github/charlietap/chasm/gradle/WasmModule {
public static final field DEFAULT_MODULE_FILE_PATH Ljava/lang/String;
public fun <init> (Lorg/gradle/api/Project;Ljava/lang/String;)V
public final fun function (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V
public abstract fun getAllocator ()Lorg/gradle/api/provider/Property;
public abstract fun getBinary ()Lorg/gradle/api/file/RegularFileProperty;
public abstract fun getCodegenConfig ()Lorg/gradle/api/provider/Property;
public abstract fun getFunctions ()Lorg/gradle/api/provider/ListProperty;
public abstract fun getIgnoredExports ()Lorg/gradle/api/provider/SetProperty;
public abstract fun getImplementationVisibility ()Lorg/gradle/api/provider/Property;
public abstract fun getInitializers ()Lorg/gradle/api/provider/SetProperty;
public abstract fun getInterfaceVisibility ()Lorg/gradle/api/provider/Property;
public final fun getName ()Ljava/lang/String;
public abstract fun getPackageName ()Lorg/gradle/api/provider/Property;
public final fun getProject ()Lorg/gradle/api/Project;
}

33 changes: 33 additions & 0 deletions chasm-gradle-plugin-api/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import org.jetbrains.kotlin.gradle.dsl.abi.ExperimentalAbiValidation

plugins {
alias(libs.plugins.kotlin.jvm)
`kotlin-dsl`

alias(libs.plugins.conventions.linting)
alias(libs.plugins.conventions.publishing)
}

group = "io.github.charlietap.chasm"
version = libs.versions.plugin.version.name.get()

configure<PublishingConventionsExtension> {
name = "chasm-gradle-plugin-api"
description = "API surface for the chasm Gradle plugin"
}

kotlin {

@OptIn(ExperimentalAbiValidation::class)
abiValidation {
enabled.set(true)
}

jvmToolchain {
languageVersion.set(JavaLanguageVersion.of(libs.versions.java.compiler.version.get().toInt()))
}

dependencies {
testImplementation(libs.kotlin.test)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package io.github.charlietap.chasm.gradle

import java.io.Serializable

interface Type : Serializable

enum class Scalar : Type {
Integer,
Long,
Float,
Double,
String,
Unit,
}
Loading