Skip to content

Commit 2a7f09d

Browse files
build: fix native publication
1 parent 30785d1 commit 2a7f09d

File tree

6 files changed

+60
-64
lines changed

6 files changed

+60
-64
lines changed

.editorconfig

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ indent_size = 2
2525
[*.{bat,ps1}]
2626
end_of_line = crlf
2727

28+
[*.toml]
29+
max_line_length = 120
30+
2831
# noinspection EditorConfigKeyCorrectness
2932
[*.{kt,kts}]
3033
ktlint_code_style = android_studio

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ plugins {
22
alias(libs.plugins.kotlin.mpp) apply false
33
alias(libs.plugins.android.library) apply false
44
alias(libs.plugins.kotest) apply false
5+
alias(libs.plugins.ksp) apply false
56
alias(libs.plugins.dokka) apply false
67
}
78

gradle.properties

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ org.gradle.welcome=never
2121
kotlin.code.style=official
2222
# Enables the new Android multiplatform sourceset layout.
2323
kotlin.mpp.androidSourceSetLayoutVersion=2
24-
# Enable C interop sharing
24+
# Enables C interop sharing
2525
kotlin.mpp.enableCInteropCommonization=true
26-
# Enable cross-compilation of klib artifacts
27-
kotlin.native.enableKlibsCrossCompilation=true
28-
# Disable default stdlib dependency
26+
# Disables cross-compilation of klib artifacts
27+
kotlin.native.enableKlibsCrossCompilation=false
28+
# Disables default stdlib dependency
2929
kotlin.stdlib.default.dependency=false
30-
# Ignore disabled Kotlin/Native targets
30+
# Ignores disabled Kotlin/Native targets
3131
kotlin.native.ignoreDisabledTargets=true
3232

3333
# Enables the AndroidX package structure.

gradle/libs.versions.toml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
[versions]
22
kotlin-stdlib = "2.2.10"
33
android-gradle = {strictly = "8.11.1"}
4-
kotest = "6.0.+"
4+
kotest = "6.0.0"
55
dokka = "2.0.0"
66

77
[libraries]
88
kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin-stdlib" }
99
kotest-engine = { module = "io.kotest:kotest-framework-engine", version.ref = "kotest" }
10+
kotest-symbolprocessor = { module = "io.kotest:kotest-framework-symbol-processor", version.ref = "kotest" }
1011
kotest-assertions = { module = "io.kotest:kotest-assertions-core", version.ref = "kotest" }
1112
kotest-junit-runner = { module = "io.kotest:kotest-runner-junit5", version.ref = "kotest" }
1213
kotest-junit-reporter = { module = "io.kotest:kotest-extensions-junitxml", version.ref = "kotest" }
@@ -17,7 +18,8 @@ dokka-base = { module = "org.jetbrains.dokka:dokka-base", version.ref = "dokka"
1718
[plugins]
1819
kotlin-mpp = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin-stdlib" }
1920
android-library = { id = "com.android.library", version.ref = "android-gradle" }
20-
kotest = { id = "io.kotest.multiplatform", version.ref = "kotest" }
21+
kotest = { id = "io.kotest", version.ref = "kotest" }
22+
ksp = { id = "com.google.devtools.ksp", version = "2.2.10-2.0.2" }
2123
dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" }
2224

2325
[bundles]

ktreesitter/build.gradle.kts

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,25 @@ import org.gradle.kotlin.dsl.support.useToRun
44
import org.jetbrains.dokka.gradle.tasks.DokkaGeneratePublicationTask
55
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
66
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
7+
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
78
import org.jetbrains.kotlin.gradle.tasks.CInteropProcess
89
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
9-
import org.jetbrains.kotlin.konan.target.PlatformManager
1010

1111
inline val File.unixPath: String
1212
get() = if (!os.isWindows) path else path.replace("\\", "/")
1313

14+
fun KotlinNativeTarget.treesitter() {
15+
compilations.configureEach {
16+
cinterops.register("treesitter") {
17+
val srcDir = treesitterDir.resolve("lib/src")
18+
val includeDir = treesitterDir.resolve("lib/include")
19+
includeDirs.allHeaders(srcDir, includeDir)
20+
includeDirs.headerFilterOnly(includeDir)
21+
extraOpts("-libraryPath", libsDir.dir(konanTarget.name))
22+
}
23+
}
24+
}
25+
1426
val os: OperatingSystem = OperatingSystem.current()
1527
val libsDir = layout.buildDirectory.get().dir("libs")
1628
val treesitterDir = rootDir.resolve("tree-sitter")
@@ -23,6 +35,7 @@ plugins {
2335
alias(libs.plugins.kotlin.mpp)
2436
alias(libs.plugins.android.library)
2537
alias(libs.plugins.kotest)
38+
alias(libs.plugins.ksp)
2639
alias(libs.plugins.dokka)
2740
}
2841

@@ -40,30 +53,15 @@ kotlin {
4053
publishLibraryVariants("release")
4154
}
4255

43-
when {
44-
os.isLinux -> listOf(linuxX64(), linuxArm64())
45-
os.isWindows -> listOf(mingwX64())
46-
os.isMacOsX -> listOf(
47-
macosArm64(),
48-
macosX64(),
49-
iosArm64(),
50-
iosSimulatorArm64()
51-
)
52-
else -> {
53-
val arch = System.getProperty("os.arch")
54-
throw GradleException("Unsupported platform: $os ($arch)")
55-
}
56-
}.forEach { target ->
57-
target.compilations.configureEach {
58-
cinterops.create("treesitter") {
59-
val srcDir = treesitterDir.resolve("lib/src")
60-
val includeDir = treesitterDir.resolve("lib/include")
61-
includeDirs.allHeaders(srcDir, includeDir)
62-
includeDirs.headerFilterOnly(includeDir)
63-
extraOpts("-libraryPath", libsDir.dir(konanTarget.name))
64-
}
65-
}
66-
}
56+
linuxX64 { treesitter() }
57+
linuxArm64 { treesitter() }
58+
mingwX64 { treesitter() }
59+
macosArm64 { treesitter() }
60+
macosX64 { treesitter() }
61+
iosArm64 { treesitter() }
62+
iosSimulatorArm64 { treesitter() }
63+
64+
applyDefaultHierarchyTemplate()
6765

6866
jvmToolchain(17)
6967

@@ -93,6 +91,7 @@ kotlin {
9391
jvmTest {
9492
dependencies {
9593
implementation(libs.bundles.kotest.junit)
94+
implementation(libs.kotest.symbolprocessor)
9695
}
9796
}
9897

@@ -145,7 +144,7 @@ android {
145144
}
146145
}
147146

148-
tasks.create<Jar>("javadocJar") {
147+
tasks.register<Jar>("javadocJar") {
149148
group = "documentation"
150149
archiveClassifier.set("javadoc")
151150
from(files(rootDir.resolve("README.md")))
@@ -274,11 +273,8 @@ tasks.withType<CInteropProcess>().configureEach {
274273
"${konanTarget.family.staticPrefix}tree-sitter.${konanTarget.family.staticSuffix}"
275274
).asFile
276275
val objectFile = treesitterDir.resolve("lib.o")
277-
val loader = PlatformManager(konanHome.get(), false, konanDataDir.orNull).loader(konanTarget)
278276

279277
doFirst {
280-
if (!File(loader.absoluteTargetToolchain).isDirectory) loader.downloadDependencies()
281-
282278
val argsFile = File.createTempFile("args", null)
283279
argsFile.deleteOnExit()
284280
argsFile.writer().useToRun {

languages/java/build.gradle.kts

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,23 @@ import java.io.OutputStream.nullOutputStream
22
import org.gradle.internal.os.OperatingSystem
33
import org.gradle.kotlin.dsl.support.useToRun
44
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
5+
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
56
import org.jetbrains.kotlin.gradle.tasks.CInteropProcess
6-
import org.jetbrains.kotlin.konan.target.PlatformManager
77

88
inline val File.unixPath: String
99
get() = if (!os.isWindows) path else path.replace("\\", "/")
1010

11+
fun KotlinNativeTarget.treesitterJava() {
12+
compilations.configureEach {
13+
cinterops.create("treesitterJava") {
14+
definitionFile.set(generateTask.interopFile)
15+
includeDirs.allHeaders(grammarDir.resolve("bindings/c"))
16+
extraOpts("-libraryPath", libsDir.dir(konanTarget.name))
17+
tasks.getByName(interopProcessingTaskName).mustRunAfter(generateTask)
18+
}
19+
}
20+
}
21+
1122
val os: OperatingSystem = OperatingSystem.current()
1223
val libsDir = layout.buildDirectory.get().dir("libs")
1324
val grammarDir = projectDir.resolve("tree-sitter-java")
@@ -40,29 +51,15 @@ kotlin {
4051
publishLibraryVariants("release")
4152
}
4253

43-
when {
44-
os.isLinux -> listOf(linuxX64(), linuxArm64())
45-
os.isWindows -> listOf(mingwX64())
46-
os.isMacOsX -> listOf(
47-
macosArm64(),
48-
macosX64(),
49-
iosArm64(),
50-
iosSimulatorArm64()
51-
)
52-
else -> {
53-
val arch = System.getProperty("os.arch")
54-
throw GradleException("Unsupported platform: $os ($arch)")
55-
}
56-
}.forEach { target ->
57-
target.compilations.configureEach {
58-
cinterops.create(grammar.interopName.get()) {
59-
definitionFile.set(generateTask.interopFile)
60-
includeDirs.allHeaders(grammarDir.resolve("bindings/c"))
61-
extraOpts("-libraryPath", libsDir.dir(konanTarget.name))
62-
tasks.getByName(interopProcessingTaskName).mustRunAfter(generateTask)
63-
}
64-
}
65-
}
54+
linuxX64 { treesitterJava() }
55+
linuxArm64 { treesitterJava() }
56+
mingwX64 { treesitterJava() }
57+
macosArm64 { treesitterJava() }
58+
macosX64 { treesitterJava() }
59+
iosArm64 { treesitterJava() }
60+
iosSimulatorArm64 { treesitterJava() }
61+
62+
applyDefaultHierarchyTemplate()
6663

6764
jvmToolchain(17)
6865

@@ -132,11 +129,8 @@ tasks.withType<CInteropProcess>().configureEach {
132129
val objectFiles = grammarFiles.map {
133130
srcDir.resolve(it.nameWithoutExtension + ".o").path
134131
}.toTypedArray()
135-
val loader = PlatformManager(konanHome.get(), false, konanDataDir.orNull).loader(konanTarget)
136132

137133
doFirst {
138-
if (!File(loader.absoluteTargetToolchain).isDirectory) loader.downloadDependencies()
139-
140134
val argsFile = File.createTempFile("args", null)
141135
argsFile.deleteOnExit()
142136
argsFile.writer().useToRun {
@@ -169,7 +163,7 @@ tasks.withType<CInteropProcess>().configureEach {
169163
outputs.file(libFile)
170164
}
171165

172-
tasks.create<Jar>("javadocJar") {
166+
tasks.register<Jar>("javadocJar") {
173167
group = "documentation"
174168
archiveClassifier.set("javadoc")
175169
}

0 commit comments

Comments
 (0)