Skip to content

Commit

Permalink
Add support for WASM (#277)
Browse files Browse the repository at this point in the history
  • Loading branch information
eygraber authored Dec 6, 2023
1 parent ba55876 commit e3dca3c
Show file tree
Hide file tree
Showing 8 changed files with 58 additions and 7 deletions.
4 changes: 2 additions & 2 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
version: 2.1
orbs:
gradle: circleci/gradle@3.0.0
browser-tools: circleci/browser-tools@1.4.1
browser-tools: circleci/browser-tools@1.4.6
_defaults: &defaults
working_directory: ~/code
environment:
Expand Down Expand Up @@ -51,7 +51,7 @@ commands:
jobs:
build-linux:
docker:
- image: cimg/openjdk:17.0.7-browsers@sha256:52a950f68f31d7e947e9468e11acb38177272a59c446044d13f0c6d7d66d12ed
- image: cimg/openjdk:17.0.9-browsers@sha256:8839dc66dbde220adecfa1319727aa88162a9ce73522e11ddcffa72771da5616
resource_class: large
<<: *defaults
steps:
Expand Down
25 changes: 25 additions & 0 deletions build-logic/src/main/kotlin/kotlin-inject.multiplatform.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithTests
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
Expand All @@ -27,6 +31,12 @@ kotlin {
watchosX64()
watchosSimulatorArm64()

@OptIn(ExperimentalWasmDsl::class)
wasmJs {
browser()
nodejs()
}

jvm()

// Ensure xml test reports are generated
Expand Down Expand Up @@ -58,3 +68,18 @@ val nativeTest by tasks.registering {
tasks.withType<KotlinNpmInstallTask> {
args += "--ignore-scripts"
}

rootProject.the<NodeJsRootExtension>().apply {
nodeVersion = "22.0.0-v8-canary20231127cbafc81f11"
nodeDownloadBaseUrl = "https://nodejs.org/download/v8-canary"
}

rootProject.tasks.withType<KotlinNpmInstallTask>().configureEach {
args.add("--ignore-engines")
}

tasks.withType<KotlinCompilationTask<*>>().configureEach {
compilerOptions {
freeCompilerArgs.add("-Xexpect-actual-classes")
}
}
8 changes: 4 additions & 4 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
kotlin-inject = "0.7.0-SNAPSHOT"
kotlin = "1.9.21"
ksp = "1.9.21-1.0.15"
kotlinpoet = "1.14.2"
kotlinpoet = "1.15.1"
junit5 = "5.9.3"
detekt = "1.23.1"
detekt = "1.23.4"
[libraries]
kotlin-gradle = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
detekt-gradle = { module = "io.gitlab.arturbosch.detekt:detekt-gradle-plugin", version.ref = "detekt" }
Expand All @@ -13,9 +13,9 @@ ksp = { module = "com.google.devtools.ksp:symbol-processing-api", version.ref =
kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" }
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
kotlin-compile-testing = { module = "dev.zacsweers.kctfork:ksp", version = "0.3.2" }
kotlinx-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version = "1.7.2" }
kotlinx-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version = "1.8.0-RC" }
kotlinx-metadata-jvm = { module = "org.jetbrains.kotlinx:kotlinx-metadata-jvm", version = "0.7.0" }
kotlinx-atomicfu = { module = "org.jetbrains.kotlinx:atomicfu", version = "0.21.0" }
kotlinx-atomicfu = { module = "org.jetbrains.kotlinx:atomicfu", version = "0.23.1" }
jdk-compiler = { module = "io.earcam.wrapped:jdk.compiler", version = "1.8.132" }
assertk = { module = "com.willowtreeapps.assertk:assertk", version = "0.28.0" }
burst-junit4 = { module = "com.squareup.burst:burst-junit4", version = "1.2.0" }
Expand Down
1 change: 1 addition & 0 deletions integration-tests/ksp-companion/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ dependencies {
kspCommonMainMetadata(project(":kotlin-inject-compiler:kotlin-inject-compiler-ksp"))
kspJvmTest(project(":kotlin-inject-compiler:kotlin-inject-compiler-ksp"))
kspJsTest(project(":kotlin-inject-compiler:kotlin-inject-compiler-ksp"))
kspWasmJsTest(project(":kotlin-inject-compiler:kotlin-inject-compiler-ksp"))

for (configuration in nativeKspTestConfigurations) {
add(configuration, project(":kotlin-inject-compiler:kotlin-inject-compiler-ksp"))
Expand Down
1 change: 1 addition & 0 deletions integration-tests/ksp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ dependencies {
kspCommonMainMetadata(project(":kotlin-inject-compiler:kotlin-inject-compiler-ksp"))
kspJvmTest(project(":kotlin-inject-compiler:kotlin-inject-compiler-ksp"))
kspJsTest(project(":kotlin-inject-compiler:kotlin-inject-compiler-ksp"))
kspWasmJsTest(project(":kotlin-inject-compiler:kotlin-inject-compiler-ksp"))

for (configuration in nativeKspTestConfigurations) {
add(configuration, project(":kotlin-inject-compiler:kotlin-inject-compiler-ksp"))
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package me.tatarka.inject.test

import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.promise

/**
* Workaround to use suspending functions in unit tests
*/
@OptIn(DelicateCoroutinesApi::class)
actual fun runTest(block: suspend (scope: CoroutineScope) -> Unit) {
GlobalScope.promise { block(this) }
}
12 changes: 11 additions & 1 deletion kotlin-inject-runtime/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,10 +1,20 @@
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi

plugins {
id("kotlin-inject.multiplatform")
id("kotlin-inject.detekt")
id("kotlin-inject.publish")
}

kotlin {
@OptIn(ExperimentalKotlinGradlePluginApi ::class)
applyDefaultHierarchyTemplate {
group("commonJs") {
withJs()
withWasm()
}
}

sourceSets {
nativeMain {
dependencies {
Expand All @@ -19,4 +29,4 @@ kotlin {
}
}
}
}
}

0 comments on commit e3dca3c

Please sign in to comment.