Skip to content

Commit b20b314

Browse files
sstonepm47
andauthored
Add support for linux arm64 target (#769)
* Add support for linux arm64 target * added platform-specific http-client config (#777) This is useful to work around an issue with the curl client on Linux Arm64. * Use bitcoin-kmp 0.22.2 and secp256k1-kmp 0.17.3 --------- Co-authored-by: Pierre-Marie Padiou <[email protected]>
1 parent 28346a5 commit b20b314

File tree

11 files changed

+50
-10
lines changed

11 files changed

+50
-10
lines changed

gradle/libs.versions.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ kotlinx-coroutines = "1.10.1"
44
kotlinx-datetime = "0.6.2"
55
kotlinx-serialization = "1.8.0"
66
ktor = "3.1.0"
7-
bitcoinkmp = "0.22.1" # when upgrading bitcoin-kmp, keep secpjnijvm in sync!
8-
secpjnijvm = "0.17.1"
7+
bitcoinkmp = "0.22.2" # when upgrading bitcoin-kmp, keep secpjnijvm in sync!
8+
secpjnijvm = "0.17.3"
99
kermit = "2.0.5"
1010
slf4j = "2.0.16"
1111

modules/core/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ kotlin {
2424

2525
linuxX64()
2626

27+
linuxArm64()
28+
2729
if (currentOs.isMacOsX) {
2830
macosX64()
2931

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package fr.acinq.lightning.io
2+
3+
import io.ktor.client.*
4+
5+
actual fun MyHttpClient(block: HttpClientConfig<*>.() -> Unit): HttpClient = HttpClient(block)

modules/core/src/commonMain/kotlin/fr/acinq/lightning/blockchain/mempool/MempoolSpaceClient.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,26 @@ import fr.acinq.bitcoin.TxId
55
import fr.acinq.lightning.blockchain.Feerates
66
import fr.acinq.lightning.blockchain.IClient
77
import fr.acinq.lightning.blockchain.fee.FeeratePerByte
8+
import fr.acinq.lightning.io.MyHttpClient
89
import fr.acinq.lightning.logging.LoggerFactory
910
import fr.acinq.lightning.logging.debug
1011
import fr.acinq.lightning.logging.warning
1112
import fr.acinq.lightning.utils.sat
12-
import io.ktor.client.*
1313
import io.ktor.client.call.*
1414
import io.ktor.client.plugins.*
1515
import io.ktor.client.plugins.contentnegotiation.*
1616
import io.ktor.client.request.*
1717
import io.ktor.client.statement.*
1818
import io.ktor.http.*
1919
import io.ktor.serialization.kotlinx.json.*
20-
import kotlinx.serialization.ExperimentalSerializationApi
2120
import kotlinx.serialization.Serializable
2221
import kotlinx.serialization.json.Json
2322

2423
class MempoolSpaceClient(val mempoolUrl: Url, loggerFactory: LoggerFactory) : IClient {
2524

2625
private val logger = loggerFactory.newLogger(this::class)
2726

28-
val client = HttpClient {
27+
val client = MyHttpClient {
2928
install(ContentNegotiation) {
3029
json(json = Json {
3130
prettyPrint = true
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package fr.acinq.lightning.io
2+
3+
import io.ktor.client.*
4+
5+
// This allows setting platform and engine-specific parameters for the client.
6+
// It is particularly useful as a workaround for https://github.com/ktorio/ktor/pull/4758
7+
expect fun MyHttpClient(
8+
block: HttpClientConfig<*>.() -> Unit = {}
9+
): HttpClient

modules/core/src/commonTest/kotlin/fr/acinq/lightning/tests/bitcoind/BitcoinJsonRPCClient.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package fr.acinq.lightning.tests.bitcoind
22

3-
import fr.acinq.lightning.logging.*
3+
import fr.acinq.lightning.io.MyHttpClient
4+
import fr.acinq.lightning.logging.debug
45
import fr.acinq.lightning.tests.utils.testLoggerFactory
56
import fr.acinq.lightning.utils.JsonRPCResponse
6-
import io.ktor.client.*
77
import io.ktor.client.call.*
88
import io.ktor.client.plugins.auth.*
99
import io.ktor.client.plugins.auth.providers.*
@@ -23,7 +23,7 @@ object BitcoinJsonRPCClient {
2323
private val scheme = if (ssl) "https" else "http"
2424
private val serviceUri = "$scheme://$host:$port/wallet/" // wallet/ specifies to use the default bitcoind wallet, named ""
2525

26-
private val httpClient = HttpClient {
26+
private val httpClient = MyHttpClient {
2727
install(ContentNegotiation) {
2828
json()
2929
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package fr.acinq.lightning.io
2+
3+
import io.ktor.client.*
4+
5+
actual fun MyHttpClient(block: HttpClientConfig<*>.() -> Unit): HttpClient = HttpClient(block)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package fr.acinq.lightning.io
2+
3+
import io.ktor.client.*
4+
import io.ktor.client.engine.curl.*
5+
6+
actual fun MyHttpClient(block: HttpClientConfig<*>.() -> Unit): HttpClient = HttpClient {
7+
engine {
8+
// Workaround for https://github.com/ktorio/ktor/pull/4758
9+
if (this is CurlClientEngineConfig) {
10+
caPath = "/etc/ssl/certs"
11+
}
12+
}
13+
block(this)
14+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package fr.acinq.lightning.io
2+
3+
import io.ktor.client.*
4+
5+
actual fun MyHttpClient(block: HttpClientConfig<*>.() -> Unit): HttpClient = HttpClient(block)

publishing/lightning-kmp-snapshot-deploy.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ mvn deploy:deploy-file -DrepositoryId=ossrh -Durl=https://oss.sonatype.org/conte
2121
-Djavadoc=$ARTIFACT_ID_BASE-$VERSION-javadoc.jar
2222
popd
2323
pushd .
24-
for i in iosarm64 iossimulatorarm64 iosx64 jvm macosarm64 macosx64 linuxx64; do
24+
for i in iosarm64 iossimulatorarm64 iosx64 jvm macosarm64 macosx64 linuxarm64 linuxx64; do
2525
cd fr/acinq/lightning/$ARTIFACT_ID_BASE-$i/$VERSION
2626
case $i in
2727
iosarm64 | iossimulatorarm64 | iosx64)
@@ -44,7 +44,7 @@ for i in iosarm64 iossimulatorarm64 iosx64 jvm macosarm64 macosx64 linuxx64; do
4444
-Dsources=$ARTIFACT_ID_BASE-$i-$VERSION-sources.jar \
4545
-Djavadoc=$ARTIFACT_ID_BASE-$i-$VERSION-javadoc.jar
4646
;;
47-
linuxx64)
47+
linuxx64 | linuxarm64)
4848
mvn deploy:deploy-file -DrepositoryId=ossrh -Durl=https://oss.sonatype.org/content/repositories/snapshots/ \
4949
-DpomFile=$ARTIFACT_ID_BASE-$i-$VERSION.pom \
5050
-Dfile=$ARTIFACT_ID_BASE-$i-$VERSION.klib \

0 commit comments

Comments
 (0)