Skip to content

Commit 710d79c

Browse files
authored
Add linux arm64 target (#120)
1 parent ad2ad8f commit 710d79c

File tree

8 files changed

+44
-12
lines changed

8 files changed

+44
-12
lines changed

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ jobs:
110110
- name: Publish Linux
111111
if: matrix.os == 'ubuntu-latest'
112112
shell: bash
113-
run: ./gradlew publishAndroidPublicationToMavenLocal publishLinuxX64PublicationToMavenLocal :jni:jvm:linux:publishJvmPublicationToMavenLocal
113+
run: ./gradlew publishAndroidPublicationToMavenLocal publishLinuxArm64PublicationToMavenLocal publishLinuxX64PublicationToMavenLocal :jni:jvm:linux:publishJvmPublicationToMavenLocal
114114
- name: Publish Windows
115115
if: matrix.os == 'windows-latest'
116116
shell: msys2 {0}

.github/workflows/snapshot.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ jobs:
3131
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
3232
sudo udevadm control --reload-rules
3333
sudo udevadm trigger --name-match=kvm
34+
- name: Install cross compiler
35+
if: matrix.os == 'ubuntu-latest'
36+
run: sudo apt install g++-aarch64-linux-gnu binutils-aarch64-linux-gnu
3437
- name: Cached Konan
3538
uses: actions/cache@v4
3639
with:
@@ -119,7 +122,7 @@ jobs:
119122
- name: Publish Linux
120123
if: matrix.os == 'ubuntu-latest'
121124
shell: bash
122-
run: ./gradlew publishAndroidPublicationToMavenLocal publishLinuxX64PublicationToMavenLocal :jni:jvm:linux:publishJvmPublicationToMavenLocal -PsnapshotNumber=${{ github.run_number }} -PgitRef=${{ github.ref }}
125+
run: ./gradlew publishAndroidPublicationToMavenLocal publishLinuxArm64PublicationToMavenLocal publishLinuxX64PublicationToMavenLocal :jni:jvm:linux:publishJvmPublicationToMavenLocal -PsnapshotNumber=${{ github.run_number }} -PgitRef=${{ github.ref }}
123126
- name: Publish Windows
124127
if: matrix.os == 'windows-latest'
125128
shell: msys2 {0}

build.gradle.kts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ buildscript {
2323

2424
allprojects {
2525
group = "fr.acinq.secp256k1"
26-
version = "0.17.1"
26+
version = "0.17.2-SNAPSHOT"
2727

2828
repositories {
2929
google()
@@ -59,6 +59,10 @@ kotlin {
5959
secp256k1CInterop("host")
6060
}
6161

62+
linuxArm64 {
63+
secp256k1CInterop("linuxArm64")
64+
}
65+
6266
macosX64 {
6367
secp256k1CInterop("host")
6468
}
@@ -91,9 +95,9 @@ allprojects {
9195
val currentOs = OperatingSystem.current()
9296
val targets = when {
9397
currentOs.isLinux -> listOf()
94-
currentOs.isMacOsX -> listOf("linuxX64")
95-
currentOs.isWindows -> listOf("linuxX64")
96-
else -> listOf("linuxX64")
98+
currentOs.isMacOsX -> listOf("linuxX64", "linuxArm64")
99+
currentOs.isWindows -> listOf("linuxX64", "linuxArm64")
100+
else -> listOf("linuxX64", "linuxArm64")
97101
}.mapNotNull { kotlin.targets.findByName(it) as? KotlinNativeTarget }
98102

99103
configure(targets) {

native/build.gradle.kts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,21 @@ val buildSecp256k1Host by tasks.creating(Exec::class) {
3030
commandLine(bash, "-l", "build.sh")
3131
}
3232

33+
// specific build task for linux arm64, which is cross-compiled on a linux x64 host
34+
val buildSecp256k1LinuxArm64 by tasks.creating(Exec::class) {
35+
group = "build"
36+
buildSecp256k1.dependsOn(this)
37+
38+
val target = "linuxArm64"
39+
40+
inputs.files(projectDir.resolve("build.sh"))
41+
outputs.dir(projectDir.resolve("build/$target"))
42+
43+
workingDir = projectDir
44+
environment("TARGET", target)
45+
commandLine(bash, "-l", "build.sh")
46+
}
47+
3348
val buildSecp256k1Ios by tasks.creating(Exec::class) {
3449
group = "build"
3550
buildSecp256k1.dependsOn(this)

native/build.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ if [ "$TARGET" == "mingw" ]; then
1616
CONF_OPTS=" --host=x86_64-w64-mingw32"
1717
elif [ "$TARGET" == "linux" ]; then
1818
CFLAGS="-fPIC"
19+
elif [ "$TARGET" == "linuxArm64" ]; then
20+
CFLAGS="-fPIC"
21+
CONF_OPTS="--host=aarch64-linux-gnu"
1922
elif [ "$TARGET" == "darwin" ]; then
2023
CFLAGS="-arch arm64 -arch x86_64"
2124
LDFLAGS="-arch arm64 -arch x86_64"

publishing/secp256k1-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 macosarm64 macosx64 jni-android jni-common jni-jvm-darwin jni-jvm-extract jni-jvm-linux jni-jvm-mingw jni-jvm jvm linuxx64; do
24+
for i in iosarm64 iossimulatorarm64 iosx64 macosarm64 macosx64 jni-android jni-common jni-jvm-darwin jni-jvm-extract jni-jvm-linux jni-jvm-mingw jni-jvm jvm linuxarm64 linuxx64; do
2525
cd fr/acinq/secp256k1/secp256k1-kmp-$i/$VERSION
2626

2727
case $i in
@@ -35,7 +35,7 @@ for i in iosarm64 iossimulatorarm64 iosx64 macosarm64 macosx64 jni-android jni-c
3535
-Dsources=$ARTIFACT_ID_BASE-$i-$VERSION-sources.jar \
3636
-Djavadoc=$ARTIFACT_ID_BASE-$i-$VERSION-javadoc.jar
3737
;;
38-
linuxx64)
38+
linuxx64 | linuxarm64)
3939
mvn deploy:deploy-file -DrepositoryId=ossrh -Durl=https://oss.sonatype.org/content/repositories/snapshots/ \
4040
-DpomFile=$ARTIFACT_ID_BASE-$i-$VERSION.pom \
4141
-Dfile=$ARTIFACT_ID_BASE-$i-$VERSION.klib \

publishing/secp256k1-kmp-staging-upload.sh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ for i in secp256k1-kmp \
2828
secp256k1-kmp-jni-jvm-linux \
2929
secp256k1-kmp-jni-jvm-mingw \
3030
secp256k1-kmp-jvm \
31-
secp256k1-kmp-linuxx64
31+
secp256k1-kmp-linuxarm64 \
32+
secp256k1-kmp-linuxx64 \
33+
secp256k1-kmp-macosarm64 \
34+
secp256k1-kmp-macosx64
3235
do
3336
pushd .
3437
cd release/fr/acinq/secp256k1/$i/$VERSION

src/nativeInterop/cinterop/libsecp256k1.def

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,13 @@ package = secp256k1
33
headers = secp256k1.h secp256k1_ecdh.h secp256k1_recovery.h secp256k1_extrakeys.h secp256k1_schnorrsig.h secp256k1_musig.h
44
headerFilter = secp256k1/** secp256k1_ecdh.h secp256k1_recovery.h secp256k1_extrakeys.h secp256k1_schnorrsig.h secp256k1_musig.h secp256k1.h
55

6-
staticLibraries.linux = libsecp256k1.a
7-
libraryPaths.linux = c/secp256k1/build/linux/ native/build/linux/ native/build/darwin/
8-
linkerOpts.linux = -L/usr/lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/local/lib
6+
staticLibraries.linux_x64 = libsecp256k1.a
7+
libraryPaths.linux_x64 = c/secp256k1/build/linux/ native/build/linux/
8+
linkerOpts.linux_x64 = -L/usr/lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/local/lib
9+
10+
staticLibraries.linux_arm64 = libsecp256k1.a
11+
libraryPaths.linux_arm64 = c/secp256k1/build/linuxArm65/ native/build/linuxArm64/
12+
linkerOpts.linux_arm64 = -L/usr/aarch64-linux-gnu/lib
913

1014
staticLibraries.macos_x64 = libsecp256k1.a
1115
libraryPaths.macos_x64 = c/secp256k1/build/darwin/ native/build/darwin/

0 commit comments

Comments
 (0)