Skip to content

Commit b306895

Browse files
authored
feat: allow riscv64 support via custom electron dist (#8143)
1 parent e77de9f commit b306895

File tree

8 files changed

+30
-4
lines changed

8 files changed

+30
-4
lines changed

.changeset/stupid-avocados-appear.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
"app-builder-lib": minor
3+
"builder-util": minor
4+
"electron-builder": minor
5+
---
6+
7+
feat: support riscv64 architecture for electron-builder (requires custom prebuilt artifact via `electronDist`)

docs/api/electron-builder.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ Developer API only. See [Configuration](../configuration/configuration.md) for u
3636
<li><strong><code id="Arch-armv7l">armv7l</code></strong></li>
3737
<li><strong><code id="Arch-arm64">arm64</code></strong></li>
3838
<li><strong><code id="Arch-universal">universal</code></strong></li>
39+
<li><strong><code id="Arch-riscv64">riscv64</code></strong></li>
3940
</ul>
4041
<p><a name="module_electron-builder.build"></a></p>
4142
<h2 id="electron-builder.build(rawoptions)-%E2%87%92-promise%3Carray%3Cstring%3E%3E"><code>electron-builder.build(rawOptions)</code> ⇒ <code>Promise&lt;Array&lt;String&gt;&gt;</code></h2>

packages/app-builder-lib/scheme.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"arm64",
312312
"armv7l",
313313
"ia32",
314+
"riscv64",
314315
"universal",
315316
"x64"
316317
],
@@ -5941,6 +5942,7 @@
59415942
"arm64",
59425943
"armv7l",
59435944
"ia32",
5945+
"riscv64",
59445946
"universal",
59455947
"x64"
59465948
],

packages/app-builder-lib/src/linuxPackager.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,8 @@ export function toAppImageOrSnapArch(arch: Arch): string {
8181
return "arm"
8282
case Arch.arm64:
8383
return "arm_aarch64"
84+
case Arch.riscv64:
85+
return "riscv64"
8486

8587
default:
8688
throw new Error(`Unsupported arch ${arch}`)

packages/app-builder-lib/src/targets/snap.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,8 @@ function archNameToTriplet(arch: Arch): string {
328328
return "arm-linux-gnueabihf"
329329
case Arch.arm64:
330330
return "aarch64-linux-gnu"
331+
case Arch.riscv64:
332+
return "riscv64-linux-gnu"
331333

332334
default:
333335
throw new Error(`Unsupported arch ${arch}`)

packages/builder-util/src/arch.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ export enum Arch {
44
armv7l,
55
arm64,
66
universal,
7+
riscv64,
78
}
89

9-
export type ArchType = "x64" | "ia32" | "armv7l" | "arm64" | "universal"
10+
export type ArchType = "x64" | "ia32" | "armv7l" | "arm64" | "universal" | "riscv64"
1011

1112
export function toLinuxArchString(arch: Arch, targetName: string): string {
1213
switch (arch) {
@@ -18,14 +19,15 @@ export function toLinuxArchString(arch: Arch, targetName: string): string {
1819
return targetName === "snap" || targetName === "deb" ? "armhf" : targetName === "flatpak" ? "arm" : "armv7l"
1920
case Arch.arm64:
2021
return targetName === "pacman" || targetName === "rpm" || targetName === "flatpak" ? "aarch64" : "arm64"
21-
22+
case Arch.riscv64:
23+
return "riscv64"
2224
default:
2325
throw new Error(`Unsupported arch ${arch}`)
2426
}
2527
}
2628

2729
export function getArchCliNames(): Array<string> {
28-
return [Arch[Arch.ia32], Arch[Arch.x64], Arch[Arch.armv7l], Arch[Arch.arm64]]
30+
return [Arch[Arch.ia32], Arch[Arch.x64], Arch[Arch.armv7l], Arch[Arch.arm64], Arch[Arch.riscv64]]
2931
}
3032

3133
export function getArchSuffix(arch: Arch, defaultArch?: string): string {
@@ -45,6 +47,8 @@ export function archFromString(name: string): Arch {
4547
return Arch.armv7l
4648
case "universal":
4749
return Arch.universal
50+
case "riscv64":
51+
return Arch.riscv64
4852
default:
4953
throw new Error(`Unsupported arch ${name}`)
5054
}

packages/electron-builder/src/builder.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export interface CliOptions extends PackagerOptions, PublishOptions {
1818
armv7l?: boolean
1919
arm64?: boolean
2020
universal?: boolean
21+
riscv64?: boolean
2122

2223
dir?: boolean
2324
}
@@ -48,6 +49,9 @@ export function normalizeOptions(args: CliOptions): BuildOptions {
4849
if (args.universal) {
4950
result.push(Arch.universal)
5051
}
52+
if (args.riscv64) {
53+
result.push(Arch.riscv64)
54+
}
5155

5256
return result.length === 0 && currentIfNotSpecified ? [archFromString(process.arch)] : result
5357
}

test/src/helpers/downloadElectron.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,17 @@ export function downloadAllRequiredElectronVersions(): Promise<any> {
4242

4343
const versions: Array<any> = []
4444
for (const platform of platforms) {
45-
const archs: string[] =
45+
const archs =
4646
platform === "mas" || platform === "darwin"
4747
? ["x64"]
4848
: platform === "win32"
4949
? ["ia32", "x64"]
5050
: require(`${path.join(__dirname, "../../..")}/packages/builder-util/out/util`).getArchCliNames()
5151
for (const arch of archs) {
52+
if (arch === "riscv64") {
53+
// No prebuilt electron for riscv64
54+
continue
55+
}
5256
if (gte(ELECTRON_VERSION, "19.0.0") && platform === "linux" && arch === "ia32") {
5357
// Chromium dropped support for ia32 linux binaries in 102.0.4999.0
5458
// https://www.electronjs.org/docs/latest/breaking-changes#removed-ia32-linux-binaries

0 commit comments

Comments
 (0)