diff --git a/src/builder.ts b/src/builder.ts index 6148fe74086..82e4d5cc9c3 100644 --- a/src/builder.ts +++ b/src/builder.ts @@ -28,6 +28,7 @@ export interface CliOptions extends PackagerOptions, PublishOptions { x64?: boolean ia32?: boolean + armv7l?: boolean dir?: boolean @@ -60,18 +61,18 @@ export function normalizeOptions(args: CliOptions): BuildOptions { } function commonArch(): Array { - if (args.ia32 && args.x64) { - return [Arch.x64, Arch.ia32] + const result = Array() + if (args.x64) { + result.push(Arch.x64) } - else if (args.ia32) { - return [Arch.ia32] + if (args.armv7l) { + result.push(Arch.armv7l) } - else if (args.x64) { - return [Arch.x64] - } - else { - return [archFromString(process.arch)] + if (args.ia32) { + result.push(Arch.ia32) } + + return result.length === 0 ? [archFromString(process.arch)] : result } let archToType = targets.get(platform) @@ -161,6 +162,7 @@ export function normalizeOptions(args: CliOptions): BuildOptions { delete result.ia32 delete result.x64 + delete result.armv7l return result } diff --git a/src/cliOptions.ts b/src/cliOptions.ts index 9ae31c4f1df..c0fe95c8be8 100644 --- a/src/cliOptions.ts +++ b/src/cliOptions.ts @@ -40,6 +40,11 @@ export function createYargs(): any { describe: "Build for ia32", type: "boolean", }) + .option("armv7l", { + group: buildGroup, + describe: "Build for armv7l", + type: "boolean", + }) .option("dir", { group: buildGroup, describe: "Build unpacked dir. Useful to test.", diff --git a/src/metadata.ts b/src/metadata.ts index 0a9b09b7b78..69a565f4bf2 100755 --- a/src/metadata.ts +++ b/src/metadata.ts @@ -446,7 +446,7 @@ export class Platform { } export enum Arch { - ia32, x64 + ia32, x64, armv7l } export function archFromString(name: string): Arch { @@ -456,6 +456,9 @@ export function archFromString(name: string): Arch { if (name === "ia32") { return Arch.ia32 } + if (name === "armv7l") { + return Arch.armv7l + } throw new Error(`Unsupported arch ${name}`) } \ No newline at end of file diff --git a/src/node-gyp-rebuild.ts b/src/node-gyp-rebuild.ts index e46881b5324..87dd1f55a1e 100644 --- a/src/node-gyp-rebuild.ts +++ b/src/node-gyp-rebuild.ts @@ -12,7 +12,7 @@ const __awaiter = require("./util/awaiter") const args: any = yargs .option("arch", { - choices: ["ia32", "x64"], + choices: ["ia32", "x64", "armv7l"], }).argv const projectDir = process.cwd() diff --git a/src/packager.ts b/src/packager.ts index 06b35c03473..ed4829f722e 100644 --- a/src/packager.ts +++ b/src/packager.ts @@ -257,7 +257,7 @@ export function normalizePlatforms(rawPlatforms: Array | stri return [Platform.MAC, Platform.LINUX, Platform.WINDOWS] } else if (process.platform === Platform.LINUX.nodeName) { - // MacOS code sign works only on MacOS + // macOS code sign works only on macOS return [Platform.LINUX, Platform.WINDOWS] } else { diff --git a/src/targets/fpm.ts b/src/targets/fpm.ts index f464957cef8..ee3b93c82c5 100644 --- a/src/targets/fpm.ts +++ b/src/targets/fpm.ts @@ -80,7 +80,7 @@ export default class FpmTarget extends TargetEx { const args = [ "-s", "dir", "-t", target, - "--architecture", arch === Arch.ia32 ? "i386" : "amd64", + "--architecture", arch === Arch.ia32 ? "i386" : (arch === Arch.x64 ? "amd64" : "armv7l"), "--name", appInfo.name, "--force", "--after-install", scripts[0], diff --git a/test/src/helpers/packTester.ts b/test/src/helpers/packTester.ts index c74276caa74..5329214e476 100755 --- a/test/src/helpers/packTester.ts +++ b/test/src/helpers/packTester.ts @@ -221,7 +221,7 @@ async function checkLinuxResult(outDir: string, packager: Packager, checkOptions } })) - const packageFile = `${outDir}/TestApp-${appInfo.version}-${arch === Arch.ia32 ? "ia32" : "amd64"}.deb` + const packageFile = `${outDir}/TestApp-${appInfo.version}-${arch === Arch.ia32 ? "ia32" : (arch === Arch.x64 ? "amd64" : "armv7l")}.deb` assertThat(await getContents(packageFile)).isEqualTo(expectedContents) if (arch === Arch.ia32) { assertThat(await getContents(`${outDir}/TestApp-${appInfo.version}-i386.deb`)).isEqualTo(expectedContents) diff --git a/test/src/helpers/runTests.ts b/test/src/helpers/runTests.ts index bf64bc91bcf..54f162025cd 100755 --- a/test/src/helpers/runTests.ts +++ b/test/src/helpers/runTests.ts @@ -91,7 +91,8 @@ function downloadAllRequiredElectronVersions(): Promise { } for (let platform of platforms) { - for (let arch of (platform === "mas" || platform === "darwin" ? ["x64"] : ["ia32", "x64"])) { + const archs = (platform === "mas" || platform === "darwin") ? ["x64"] : (platform === "win32" ? ["ia32", "x64"] : ["ia32", "x64", "armv7l"]) + for (let arch of archs) { downloadPromises.push(downloadElectron({ version: ELECTRON_VERSION, arch: arch, diff --git a/test/src/linuxPackagerTest.ts b/test/src/linuxPackagerTest.ts index 49a64bac37b..6895883111a 100755 --- a/test/src/linuxPackagerTest.ts +++ b/test/src/linuxPackagerTest.ts @@ -3,12 +3,15 @@ import { modifyPackageJson, app, appThrows } from "./helpers/packTester" import { remove } from "fs-extra-p" import * as path from "path" import { Platform } from "out" +import { Arch } from "out/metadata" //noinspection JSUnusedLocalSymbols const __awaiter = require("out/util/awaiter") test.ifNotWindows("deb", app({targets: Platform.LINUX.createTarget("deb")})) +test.ifNotWindows("arm deb", app({targets: Platform.LINUX.createTarget("deb", Arch.armv7l)})) + test.ifDevOrLinuxCi("AppImage", app({targets: Platform.LINUX.createTarget()})) test.ifDevOrLinuxCi("AppImage - default icon", app({targets: Platform.LINUX.createTarget("appimage")}, {