Unverified Commit 71d274ad authored by alexander-gorshenev's avatar alexander-gorshenev Committed by GitHub

Publish skiko as mpp library (#219)

parent 290578db
......@@ -90,7 +90,7 @@ jobs:
source ./emsdk_env.sh
cd ..
./gradlew -Pskiko.wasm.enabled=true jsTest
./gradlew -Pskiko.wasm.enabled=true publishSkikoWasmRuntimePublicationToMavenLocal publishSkikoJsRuntimePublicationToMavenLocal
./gradlew -Pskiko.wasm.enabled=true publishSkikoWasmRuntimePublicationToMavenLocal
windows:
runs-on: windows-2019
steps:
......
......@@ -39,15 +39,14 @@ kotlin {
}
sourceSets {
val commonMain by getting {}
val commonMain by getting {
dependencies {
implementation("org.jetbrains.skiko:skiko:$version")
}
}
val jsMain by getting {
dependsOn(commonMain)
dependencies {
// This one is tricky - it has js and wasm binaries required for final linking.
// We cannot use it directly but need to extract data from there.
implementation("org.jetbrains.skiko:skiko-js-runtime:$version")
}
resources.setSrcDirs(resources.srcDirs)
resources.srcDirs(unzipTask.map { it.destinationDir })
}
......
......@@ -52,7 +52,7 @@ kotlin {
sourceSets {
val commonMain by getting {
dependencies {
implementation(kotlin("stdlib-common"))
implementation("org.jetbrains.skiko:skiko:$version")
}
}
......@@ -66,7 +66,6 @@ kotlin {
dependsOn(nativeMain)
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-macosx64:1.5.2")
implementation("org.jetbrains.skiko:skiko-native-runtime-$target:$version")
}
}
}
......
......@@ -740,7 +740,7 @@ val skikoWasmJar by project.tasks.registering(Jar::class) {
// disable unexpected native publications (default C++ publications are failing)
tasks.withType<AbstractPublishToMaven>().configureEach {
doFirst {
if (!publication.name.startsWith("skiko")) {
if (!publication.isSkikoPublication()) {
throw StopExecutionException("Publication '${publication.name}' is disabled")
}
}
......@@ -777,8 +777,16 @@ tasks.withType<Test>().configureEach {
}
}
fun Publication.isSkikoPublication() =
(this as? MavenPublication)?.name?.startsWith("skiko") == true
fun Publication.isSkikoPublication(): Boolean {
val component = (this as? org.gradle.api.publish.maven.internal.publication.DefaultMavenPublication)?.component
// Don't publish libraries included into jvm-runtime-*.
// Or whatever `cpp-library` considers their public api.
if (component is CppBinary ||
component?.javaClass?.simpleName == "MainLibraryVariant") return false
return true
}
fun Task.disable() {
enabled = false
......@@ -800,14 +808,14 @@ afterEvaluate {
}
}
// Disable publishing Gradle Metadata, because it seems unnecessary at the moment.
// Also generating metadata for default C++ publications fails
// Gradle metadata for default C++ publications fails.
tasks.withType(GenerateModuleMetadata::class).configureEach {
disable()
if (!this.publication.get().isSkikoPublication()) {
disable()
}
}
// Disable publishing for default publications, because
// publishing for default C++ publications fails
// Publishing for default C++ publications fails.
tasks.withType<AbstractPublishToMaven>().configureEach {
if (!publication.isSkikoPublication()) {
disable()
......@@ -860,39 +868,14 @@ publishing {
}
}
}
create<MavenPublication>("skikoMetadata") {
artifactId = SkikoArtifacts.metadataArtifactId
afterEvaluate {
artifact(project.tasks.named("metadataJar").get())
}
}
create<MavenPublication>("skikoJvm") {
artifactId = SkikoArtifacts.commonArtifactId
afterEvaluate {
artifact(skikoJvmJar.map { it.archiveFile.get() })
}
}
create<MavenPublication>("skikoJvmRuntime") {
artifactId = SkikoArtifacts.runtimeArtifactIdFor(targetOs, targetArch)
afterEvaluate {
artifact(skikoJvmRuntimeJar.map { it.archiveFile.get() })
}
}
if (supportNative) {
create<MavenPublication>("skikoNativeRuntime") {
artifactId = SkikoArtifacts.nativeRuntimeArtifactIdFor(targetOs, targetArch)
afterEvaluate {
artifact(project.tasks.withType(KotlinNativeCompile::class.java)
.single { it.name.startsWith("compileKotlin") } // Exclude compileTestKotlin.
.outputs.files.single { it.name.endsWith(".klib") })
}
}
}
create<MavenPublication>("skikoJsRuntime") {
artifactId = SkikoArtifacts.jsArtifactId
artifact(project.tasks.named("jsJar").get())
}
if (supportWasm) {
create<MavenPublication>("skikoWasmRuntime") {
artifactId = SkikoArtifacts.jsWasmArtifactId
......
......@@ -147,9 +147,7 @@ class SkikoProperties(private val myProject: Project) {
object SkikoArtifacts {
// names are also used in samples, e.g. samples/SkijaInjectSample/build.gradle
val commonArtifactId = "skiko-jvm"
val metadataArtifactId = "skiko-metadata"
val jsArtifactId = "skiko-js-runtime"
val jvmArtifactId = "skiko-jvm"
val jsWasmArtifactId = "skiko-js-wasm-runtime"
fun runtimeArtifactIdFor(os: OS, arch: Arch) =
"skiko-jvm-runtime-${targetId(os, arch)}"
......
......@@ -20,7 +20,7 @@ dependencies {
}
}
skikoDep(SkikoArtifacts.commonArtifactId)
skikoDep(SkikoArtifacts.jvmArtifactId)
skikoDep(SkikoArtifacts.runtimeArtifactIdFor(OS.Windows, Arch.X64))
skikoDep(SkikoArtifacts.runtimeArtifactIdFor(OS.Linux, Arch.X64))
skikoDep(SkikoArtifacts.runtimeArtifactIdFor(OS.Linux, Arch.Arm64))
......
kotlin.code.style=official
deploy.version=0.0.0
kotlin.mpp.enableGranularSourceSetsMetadata=true
dependencies.skia.windows-x64=m94-fd7c5792ca
dependencies.skia.linux-x64=m94-fd7c5792ca
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment