mirror of
https://github.com/bitsycore/compose-desktop-native.git
synced 2026-10-05 10:47:26 +00:00
Coil 3.6.2 publishes linux + apple klibs for its core/network/svg modules but NO mingwX64 anywhere, and NO desktop-native artifact at all for the compose layer. The sources are target-agnostic, so the port re-declares the targets and rebuilds them: :coil:coil-core coil3.* core (Skia-based decoding) :coil:coil the singleton ImageLoader facade :coil:coil-compose-core AsyncImage / rememberAsyncImagePainter internals :coil:coil-compose the public compose entry points :coil:coil-svg SVG decoding via skiko SVGDOM :coil:coil-network-core shared network-fetcher plumbing :coil:coil-network-ktor3 Ktor 3 fetcher, on the port's existing ktor pin Vendored VERBATIM from coil-kt/coil @ 3.6.2 (new COIL_REF pin + manifests); 152 files, zero local edits - all of it compiled unmodified. SOURCE-SET COLLAPSE: the port has no android, jvm or js target, so upstream's nonAndroidMain / nonJvmCommonMain / nonJsCommonMain all apply to every target here. They do NOT merge into nativeMain though: several declare `expect`s whose `actual`s live in upstream nativeMain, and siblings in one source set is a hard error. So they keep their own level above it. TWO PARALLEL SKIKO BRANCHES in coil-core / coil-svg / coil-compose-core: upstream's non-android code uses org.jetbrains.skia.* directly, so the INTERMEDIATE source set holding it needs skiko on its own compile classpath (a shared-metadata compilation is a real compile). macOS/Linux take the official skiko and mingwX64 takes the bitsycore fork, and the two cannot share an intermediate - so mingw gets a parallel branch over the same srcDirs, the same shape :compose:ui:ui-graphics already uses. Kotlin emits no metadata compilation for the single-target fork branch, so the two never collide. coil-compose-core declares the whole ui / foundation family DIRECTLY rather than leaning on foundation's transitives - the granular-metadata trap from CLAUDE.md's "Common pitfalls": a substituted coord's transitives drop off the commonMain metadata classpath. Published as com.bitsycore.coil3:<module>; bridge substitution rules added so consumers keep declaring the official io.coil-kt.coil3 coordinates.
56 lines
2.0 KiB
Kotlin
56 lines
2.0 KiB
Kotlin
// :coil:coil-svg - SVG decoding, vendored VERBATIM from coil-kt/coil into src/vendor.
|
|
// Upstream: linux + apple, no mingwX64. The non-android decoder goes through skiko's
|
|
// SVGDOM, so mingwX64 binds the bitsycore skiko FORK like :compose:ui:ui-graphics.
|
|
// Upstream's non* source sets sit ABOVE nativeMain here (see coil-core).
|
|
plugins {
|
|
alias(libs.plugins.kotlin.multiplatform)
|
|
}
|
|
|
|
val vHostSupportsMingw = rootProject.extra["vHostSupportsMingw"] as Boolean
|
|
|
|
kotlin {
|
|
linuxArm64(); linuxX64(); macosArm64(); if (vHostSupportsMingw) mingwX64()
|
|
applyDefaultHierarchyTemplate()
|
|
sourceSets {
|
|
commonMain {
|
|
dependencies { api(project(":coil:coil-core")) }
|
|
kotlin.srcDir("src/vendor/common/kotlin")
|
|
}
|
|
// Two PARALLEL skiko branches (official for macOS/Linux, the bitsycore fork for
|
|
// mingwX64), each two levels deep so nonAndroid `expect`s and nativeMain
|
|
// `actual`s are not siblings. See coil/coil-core/build.gradle.kts for the why.
|
|
fun skikoBranch(inName: String, inSkiko: Any): org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet {
|
|
val vNonAndroid = create("${inName}NonAndroidMain") {
|
|
dependsOn(commonMain.get())
|
|
kotlin.srcDir("src/vendor/nonAndroid/kotlin")
|
|
dependencies { implementation(inSkiko) }
|
|
}
|
|
return create("${inName}NativeMain") {
|
|
dependsOn(vNonAndroid)
|
|
kotlin.srcDir("src/vendor/native/kotlin")
|
|
}
|
|
}
|
|
|
|
val vOfficial = skikoBranch("coilSvgOfficial", libs.skiko)
|
|
get("macosArm64Main").dependsOn(vOfficial)
|
|
get("linuxX64Main").dependsOn(vOfficial)
|
|
get("linuxArm64Main").dependsOn(vOfficial)
|
|
|
|
if (vHostSupportsMingw) {
|
|
val vFork = skikoBranch(
|
|
"coilSvgFork",
|
|
"com.bitsycore.skiko:skiko:${providers.gradleProperty("skikoMingwVersion").getOrElse(libs.versions.skikoMingw.get())}",
|
|
)
|
|
get("mingwX64Main").dependsOn(vFork)
|
|
}
|
|
}
|
|
compilerOptions {
|
|
freeCompilerArgs.addAll(
|
|
"-Xexpect-actual-classes",
|
|
"-opt-in=coil3.annotation.InternalCoilApi",
|
|
"-opt-in=coil3.annotation.ExperimentalCoilApi",
|
|
"-opt-in=coil3.annotation.DelicateCoilApi",
|
|
)
|
|
}
|
|
}
|