Skip to content
Open
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
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,10 @@ class SkainetMultiplatformPlugin : Plugin<Project> {
kotlin.androidNativeArm32()
kotlin.androidNativeArm64()
}

if (targets.mingw) {
kotlin.mingwX64()
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ internal data class SkainetTargets(
val linux: Boolean,
/** `androidNativeArm32`, `androidNativeArm64` — vendor backends linking device libraries. */
val androidNative: Boolean,
/** `mingwX64` — Windows. Opt-in (not in the default set); see issue #911. */
val mingw: Boolean,
val wasmJsExecutable: Boolean,
) {
val web: Boolean get() = js || wasmJs
Expand All @@ -55,7 +57,7 @@ internal data class SkainetTargets(
const val WASM_JS_EXECUTABLE_PROPERTY = "skainet.wasmJs.executable"

private val DEFAULT = setOf("jvm", "js", "wasmJs", "wasmWasi", "apple", "linux")
private val KNOWN = DEFAULT + setOf("androidNative")
private val KNOWN = DEFAULT + setOf("androidNative", "mingw")

fun from(project: Project): SkainetTargets {
// findProperty, not providers.gradleProperty: as of Gradle 9 the provider API
Expand Down Expand Up @@ -83,6 +85,7 @@ internal data class SkainetTargets(
apple = "apple" in selected,
linux = "linux" in selected,
androidNative = "androidNative" in selected,
mingw = "mingw" in selected,
wasmJsExecutable = project.findProperty(WASM_JS_EXECUTABLE_PROPERTY)?.toString().toBoolean(),
)
}
Expand Down
90 changes: 8 additions & 82 deletions skainet-backends/skainet-backend-api/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,46 +1,18 @@
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

plugins {
alias(libs.plugins.kotlinMultiplatform)
id("sk.ainet.multiplatform")
alias(libs.plugins.androidMultiplatformLibrary)
alias(libs.plugins.vanniktech.mavenPublish)
id("sk.ainet.dokka")
}

kotlin {
explicitApi()
android {
namespace = "sk.ainet.backend.api"
compileSdk = libs.versions.android.compileSdk.get().toInt()
minSdk = libs.versions.android.minSdk.get().toInt()
compilerOptions {
jvmTarget.set(JvmTarget.JVM_11)
}
}

iosArm64()
iosSimulatorArm64()
macosArm64()
linuxX64()
linuxArm64()

jvm()

js {
browser()
}

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

@OptIn(ExperimentalWasmDsl::class)
wasmWasi {
nodejs()
}
// Targets come from skainet.targets in this module's gradle.properties. The previous
// hand-wired native source-set tree carried no source files and is gone — the default
// hierarchy template covers this module.
skainet {
namespace = "sk.ainet.backend.api"
}

kotlin {
sourceSets {
commonMain.dependencies {
// Neutral backend API is an `api` re-export of the tensor op and
Expand All @@ -50,51 +22,5 @@ kotlin {
// reach TensorOps / TensorDataFactory / TensorData.
api(project(":skainet-lang:skainet-lang-core"))
}

val jvmMain by getting
val androidMain by getting
val wasmJsMain by getting

val commonMain by getting

val nativeMain by creating {
dependsOn(commonMain)
}

val appleMain by creating {
dependsOn(nativeMain)
}

val linuxMain by creating {
dependsOn(nativeMain)
}

val iosMain by creating {
dependsOn(appleMain)
}

val macosMain by creating {
dependsOn(appleMain)
}

val iosArm64Main by getting {
dependsOn(iosMain)
}

val iosSimulatorArm64Main by getting {
dependsOn(iosMain)
}

val macosArm64Main by getting {
dependsOn(macosMain)
}

val linuxX64Main by getting {
dependsOn(linuxMain)
}

val linuxArm64Main by getting {
dependsOn(linuxMain)
}
}
}
2 changes: 2 additions & 0 deletions skainet-backends/skainet-backend-api/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
POM_ARTIFACT_ID=skainet-backend-api
POM_NAME=skainet backend-neutral API

skainet.targets=jvm,js,wasmJs,wasmWasi,apple,linux,mingw
1 change: 1 addition & 0 deletions skainet-backends/skainet-backend-cpu/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ kotlin {
macosArm64Main { dependsOn(macosMain.get()) }
linuxX64Main { dependsOn(linuxMain.get()) }
linuxArm64Main { dependsOn(linuxMain.get()) }
mingwX64Main { dependsOn(nativeMain.get()) }
}
}

Expand Down
5 changes: 4 additions & 1 deletion skainet-backends/skainet-backend-cpu/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
POM_ARTIFACT_ID=skainet-backend-cpu
POM_NAME=skainet neural network scripting API

kotlin.mpp.applyDefaultHierarchyTemplate=false
kotlin.mpp.applyDefaultHierarchyTemplate=false

# Explicit target list (was the plugin default) + Windows; see #911.
skainet.targets=jvm,js,wasmJs,wasmWasi,apple,linux,mingw
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package sk.ainet.exec.tensor.ops

import sk.ainet.backend.api.kernel.KernelRegistry
import sk.ainet.exec.kernel.ScalarKernelProvider
import sk.ainet.lang.tensor.data.TensorDataFactory
import sk.ainet.lang.tensor.ops.TensorOps

internal actual fun platformDefaultCpuOpsFactory(): (TensorDataFactory) -> TensorOps {
// Non-JVM has no ServiceLoader; register the scalar packed-quant kernels
// (Q4_K/Q6_K/Q5_1/Q5_0/Q8_0/Q4_0) so DefaultCpuOpsBase can dispatch them.
// Scalar parity with the other Kotlin/Native targets; SIMD is tracked in #910.
KernelRegistry.register(ScalarKernelProvider)
return { factory -> DefaultCpuOps(factory) }
}
56 changes: 7 additions & 49 deletions skainet-compile/skainet-compile-core/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,63 +1,21 @@
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

plugins {
alias(libs.plugins.kotlinMultiplatform)
id("sk.ainet.multiplatform")
alias(libs.plugins.androidMultiplatformLibrary)
alias(libs.plugins.vanniktech.mavenPublish)
alias(libs.plugins.binary.compatibility.validator)
id("sk.ainet.dokka")
}

kotlin {
explicitApi()

android {
namespace = "sk.ainet.compilie.core"
compileSdk = libs.versions.android.compileSdk.get().toInt()
minSdk = libs.versions.android.minSdk.get().toInt()
compilerOptions {
jvmTarget.set(JvmTarget.JVM_11)
}
}

iosArm64()
iosSimulatorArm64()
macosArm64()
linuxX64()
linuxArm64()

// Android Native targets for vendor-specific backends linking native device libs.
androidNativeArm32()
androidNativeArm64()

jvm()

js {
browser()
}

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

@OptIn(ExperimentalWasmDsl::class)
wasmWasi {
nodejs()
}
// Targets come from skainet.targets in this module's gradle.properties;
// explicitApi() and kotlin-test in commonTest come from sk.ainet.multiplatform.
skainet {
namespace = "sk.ainet.compilie.core"
}

kotlin {
sourceSets {
commonMain.dependencies {
implementation(project(":skainet-lang:skainet-lang-core"))
}

commonTest.dependencies {
implementation(libs.kotlin.test)
}

jvmTest.dependencies {
implementation(libs.kotlin.test)
}
}
}
3 changes: 2 additions & 1 deletion skainet-compile/skainet-compile-core/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
POM_ARTIFACT_ID=skainet-compile-core
POM_NAME=skainet neural network compile core
POM_NAME=skainet neural network compile core
skainet.targets=jvm,js,wasmJs,wasmWasi,apple,linux,androidNative,mingw
47 changes: 7 additions & 40 deletions skainet-compile/skainet-compile-dag/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,49 +1,18 @@
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

plugins {
alias(libs.plugins.kotlinMultiplatform)
id("sk.ainet.multiplatform")
alias(libs.plugins.androidMultiplatformLibrary)
alias(libs.plugins.vanniktech.mavenPublish)
alias(libs.plugins.binary.compatibility.validator)
id("sk.ainet.dokka")
}

kotlin {
explicitApi()

android {
namespace = "sk.ainet.compilie.dag"
compileSdk = libs.versions.android.compileSdk.get().toInt()
minSdk = libs.versions.android.minSdk.get().toInt()
compilerOptions {
jvmTarget.set(JvmTarget.JVM_11)
}
}

iosArm64()
iosSimulatorArm64()
macosArm64 ()
linuxX64 ()
linuxArm64 ()

jvm()

js {
browser()
}

@OptIn(ExperimentalWasmDsl::class)
wasmJs {
browser()
binaries.executable()
}

@OptIn(ExperimentalWasmDsl::class)
wasmWasi {
nodejs()
}
// Targets come from skainet.targets in this module's gradle.properties (incl. the
// wasmJs executable flag); explicitApi() and kotlin-test come from sk.ainet.multiplatform.
skainet {
namespace = "sk.ainet.compilie.dag"
}

kotlin {
sourceSets {
commonMain.dependencies {
api(project(":skainet-lang:skainet-lang-core"))
Expand All @@ -52,10 +21,8 @@ kotlin {
}

commonTest.dependencies {
implementation(libs.kotlin.test)
implementation(project(":skainet-backends:skainet-backend-cpu"))
implementation(project(":skainet-lang:skainet-lang-models"))

}
}
}
4 changes: 3 additions & 1 deletion skainet-compile/skainet-compile-dag/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
POM_ARTIFACT_ID=skainet-compile-dag
POM_NAME=skainet neural network compile DAG
POM_NAME=skainet neural network compile DAG
skainet.targets=jvm,js,wasmJs,wasmWasi,apple,linux,mingw
skainet.wasmJs.executable=true
Loading
Loading