Make SQLite native linker lookup portable
This commit is contained in:
parent
bb9af2258b
commit
f8d2533b48
@ -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
|
||||
|
||||
@ -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")
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user