Make SQLite native linker lookup portable
This commit is contained in:
parent
bb9af2258b
commit
f8d2533b48
@ -19,11 +19,39 @@ plugins {
|
|||||||
alias(libs.plugins.kotlinMultiplatform)
|
alias(libs.plugins.kotlinMultiplatform)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
import org.gradle.api.Project
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.tasks.KotlinNativeTest
|
import org.jetbrains.kotlin.gradle.targets.native.tasks.KotlinNativeTest
|
||||||
|
|
||||||
group = "net.sergeych"
|
group = "net.sergeych"
|
||||||
version = "unspecified"
|
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 {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
maven("https://maven.universablockchain.com/")
|
maven("https://maven.universablockchain.com/")
|
||||||
@ -56,12 +84,14 @@ kotlin {
|
|||||||
executable()
|
executable()
|
||||||
all {
|
all {
|
||||||
linkerOpts(
|
linkerOpts(
|
||||||
"-L/lib/x86_64-linux-gnu",
|
*project.sqliteLinuxLinkerOpts(
|
||||||
"-l:libsqlite3.so.0",
|
"/lib/x86_64-linux-gnu",
|
||||||
"-ldl",
|
"/usr/lib/x86_64-linux-gnu",
|
||||||
"-lpthread",
|
"/lib64",
|
||||||
"-lm",
|
"/usr/lib64",
|
||||||
"-Wl,--allow-shlib-undefined"
|
"/lib",
|
||||||
|
"/usr/lib"
|
||||||
|
).toTypedArray()
|
||||||
)
|
)
|
||||||
if (buildType == org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType.RELEASE) {
|
if (buildType == org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType.RELEASE) {
|
||||||
debuggable = false
|
debuggable = false
|
||||||
|
|||||||
@ -19,6 +19,7 @@
|
|||||||
* LyngIO: Compose Multiplatform library module depending on :lynglib
|
* LyngIO: Compose Multiplatform library module depending on :lynglib
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import org.gradle.api.Project
|
||||||
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
||||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||||
|
|
||||||
@ -31,6 +32,33 @@ plugins {
|
|||||||
group = "net.sergeych"
|
group = "net.sergeych"
|
||||||
version = "0.0.1-SNAPSHOT"
|
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 {
|
kotlin {
|
||||||
jvmToolchain(17)
|
jvmToolchain(17)
|
||||||
jvm()
|
jvm()
|
||||||
@ -67,12 +95,24 @@ kotlin {
|
|||||||
binaries.all {
|
binaries.all {
|
||||||
when (konanTarget.name) {
|
when (konanTarget.name) {
|
||||||
"linux_x64" -> linkerOpts(
|
"linux_x64" -> linkerOpts(
|
||||||
"-L/lib/x86_64-linux-gnu",
|
*project.sqliteLinuxLinkerOpts(
|
||||||
"-l:libsqlite3.so.0",
|
"/lib/x86_64-linux-gnu",
|
||||||
"-ldl",
|
"/usr/lib/x86_64-linux-gnu",
|
||||||
"-lpthread",
|
"/lib64",
|
||||||
"-lm",
|
"/usr/lib64",
|
||||||
"-Wl,--allow-shlib-undefined"
|
"/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")
|
else -> linkerOpts("-lsqlite3")
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user