Make SQLite native linker lookup portable

This commit is contained in:
Sergey Chernov 2026-04-15 23:47:38 +03:00
parent bb9af2258b
commit f8d2533b48
2 changed files with 82 additions and 12 deletions

View File

@ -19,11 +19,39 @@ plugins {
alias(libs.plugins.kotlinMultiplatform)
}
import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.targets.native.tasks.KotlinNativeTest
group = "net.sergeych"
version = "unspecified"
private fun Project.sqliteLinuxLinkerOpts(vararg defaultDirs: String): List<String> {
val overrideDir = providers.gradleProperty("sqlite3.lib.dir").orNull
?: providers.environmentVariable("SQLITE3_LIB_DIR").orNull
val candidateDirs = buildList {
if (!overrideDir.isNullOrBlank()) {
add(file(overrideDir))
}
defaultDirs.forEach { add(file(it)) }
}.distinctBy { it.absolutePath }
val discoveredLib = sequenceOf("libsqlite3.so", "libsqlite3.so.0")
.mapNotNull { libraryName ->
candidateDirs.firstOrNull { it.resolve(libraryName).isFile }?.let { dir ->
listOf("-L${dir.absolutePath}", "-l:$libraryName")
}
}
.firstOrNull()
?: listOf("-lsqlite3")
return discoveredLib + listOf(
"-ldl",
"-lpthread",
"-lm",
"-Wl,--allow-shlib-undefined"
)
}
repositories {
mavenCentral()
maven("https://maven.universablockchain.com/")
@ -56,12 +84,14 @@ kotlin {
executable()
all {
linkerOpts(
"-L/lib/x86_64-linux-gnu",
"-l:libsqlite3.so.0",
"-ldl",
"-lpthread",
"-lm",
"-Wl,--allow-shlib-undefined"
*project.sqliteLinuxLinkerOpts(
"/lib/x86_64-linux-gnu",
"/usr/lib/x86_64-linux-gnu",
"/lib64",
"/usr/lib64",
"/lib",
"/usr/lib"
).toTypedArray()
)
if (buildType == org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType.RELEASE) {
debuggable = false

View File

@ -19,6 +19,7 @@
* LyngIO: Compose Multiplatform library module depending on :lynglib
*/
import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
@ -31,6 +32,33 @@ plugins {
group = "net.sergeych"
version = "0.0.1-SNAPSHOT"
private fun Project.sqliteLinuxLinkerOpts(vararg defaultDirs: String): List<String> {
val overrideDir = providers.gradleProperty("sqlite3.lib.dir").orNull
?: providers.environmentVariable("SQLITE3_LIB_DIR").orNull
val candidateDirs = buildList {
if (!overrideDir.isNullOrBlank()) {
add(file(overrideDir))
}
defaultDirs.forEach { add(file(it)) }
}.distinctBy { it.absolutePath }
val discoveredLib = sequenceOf("libsqlite3.so", "libsqlite3.so.0")
.mapNotNull { libraryName ->
candidateDirs.firstOrNull { it.resolve(libraryName).isFile }?.let { dir ->
listOf("-L${dir.absolutePath}", "-l:$libraryName")
}
}
.firstOrNull()
?: listOf("-lsqlite3")
return discoveredLib + listOf(
"-ldl",
"-lpthread",
"-lm",
"-Wl,--allow-shlib-undefined"
)
}
kotlin {
jvmToolchain(17)
jvm()
@ -67,12 +95,24 @@ kotlin {
binaries.all {
when (konanTarget.name) {
"linux_x64" -> linkerOpts(
"-L/lib/x86_64-linux-gnu",
"-l:libsqlite3.so.0",
"-ldl",
"-lpthread",
"-lm",
"-Wl,--allow-shlib-undefined"
*project.sqliteLinuxLinkerOpts(
"/lib/x86_64-linux-gnu",
"/usr/lib/x86_64-linux-gnu",
"/lib64",
"/usr/lib64",
"/lib",
"/usr/lib"
).toTypedArray()
)
"linux_arm64" -> linkerOpts(
*project.sqliteLinuxLinkerOpts(
"/lib/aarch64-linux-gnu",
"/usr/lib/aarch64-linux-gnu",
"/lib64",
"/usr/lib64",
"/lib",
"/usr/lib"
).toTypedArray()
)
else -> linkerOpts("-lsqlite3")
}