From 5dcee96117b07bd08f4e46b7134afcf0e628bd0f Mon Sep 17 00:00:00 2001 From: Levi Zim Date: Sat, 1 Feb 2025 15:21:11 +0100 Subject: [PATCH] feat: basic support for linux riscv64 --- .changes/riscv-support.md | 8 +++++ .github/workflows/publish-cli-js.yml | 9 +++++ .../tauri-bundler/src/bundle/linux/debian.rs | 1 + crates/tauri-bundler/src/bundle/linux/rpm.rs | 1 + crates/tauri-bundler/src/bundle/platform.rs | 2 ++ crates/tauri-bundler/src/bundle/settings.rs | 4 +++ crates/tauri-cli/src/interface/rust.rs | 5 +-- crates/tauri-utils/src/platform.rs | 2 ++ packages/cli/.cargo/config.toml | 3 ++ packages/cli/npm/linux-riscv64-gnu/README.md | 3 ++ .../cli/npm/linux-riscv64-gnu/package.json | 35 +++++++++++++++++++ packages/cli/package.json | 1 + 12 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 .changes/riscv-support.md create mode 100644 packages/cli/npm/linux-riscv64-gnu/README.md create mode 100644 packages/cli/npm/linux-riscv64-gnu/package.json diff --git a/.changes/riscv-support.md b/.changes/riscv-support.md new file mode 100644 index 000000000000..a0f1b1906855 --- /dev/null +++ b/.changes/riscv-support.md @@ -0,0 +1,8 @@ +--- +'tauri-cli': 'minor:enhance' +'tauri-utils': 'minor:enhance' +'tauri-bundler': 'minor:enhance' +'@tauri-apps/cli': 'minor:enhance' +--- + +Add basic support for linux riscv64 platform. diff --git a/.github/workflows/publish-cli-js.yml b/.github/workflows/publish-cli-js.yml index 8d39c04eeeae..2398518ab7b7 100644 --- a/.github/workflows/publish-cli-js.yml +++ b/.github/workflows/publish-cli-js.yml @@ -88,6 +88,15 @@ jobs: rustup target add aarch64-unknown-linux-musl pnpm build --target aarch64-unknown-linux-musl /aarch64-linux-musl-cross/bin/aarch64-linux-musl-strip *.node + - host: ubuntu-22.04 + architecture: x64 + target: riscv64gc-unknown-linux-gnu + setup: | + sudo apt-get update + sudo apt-get install gcc-riscv64-linux-gnu g++-riscv64-linux-gnu -y + build: | + pnpm build --target=riscv64gc-unknown-linux-gnu + riscv64-linux-gnu-strip *.node name: stable - ${{ matrix.settings.target }} - node@20 runs-on: ${{ matrix.settings.host }} steps: diff --git a/crates/tauri-bundler/src/bundle/linux/debian.rs b/crates/tauri-bundler/src/bundle/linux/debian.rs index 8573072c9716..14f432f7216e 100644 --- a/crates/tauri-bundler/src/bundle/linux/debian.rs +++ b/crates/tauri-bundler/src/bundle/linux/debian.rs @@ -46,6 +46,7 @@ pub fn bundle_project(settings: &Settings) -> crate::Result> { Arch::AArch64 => "arm64", Arch::Armhf => "armhf", Arch::Armel => "armel", + Arch::Riscv64 => "riscv64", target => { return Err(crate::Error::ArchError(format!( "Unsupported architecture: {:?}", diff --git a/crates/tauri-bundler/src/bundle/linux/rpm.rs b/crates/tauri-bundler/src/bundle/linux/rpm.rs index f0e0f4893c60..d273656c5adf 100644 --- a/crates/tauri-bundler/src/bundle/linux/rpm.rs +++ b/crates/tauri-bundler/src/bundle/linux/rpm.rs @@ -29,6 +29,7 @@ pub fn bundle_project(settings: &Settings) -> crate::Result> { Arch::AArch64 => "aarch64", Arch::Armhf => "armhfp", Arch::Armel => "armel", + Arch::Riscv64 => "riscv64", target => { return Err(crate::Error::ArchError(format!( "Unsupported architecture: {:?}", diff --git a/crates/tauri-bundler/src/bundle/platform.rs b/crates/tauri-bundler/src/bundle/platform.rs index 40c98860864e..25562596f629 100644 --- a/crates/tauri-bundler/src/bundle/platform.rs +++ b/crates/tauri-bundler/src/bundle/platform.rs @@ -57,6 +57,8 @@ pub fn target_triple() -> Result { "armv7".into() } else if cfg!(target_arch = "aarch64") { "aarch64".into() + } else if cfg!(target_arch = "riscv64") { + "riscv64".into() } else { return Err(crate::Error::ArchError(String::from( "Unable to determine target-architecture", diff --git a/crates/tauri-bundler/src/bundle/settings.rs b/crates/tauri-bundler/src/bundle/settings.rs index de7e32a1e3b1..2538f6826802 100644 --- a/crates/tauri-bundler/src/bundle/settings.rs +++ b/crates/tauri-bundler/src/bundle/settings.rs @@ -723,6 +723,8 @@ pub enum Arch { Armhf, /// For the AArch32 / ARM32 instruction sets with soft-float (32 bits). Armel, + /// For the RISC-V instruction sets (64 bits). + Riscv64, /// For universal macOS applications. Universal, } @@ -900,6 +902,8 @@ impl Settings { Arch::Armel } else if self.target.starts_with("aarch64") { Arch::AArch64 + } else if self.target.starts_with("riscv64") { + Arch::Riscv64 } else if self.target.starts_with("universal") { Arch::Universal } else { diff --git a/crates/tauri-cli/src/interface/rust.rs b/crates/tauri-cli/src/interface/rust.rs index d3e6950db31d..50415f2e5fd8 100644 --- a/crates/tauri-cli/src/interface/rust.rs +++ b/crates/tauri-cli/src/interface/rust.rs @@ -796,8 +796,9 @@ impl AppSettings for RustAppSettings { config: &Config, features: &[String], ) -> crate::Result { - let arch64bits = - self.target_triple.starts_with("x86_64") || self.target_triple.starts_with("aarch64"); + let arch64bits = self.target_triple.starts_with("x86_64") + || self.target_triple.starts_with("aarch64") + || self.target_triple.starts_with("riscv64"); let updater_enabled = config.bundle.create_updater_artifacts != Updater::Bool(false); let v1_compatible = matches!(config.bundle.create_updater_artifacts, Updater::String(_)); diff --git a/crates/tauri-utils/src/platform.rs b/crates/tauri-utils/src/platform.rs index f795820691dd..94d86a4901dc 100644 --- a/crates/tauri-utils/src/platform.rs +++ b/crates/tauri-utils/src/platform.rs @@ -191,6 +191,8 @@ pub fn target_triple() -> crate::Result { "armv7" } else if cfg!(target_arch = "aarch64") { "aarch64" + } else if cfg!(target_arch = "riscv64") { + "riscv64" } else { return Err(crate::Error::Architecture); }; diff --git a/packages/cli/.cargo/config.toml b/packages/cli/.cargo/config.toml index 28b5f661bb39..a3cb4bcbee61 100644 --- a/packages/cli/.cargo/config.toml +++ b/packages/cli/.cargo/config.toml @@ -8,6 +8,9 @@ rustflags = ["-C", "target-feature=-crt-static"] [target.armv7-unknown-linux-gnueabihf] linker = "arm-linux-gnueabihf-gcc" +[target.riscv64gc-unknown-linux-gnu] +linker = "riscv64-linux-gnu-gcc" + [target.x86_64-pc-windows-msvc] rustflags = ["-C", "target-feature=+crt-static"] [target.i686-pc-windows-msvc] diff --git a/packages/cli/npm/linux-riscv64-gnu/README.md b/packages/cli/npm/linux-riscv64-gnu/README.md new file mode 100644 index 000000000000..2f941644a488 --- /dev/null +++ b/packages/cli/npm/linux-riscv64-gnu/README.md @@ -0,0 +1,3 @@ +# `@tauri-apps/cli-linux-riscv64-gnu` + +This is the **riscv64gc-unknown-linux-gnu** binary for `@tauri-apps/cli` diff --git a/packages/cli/npm/linux-riscv64-gnu/package.json b/packages/cli/npm/linux-riscv64-gnu/package.json new file mode 100644 index 000000000000..779b164a2bcd --- /dev/null +++ b/packages/cli/npm/linux-riscv64-gnu/package.json @@ -0,0 +1,35 @@ +{ + "name": "@tauri-apps/cli-linux-riscv64-gnu", + "version": "0.0.0", + "repository": { + "type": "git", + "url": "git+https://github.com/tauri-apps/tauri.git" + }, + "homepage": "https://github.com/tauri-apps/tauri#readme", + "bugs": { + "url": "https://github.com/tauri-apps/tauri/issues" + }, + "contributors": [ + "Tauri Programme within The Commons Conservancy" + ], + "license": "Apache-2.0 OR MIT", + "publishConfig": { + "access": "public" + }, + "os": [ + "linux" + ], + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "main": "cli.linux-riscv64-gnu.node", + "files": [ + "cli.linux-riscv64-gnu.node" + ], + "engines": { + "node": ">= 10" + } +} diff --git a/packages/cli/package.json b/packages/cli/package.json index d6894c808cd5..93e7b889f06b 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -32,6 +32,7 @@ "aarch64-unknown-linux-musl", "armv7-unknown-linux-gnueabihf", "x86_64-unknown-linux-musl", + "riscv64gc-unknown-linux-gnu", "i686-pc-windows-msvc", "aarch64-pc-windows-msvc" ]