build: bump lightning-kmp-app to bbba08b, building lightning-kmp from source
lightning-kmp-app moves 6745d88 -> bbba08b, four commits: 57353cf Minor updates 9f3cd72 Build lightning-kmp from the experimental submodule via a composite build f22c30a Follow the submodule chain onto Gradle 9.7.1 bbba08b Declare the ios targets only on a mac, so the IDE can import the project 9f3cd72 is the substantive one. lightning-kmp no longer comes from maven central: the submodule now carries its own experimental/lightning-kmp submodule on branch `threshold` -- the branch with the FROST/prefractal signers -- and substitutes fr.acinq.lightning:lightning-kmp-core for that build's project. That build includes bitcoin-kmp, which includes secp256k1-kmp, which compiles the C library from a secp256k1-zkp fork. So this repo's build tree is now four levels deep and compiles native code. Cloning therefore needs `git submodule update --init --recursive`, and because each included build resolves the android SDK from its own local.properties rather than inheriting the root's, the three new nested builds each need a (gitignored) local.properties with sdk.dir. 57353cf changed two signatures that MantraApplication implements -- LightningApplication gained getApplicationContext(), and BusinessManager.initialize now takes the application rather than a Context. Neither needed a source change: MantraApplication extends android.app.Application, which already supplies getApplicationContext(), and it was already passing `this`, which satisfies the narrowed parameter type. The rest of this commit is what the update forces on the outer build. gradle-wrapper.properties, 9.3.1 -> 9.7.1: f22c30a moved every build in the chain onto 9.7.1. An included build does not use its own wrapper -- the root build's gradle version runs the whole tree -- so this repo has to follow for the chain to build at all. gradle.properties, configuration cache off: secp256k1-kmp's `:jni:generateHeaders` and `:native:buildSecp256k1<target>` both hold gradle script object references and cannot be serialized. The configuration cache covers a whole build tree and has no per-build opt-out, so an included build's incompatibility is this build's problem. The comment records how to undo this once those tasks are fixed upstream. composeApp/build.gradle.kts, ios targets gated on the host: secp256k1-kmp declares a libsecp256k1 cinterop, which makes gradle switch off klib cross compilation for apple targets. On linux nothing in the tree then offers an ios variant of fr.acinq.phoenix:lightning-kmp-app, and the ios compilations failed with "No matching variant of project ':lightning-kmp-app:library'" -- not a warning, a build failure. The gate covers the target declarations, the iosMain dependencies (the source set only exists when the targets do) and the kspIos* configurations (likewise). This mirrors bbba08b, which applied the same gate inside the submodule for the same reason. secp256k1-frost-kmp d3b294d applies that gate there too. Substitution rules apply across a whole build tree, so that project's own lightning-kmp-core coordinate started resolving to the source project without it asking, and every apple source set stopped resolving. The android build masked it -- ios compilations are not in its task graph -- but kmpPartiallyResolvedDependenciesChecker reported it and compileAppleMainKotlinMetadata failed outright, which would have broken IDE import. Note that `:composeApp:compileCommonMainKotlinMetadata` no longer exists on a linux host. With ios gated off, androidTarget is the only declared target (jvm() is still commented out), and KMP does not generate a commonMain metadata compilation for a single-target project. `:composeApp:compileDebugKotlinAndroid` is the check now; it passes clean, with none of the resolution errors above. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -25,13 +25,21 @@ kotlin {
|
||||
}
|
||||
}
|
||||
|
||||
listOf(
|
||||
iosArm64(),
|
||||
iosSimulatorArm64()
|
||||
).forEach { iosTarget ->
|
||||
iosTarget.binaries.framework {
|
||||
baseName = "ComposeApp"
|
||||
isStatic = true
|
||||
// Declared only on a mac, mirroring the gate lightning-kmp-app's :library applies to its own ios
|
||||
// targets. Down the composite chain secp256k1-kmp declares a libsecp256k1 cinterop, which makes
|
||||
// gradle switch off klib cross compilation for apple targets, so on a linux/windows host nothing
|
||||
// in the build tree offers an ios variant of fr.acinq.phoenix:lightning-kmp-app. Declaring these
|
||||
// targets anyway leaves every ios compilation unable to resolve it and fails the build outright.
|
||||
// Building an ios binary needs a mac regardless.
|
||||
if (org.gradle.internal.os.OperatingSystem.current().isMacOsX) {
|
||||
listOf(
|
||||
iosArm64(),
|
||||
iosSimulatorArm64()
|
||||
).forEach { iosTarget ->
|
||||
iosTarget.binaries.framework {
|
||||
baseName = "ComposeApp"
|
||||
isStatic = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -119,8 +127,12 @@ kotlin {
|
||||
implementation(compose.desktop.currentOs)
|
||||
implementation(libs.kotlinx.coroutinesSwing)
|
||||
}
|
||||
iosMain.dependencies {
|
||||
implementation(libs.sqldelight.native.driver)
|
||||
// Only exists when the ios targets above were declared; the default hierarchy template
|
||||
// creates this source set from them.
|
||||
if (org.gradle.internal.os.OperatingSystem.current().isMacOsX) {
|
||||
iosMain.dependencies {
|
||||
implementation(libs.sqldelight.native.driver)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -164,9 +176,13 @@ dependencies {
|
||||
debugImplementation(libs.compose.uiTooling)
|
||||
// ksp(libs.androidx.room3.compiler)
|
||||
add("kspAndroid", libs.androidx.room3.compiler)
|
||||
add("kspIosSimulatorArm64", libs.androidx.room3.compiler)
|
||||
// add("kspIosX64", libs.androidx.room.compiler)
|
||||
add("kspIosArm64", libs.androidx.room3.compiler)
|
||||
// These configurations only exist when the ios targets are declared, which the kotlin block
|
||||
// above does only on a mac.
|
||||
if (org.gradle.internal.os.OperatingSystem.current().isMacOsX) {
|
||||
add("kspIosSimulatorArm64", libs.androidx.room3.compiler)
|
||||
// add("kspIosX64", libs.androidx.room.compiler)
|
||||
add("kspIosArm64", libs.androidx.room3.compiler)
|
||||
}
|
||||
// add("kspJvm", libs.androidx.room3.compiler)
|
||||
// Add any other platform target you use in your project, for example kspDesktop
|
||||
}
|
||||
|
||||
@@ -4,7 +4,13 @@ kotlin.daemon.jvmargs=-Xmx12g
|
||||
|
||||
#Gradle
|
||||
org.gradle.jvmargs=-Xmx8g -Dfile.encoding=UTF-8
|
||||
org.gradle.configuration-cache=true
|
||||
# Off because the lightning-kmp-app composite build reaches, through its experimental/lightning-kmp
|
||||
# -> bitcoin-kmp -> secp256k1-kmp submodule chain, two tasks that cannot be serialized:
|
||||
# secp256k1-kmp's `:jni:generateHeaders` and `:native:buildSecp256k1<target>` both hold gradle
|
||||
# script object references. The configuration cache covers a whole build tree, so an included
|
||||
# build's incompatibility is this build's problem -- there is no per-build opt-out. Re-enable once
|
||||
# those two tasks are fixed upstream in the secp256k1-kmp fork, or if that includeBuild goes.
|
||||
org.gradle.configuration-cache=false
|
||||
org.gradle.caching=true
|
||||
|
||||
#Android
|
||||
|
||||
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,6 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.1-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
||||
Submodule lightning-kmp-app updated: 6745d881d8...bbba08b122
Submodule secp256k1-frost-kmp updated: e67fe177e4...d3b294d4c5
Reference in New Issue
Block a user