diff --git a/.github/actions/android/action.yml b/.github/actions/android/action.yml index 0147576..41c7551 100644 --- a/.github/actions/android/action.yml +++ b/.github/actions/android/action.yml @@ -14,10 +14,10 @@ inputs: runs: using: "composite" steps: - - uses: actions/setup-java@v4 + - uses: actions/setup-java@v5 with: distribution: "temurin" - java-version: "17" + java-version: "25" - name: Validate Gradle wrapper uses: gradle/actions/wrapper-validation@v4 @@ -39,7 +39,7 @@ runs: if: ${{ inputs.sign-publication == '1' }} run: | cd android - ./gradlew build zipPublication -PgpgKey=${{ inputs.gpg-key }} -PgpgPassword=${{ inputs.gpg-password }} + ./gradlew build zipPublication -PgpgKey=${{ inputs.gpg-key }} -PgpgPassword=${{ inputs.gpg-password }} ls -lh build/outputs/aar find build/repository @@ -60,3 +60,19 @@ runs: compression-level: 0 # We're uploading a zip, no need to compress again path: android/build/distributions/powersync_android.zip if-no-files-found: error + + - name: Copy static libraries + shell: bash + run: | + cp target/aarch64-linux-android/release/libpowersync.a libpowersync_aarch64.android.a + cp target/armv7-linux-androideabi/release/libpowersync.a libpowersync_armv7.android.a + cp target/i686-linux-android/release/libpowersync.a libpowersync_x86.android.a + cp target/x86_64-linux-android/release/libpowersync.a libpowersync_x64.android.a + + - name: Upload static libraries + uses: actions/upload-artifact@v4 + with: + name: android-static + retention-days: 14 + path: | + *.a diff --git a/.github/actions/linux/action.yml b/.github/actions/linux/action.yml index d1bbfbc..12fed29 100644 --- a/.github/actions/linux/action.yml +++ b/.github/actions/linux/action.yml @@ -30,8 +30,5 @@ runs: name: linux-library retention-days: 14 path: | - libpowersync_x64.so - libpowersync_x86.so - libpowersync_aarch64.so - libpowersync_armv7.so - libpowersync_riscv64gc.so + *.so + *.linux.a diff --git a/.github/actions/macos/action.yml b/.github/actions/macos/action.yml index e304e37..b28eb14 100644 --- a/.github/actions/macos/action.yml +++ b/.github/actions/macos/action.yml @@ -22,5 +22,5 @@ runs: name: macos-library retention-days: 14 path: | - libpowersync_x64.dylib - libpowersync_aarch64.dylib + *.dylib + *.macos.a diff --git a/.github/actions/windows/action.yml b/.github/actions/windows/action.yml index 46d55c2..f94d05e 100644 --- a/.github/actions/windows/action.yml +++ b/.github/actions/windows/action.yml @@ -23,6 +23,5 @@ runs: name: windows-library retention-days: 14 path: | - powersync_x64.dll - powersync_aarch64.dll - powersync_x86.dll + *.dll + *.lib diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1cfc5cf..a5894cc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -179,18 +179,26 @@ jobs: with: submodules: true - - name: Download libs + - name: Download Linux libraries uses: actions/download-artifact@v5 with: name: linux-library - - name: Download libs + - name: Download macOS libraries uses: actions/download-artifact@v5 with: name: macos-library - - name: Download libs + - name: Download Windows libraries + uses: actions/download-artifact@v5 + with: + name: windows-library + - name: Download Windows libraries uses: actions/download-artifact@v5 with: name: windows-library + - name: Download static Android libraries + uses: actions/download-artifact@v5 + with: + name: android-static - name: List libraries run: ls -al @@ -201,8 +209,10 @@ jobs: GH_REPO: ${{ github.repository }} run: | gh release upload "${{ needs.draft_release.outputs.tag }}" *.dll + gh release upload "${{ needs.draft_release.outputs.tag }}" *.lib gh release upload "${{ needs.draft_release.outputs.tag }}" *.dylib gh release upload "${{ needs.draft_release.outputs.tag }}" *.so + gh release upload "${{ needs.draft_release.outputs.tag }}" *.a publish_wasm: name: Publish WASM builds diff --git a/android/build.gradle.kts b/android/build.gradle.kts index ebdd465..f452b4c 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -1,4 +1,3 @@ -import org.gradle.tooling.BuildException import java.util.Base64 import java.util.Properties import kotlin.io.path.Path @@ -54,30 +53,48 @@ fun ndkPath(): String { error("Expected an NDK 28 or later installation in $ndks") } -val buildRust = tasks.register("buildRust") { +fun Exec.rustCompilation(project: String, output: String? = null) { group = "build" environment("ANDROID_NDK_HOME", ndkPath()) workingDir("..") - commandLine( - "cargo", - "ndk", - "-t", - "armeabi-v7a", - "-t", - "arm64-v8a", - "-t", - "x86", - "-t", - "x86_64", - "-o", - "./android/build/intermediates/jniLibs", - "build", - "--release", - "-Zbuild-std", - "-p", - "powersync_loadable" - ) + val args = buildList { + this += listOf( + "cargo", + "ndk", + "-t", + "armeabi-v7a", + "-t", + "arm64-v8a", + "-t", + "x86", + "-t", + "x86_64", + ) + + output?.let { + this += "-o" + this += it + } + + this += listOf( + "build", + "--release", + "-Zbuild-std", + "-p", + project, + ) + } + + commandLine(args) +} + +val buildRust = tasks.register("buildRust") { + rustCompilation("powersync_loadable", "./android/build/intermediates/jniLibs") +} + +val buildRustStatic = tasks.register("buildRustStatic") { + rustCompilation("powersync_static") } val prefabAar = tasks.register("prefabAar") { @@ -199,5 +216,5 @@ val zipPublication by tasks.registering(Zip::class) { } tasks.named("build") { - dependsOn(prefabAar) + dependsOn(prefabAar, buildRustStatic) } diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index ff23a68..2e11132 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/tool/build_linux.sh b/tool/build_linux.sh index f5aad70..1a4295e 100755 --- a/tool/build_linux.sh +++ b/tool/build_linux.sh @@ -1,26 +1,32 @@ -#!/bin/sh +#!/bin/bash set -e +function compile() { + local triple=$1 + local suffix=$2 + + cargo build -p powersync_loadable -Z build-std=panic_abort,core,alloc --release --target $triple + cargo build -p powersync_static -Z build-std=panic_abort,core,alloc --release --target $triple + + mv "target/$triple/release/libpowersync.so" "libpowersync_$suffix.so" + mv "target/$triple/release/libpowersync.a" "libpowersync_$suffix.linux.a" +} + case "$1" in x64) - cargo build -p powersync_loadable -Z build-std=panic_abort,core,alloc --release --target x86_64-unknown-linux-gnu - mv "target/x86_64-unknown-linux-gnu/release/libpowersync.so" "libpowersync_x64.so" + compile x86_64-unknown-linux-gnu x64 ;; x86) - cargo build -p powersync_loadable -Z build-std=panic_abort,core,alloc --release --target i686-unknown-linux-gnu - mv "target/i686-unknown-linux-gnu/release/libpowersync.so" "libpowersync_x86.so" + compile i686-unknown-linux-gnu x86 ;; aarch64) - cargo build -p powersync_loadable -Z build-std=panic_abort,core,alloc --release --target aarch64-unknown-linux-gnu - mv "target/aarch64-unknown-linux-gnu/release/libpowersync.so" "libpowersync_aarch64.so" + compile aarch64-unknown-linux-gnu aarch64 ;; armv7) - cargo build -p powersync_loadable -Z build-std=panic_abort,core,alloc --release --target armv7-unknown-linux-gnueabihf - mv "target/armv7-unknown-linux-gnueabihf/release/libpowersync.so" "libpowersync_armv7.so" + compile armv7-unknown-linux-gnueabihf armv7 ;; riscv64gc) - cargo build -p powersync_loadable -Z build-std=panic_abort,core,alloc --release --target riscv64gc-unknown-linux-gnu - mv "target/riscv64gc-unknown-linux-gnu/release/libpowersync.so" "libpowersync_riscv64gc.so" + compile riscv64gc-unknown-linux-gnu riscv64gc ;; *) echo "Unknown architecture" diff --git a/tool/build_macos.sh b/tool/build_macos.sh index 01e3bd3..d1d25db 100755 --- a/tool/build_macos.sh +++ b/tool/build_macos.sh @@ -1,10 +1,19 @@ #!/bin/sh set -e +function compile() { + local triple=$1 + local suffix=$2 + + cargo build -p powersync_loadable -Z build-std=panic_abort,core,alloc --release --target $triple + cargo build -p powersync_static -Z build-std=panic_abort,core,alloc --release --target $triple + + mv "target/$triple/release/libpowersync.dylib" "libpowersync_$suffix.dylib" + mv "target/$triple/release/libpowersync.a" "libpowersync_$suffix.macos.a" +} + if [ "$1" = "x64" ]; then - cargo build -Z build-std=panic_abort,core,alloc -p powersync_loadable --release --target x86_64-apple-darwin - mv "target/x86_64-apple-darwin/release/libpowersync.dylib" "libpowersync_x64.dylib" + compile x86_64-apple-darwin x64 else - cargo build -Z build-std=panic_abort,core,alloc -p powersync_loadable --release --target aarch64-apple-darwin - mv "target/aarch64-apple-darwin/release/libpowersync.dylib" "libpowersync_aarch64.dylib" + compile aarch64-apple-darwin aarch64 fi diff --git a/tool/build_windows.sh b/tool/build_windows.sh index e4469eb..0e3c6fc 100755 --- a/tool/build_windows.sh +++ b/tool/build_windows.sh @@ -1,18 +1,26 @@ #!/bin/sh set -e +function compile() { + local triple=$1 + local suffix=$2 + + cargo build -p powersync_loadable -Z build-std=panic_abort,core,alloc --release --target $triple + cargo build -p powersync_static -Z build-std=panic_abort,core,alloc --release --target $triple + + mv "target/$triple/release/powersync.dll" "powersync_$suffix.dll" + mv "target/$triple/release/powersync.lib" "powersync_$suffix.lib" +} + case "$1" in x64) - cargo build -Z build-std=panic_abort,core,alloc -p powersync_loadable --release --target x86_64-pc-windows-msvc - mv "target/x86_64-pc-windows-msvc/release/powersync.dll" "powersync_x64.dll" + compile x86_64-pc-windows-msvc x64 ;; x86) - cargo build -Z build-std=panic_abort,core,alloc -p powersync_loadable --release --target i686-pc-windows-msvc - mv "target/i686-pc-windows-msvc/release/powersync.dll" "powersync_x86.dll" + compile i686-pc-windows-msvc x86 ;; aarch64) - cargo build -Z build-std=panic_abort,core,alloc -p powersync_loadable --release --target aarch64-pc-windows-msvc - mv "target/aarch64-pc-windows-msvc/release/powersync.dll" "powersync_aarch64.dll" + compile aarch64-pc-windows-msvc aarch64 ;; *) echo "Unknown architecture"