@@ -4,13 +4,25 @@ import org.gradle.kotlin.dsl.support.useToRun
44import org.jetbrains.dokka.gradle.tasks.DokkaGeneratePublicationTask
55import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
66import org.jetbrains.kotlin.gradle.dsl.JvmTarget
7+ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
78import org.jetbrains.kotlin.gradle.tasks.CInteropProcess
89import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
9- import org.jetbrains.kotlin.konan.target.PlatformManager
1010
1111inline 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+
1426val os: OperatingSystem = OperatingSystem .current()
1527val libsDir = layout.buildDirectory.get().dir(" libs" )
1628val 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 {
0 commit comments