mirror of
https://github.com/CringeStudios/element-desktop.git
synced 2025-01-18 23:44:59 +01:00
218 lines
5.6 KiB
TypeScript
218 lines
5.6 KiB
TypeScript
/*
|
|
Copyright 2024 New Vector Ltd.
|
|
Copyright 2021 The Matrix.org Foundation C.I.C.
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
|
|
Please see LICENSE files in the repository root for full details.
|
|
*/
|
|
|
|
import { GLIBC, MUSL, familySync as processLibC } from "detect-libc";
|
|
|
|
// We borrow Rust's target naming scheme as a way of expressing all target
|
|
// details in a single string.
|
|
// See https://doc.rust-lang.org/rustc/platform-support.html.
|
|
export type TargetId =
|
|
| "aarch64-apple-darwin"
|
|
| "x86_64-apple-darwin"
|
|
| "universal-apple-darwin"
|
|
| "i686-pc-windows-msvc"
|
|
| "x86_64-pc-windows-msvc"
|
|
| "aarch64-pc-windows-msvc"
|
|
| "i686-unknown-freebsd"
|
|
| "x86_64-unknown-freebsd"
|
|
| "aarch64-unknown-freebsd"
|
|
| "i686-unknown-linux-musl"
|
|
| "i686-unknown-linux-gnu"
|
|
| "x86_64-unknown-linux-musl"
|
|
| "x86_64-unknown-linux-gnu"
|
|
| "aarch64-unknown-linux-musl"
|
|
| "aarch64-unknown-linux-gnu"
|
|
| "powerpc64le-unknown-linux-musl"
|
|
| "powerpc64le-unknown-linux-gnu";
|
|
|
|
// Values are expected to match those used in `process.platform`.
|
|
export type Platform = "darwin" | "freebsd" | "linux" | "win32";
|
|
|
|
// Values are expected to match those used in `process.arch`.
|
|
export type Arch = "arm64" | "ia32" | "x64" | "ppc64" | "universal";
|
|
|
|
// Values are expected to match those used by Visual Studio's `vcvarsall.bat`.
|
|
// See https://docs.microsoft.com/cpp/build/building-on-the-command-line?view=msvc-160#vcvarsall-syntax
|
|
export type VcVarsArch = "amd64" | "arm64" | "x86";
|
|
|
|
export type Target = {
|
|
id: TargetId;
|
|
platform: Platform;
|
|
arch: Arch;
|
|
};
|
|
|
|
export type WindowsTarget = Target & {
|
|
platform: "win32";
|
|
vcVarsArch: VcVarsArch;
|
|
};
|
|
|
|
export type LinuxTarget = Target & {
|
|
platform: "linux";
|
|
libC: typeof GLIBC | typeof MUSL;
|
|
};
|
|
|
|
export type UniversalTarget = Target & {
|
|
arch: "universal";
|
|
subtargets: Target[];
|
|
};
|
|
|
|
const aarch64AppleDarwin: Target = {
|
|
id: "aarch64-apple-darwin",
|
|
platform: "darwin",
|
|
arch: "arm64",
|
|
};
|
|
|
|
const x8664AppleDarwin: Target = {
|
|
id: "x86_64-apple-darwin",
|
|
platform: "darwin",
|
|
arch: "x64",
|
|
};
|
|
|
|
const universalAppleDarwin: UniversalTarget = {
|
|
id: "universal-apple-darwin",
|
|
platform: "darwin",
|
|
arch: "universal",
|
|
subtargets: [aarch64AppleDarwin, x8664AppleDarwin],
|
|
};
|
|
|
|
const i686PcWindowsMsvc: WindowsTarget = {
|
|
id: "i686-pc-windows-msvc",
|
|
platform: "win32",
|
|
arch: "ia32",
|
|
vcVarsArch: "x86",
|
|
};
|
|
|
|
const x8664PcWindowsMsvc: WindowsTarget = {
|
|
id: "x86_64-pc-windows-msvc",
|
|
platform: "win32",
|
|
arch: "x64",
|
|
vcVarsArch: "amd64",
|
|
};
|
|
|
|
const aarch64WindowsMsvc: WindowsTarget = {
|
|
id: "aarch64-pc-windows-msvc",
|
|
platform: "win32",
|
|
arch: "arm64",
|
|
vcVarsArch: "arm64",
|
|
};
|
|
|
|
const i686UnknownFreebsd: Target = {
|
|
id: "i686-unknown-freebsd",
|
|
platform: "freebsd",
|
|
arch: "ia32",
|
|
};
|
|
|
|
const x8664UnknownFreebsd: Target = {
|
|
id: "x86_64-unknown-freebsd",
|
|
platform: "freebsd",
|
|
arch: "x64",
|
|
};
|
|
|
|
const aarch64UnknownFreebsd: Target = {
|
|
id: "aarch64-unknown-freebsd",
|
|
platform: "freebsd",
|
|
arch: "arm64",
|
|
};
|
|
|
|
const x8664UnknownLinuxGnu: LinuxTarget = {
|
|
id: "x86_64-unknown-linux-gnu",
|
|
platform: "linux",
|
|
arch: "x64",
|
|
libC: GLIBC,
|
|
};
|
|
|
|
const x8664UnknownLinuxMusl: LinuxTarget = {
|
|
id: "x86_64-unknown-linux-musl",
|
|
platform: "linux",
|
|
arch: "x64",
|
|
libC: MUSL,
|
|
};
|
|
|
|
const i686UnknownLinuxGnu: LinuxTarget = {
|
|
id: "i686-unknown-linux-gnu",
|
|
platform: "linux",
|
|
arch: "ia32",
|
|
libC: GLIBC,
|
|
};
|
|
|
|
const i686UnknownLinuxMusl: LinuxTarget = {
|
|
id: "i686-unknown-linux-musl",
|
|
platform: "linux",
|
|
arch: "ia32",
|
|
libC: MUSL,
|
|
};
|
|
|
|
const aarch64UnknownLinuxGnu: LinuxTarget = {
|
|
id: "aarch64-unknown-linux-gnu",
|
|
platform: "linux",
|
|
arch: "arm64",
|
|
libC: GLIBC,
|
|
};
|
|
|
|
const aarch64UnknownLinuxMusl: LinuxTarget = {
|
|
id: "aarch64-unknown-linux-musl",
|
|
platform: "linux",
|
|
arch: "arm64",
|
|
libC: MUSL,
|
|
};
|
|
|
|
const powerpc64leUnknownLinuxGnu: LinuxTarget = {
|
|
id: "powerpc64le-unknown-linux-gnu",
|
|
platform: "linux",
|
|
arch: "ppc64",
|
|
libC: GLIBC,
|
|
};
|
|
|
|
const powerpc64leUnknownLinuxMusl: LinuxTarget = {
|
|
id: "powerpc64le-unknown-linux-musl",
|
|
platform: "linux",
|
|
arch: "ppc64",
|
|
libC: MUSL,
|
|
};
|
|
|
|
export const TARGETS: Record<TargetId, Target> = {
|
|
// macOS
|
|
"aarch64-apple-darwin": aarch64AppleDarwin,
|
|
"x86_64-apple-darwin": x8664AppleDarwin,
|
|
"universal-apple-darwin": universalAppleDarwin,
|
|
// Windows
|
|
"i686-pc-windows-msvc": i686PcWindowsMsvc,
|
|
"x86_64-pc-windows-msvc": x8664PcWindowsMsvc,
|
|
"aarch64-pc-windows-msvc": aarch64WindowsMsvc,
|
|
// FreeBSD
|
|
"i686-unknown-freebsd": i686UnknownFreebsd,
|
|
"x86_64-unknown-freebsd": x8664UnknownFreebsd,
|
|
"aarch64-unknown-freebsd": aarch64UnknownFreebsd,
|
|
// Linux
|
|
"i686-unknown-linux-musl": i686UnknownLinuxMusl,
|
|
"i686-unknown-linux-gnu": i686UnknownLinuxGnu,
|
|
"x86_64-unknown-linux-musl": x8664UnknownLinuxMusl,
|
|
"x86_64-unknown-linux-gnu": x8664UnknownLinuxGnu,
|
|
"aarch64-unknown-linux-musl": aarch64UnknownLinuxMusl,
|
|
"aarch64-unknown-linux-gnu": aarch64UnknownLinuxGnu,
|
|
"powerpc64le-unknown-linux-musl": powerpc64leUnknownLinuxMusl,
|
|
"powerpc64le-unknown-linux-gnu": powerpc64leUnknownLinuxGnu,
|
|
};
|
|
|
|
export function getHost(): Target | undefined {
|
|
return Object.values(TARGETS).find(
|
|
(target) =>
|
|
target.platform === process.platform &&
|
|
target.arch === process.arch &&
|
|
(process.platform !== "linux" || (target as LinuxTarget).libC === processLibC()),
|
|
);
|
|
}
|
|
|
|
export function isHostId(id: TargetId): boolean {
|
|
return getHost()?.id === id;
|
|
}
|
|
|
|
export function isHost(target: Target): boolean {
|
|
return getHost()?.id === target.id;
|
|
}
|