mirror of
https://github.com/dart-lang/sdk
synced 2024-10-06 15:39:54 +00:00
c747a25d66
TEST=local AOSP build Bug: https://github.com/flutter/flutter/issues/117973 CoreLibraryReviewExempt: VM-only Change-Id: I9417e86f025bebee359d8ba50ee6b5c8589c2744 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/303011 Reviewed-by: Daco Harkes <dacoharkes@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com> Commit-Queue: Ryan Macnak <rmacnak@google.com>
179 lines
6.1 KiB
Dart
179 lines
6.1 KiB
Dart
// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
part of dart.ffi;
|
|
|
|
/// An application binary interface (ABI).
|
|
///
|
|
/// An ABI defines the memory layout of data
|
|
/// and the function call protocol for native code.
|
|
/// It is usually defined by the an operating system for each
|
|
/// architecture that operating system runs on.
|
|
///
|
|
/// The Dart VM can run on a variety of operating systems and architectures.
|
|
/// Supported ABIs are represented by `Abi` objects.
|
|
/// See [values] for all the supported ABIs.
|
|
@Since('2.16')
|
|
class Abi {
|
|
/// The application binary interface for Android on the Arm architecture.
|
|
static const androidArm = _androidArm;
|
|
|
|
/// The application binary interface for Android on the Arm64 architecture.
|
|
static const androidArm64 = _androidArm64;
|
|
|
|
/// The application binary interface for Android on the IA32 architecture.
|
|
static const androidIA32 = _androidIA32;
|
|
|
|
/// The application binary interface for Android on the X64 architecture.
|
|
static const androidX64 = _androidX64;
|
|
|
|
/// The application binary interface for Android on 64-bit RISC-V.
|
|
static const androidRiscv64 = _androidRiscv64;
|
|
|
|
/// The application binary interface for Fuchsia on the Arm64 architecture.
|
|
static const fuchsiaArm64 = _fuchsiaArm64;
|
|
|
|
/// The application binary interface for Fuchsia on the X64 architecture.
|
|
static const fuchsiaX64 = _fuchsiaX64;
|
|
|
|
/// The application binary interface for Fuchsia on the Riscv64 architecture.
|
|
static const fuchsiaRiscv64 = _fuchsiaRiscv64;
|
|
|
|
/// The application binary interface for iOS on the Arm architecture.
|
|
static const iosArm = _iosArm;
|
|
|
|
/// The application binary interface for iOS on the Arm64 architecture.
|
|
static const iosArm64 = _iosArm64;
|
|
|
|
/// The application binary interface for iOS on the X64 architecture.
|
|
static const iosX64 = _iosX64;
|
|
|
|
/// The application binary interface for Linux on the Arm architecture.
|
|
///
|
|
/// Does not distinguish between hard and soft fp. Currently, no uses of Abi
|
|
/// require this distinction.
|
|
static const linuxArm = _linuxArm;
|
|
|
|
/// The application binary interface for linux on the Arm64 architecture.
|
|
static const linuxArm64 = _linuxArm64;
|
|
|
|
/// The application binary interface for linux on the IA32 architecture.
|
|
static const linuxIA32 = _linuxIA32;
|
|
|
|
/// The application binary interface for linux on the X64 architecture.
|
|
static const linuxX64 = _linuxX64;
|
|
|
|
/// The application binary interface for linux on 32-bit RISC-V.
|
|
static const linuxRiscv32 = _linuxRiscv32;
|
|
|
|
/// The application binary interface for linux on 64-bit RISC-V.
|
|
static const linuxRiscv64 = _linuxRiscv64;
|
|
|
|
/// The application binary interface for MacOS on the Arm64 architecture.
|
|
static const macosArm64 = _macosArm64;
|
|
|
|
/// The application binary interface for MacOS on the X64 architecture.
|
|
static const macosX64 = _macosX64;
|
|
|
|
/// The application binary interface for Windows on the Arm64 architecture.
|
|
static const windowsArm64 = _windowsArm64;
|
|
|
|
/// The application binary interface for Windows on the IA32 architecture.
|
|
static const windowsIA32 = _windowsIA32;
|
|
|
|
/// The application binary interface for Windows on the X64 architecture.
|
|
static const windowsX64 = _windowsX64;
|
|
|
|
/// The ABIs that the DartVM can run on.
|
|
///
|
|
/// Does not contain a `macosIA32`. We have stopped supporting 32-bit MacOS.
|
|
static const values = [
|
|
androidArm,
|
|
androidArm64,
|
|
androidIA32,
|
|
androidX64,
|
|
androidRiscv64,
|
|
fuchsiaArm64,
|
|
fuchsiaX64,
|
|
fuchsiaRiscv64,
|
|
iosArm,
|
|
iosArm64,
|
|
iosX64,
|
|
linuxArm,
|
|
linuxArm64,
|
|
linuxIA32,
|
|
linuxX64,
|
|
linuxRiscv32,
|
|
linuxRiscv64,
|
|
macosArm64,
|
|
macosX64,
|
|
windowsArm64,
|
|
windowsIA32,
|
|
windowsX64,
|
|
];
|
|
|
|
/// The ABI the Dart VM is currently running on.
|
|
external factory Abi.current();
|
|
|
|
/// A string representation of this ABI.
|
|
///
|
|
/// The string is equal to the 'on' part from `Platform.version` and
|
|
/// `dart --version`.
|
|
@override
|
|
String toString() => '${_os.name}_${_architecture.name}';
|
|
|
|
/// The operating system of this [Abi].
|
|
final _OS _os;
|
|
|
|
/// The architecture of this [Abi].
|
|
final _Architecture _architecture;
|
|
|
|
/// The constructor is private so that we can use [Abi.values] as opaque
|
|
/// tokens.
|
|
const Abi._(this._architecture, this._os);
|
|
|
|
static const _androidArm = Abi._(_Architecture.arm, _OS.android);
|
|
static const _androidArm64 = Abi._(_Architecture.arm64, _OS.android);
|
|
static const _androidIA32 = Abi._(_Architecture.ia32, _OS.android);
|
|
static const _androidX64 = Abi._(_Architecture.x64, _OS.android);
|
|
static const _androidRiscv64 = Abi._(_Architecture.riscv64, _OS.android);
|
|
static const _fuchsiaArm64 = Abi._(_Architecture.arm64, _OS.fuchsia);
|
|
static const _fuchsiaX64 = Abi._(_Architecture.x64, _OS.fuchsia);
|
|
static const _fuchsiaRiscv64 = Abi._(_Architecture.riscv64, _OS.fuchsia);
|
|
static const _iosArm = Abi._(_Architecture.arm, _OS.ios);
|
|
static const _iosArm64 = Abi._(_Architecture.arm64, _OS.ios);
|
|
static const _iosX64 = Abi._(_Architecture.x64, _OS.ios);
|
|
static const _linuxArm = Abi._(_Architecture.arm, _OS.linux);
|
|
static const _linuxArm64 = Abi._(_Architecture.arm64, _OS.linux);
|
|
static const _linuxIA32 = Abi._(_Architecture.ia32, _OS.linux);
|
|
static const _linuxX64 = Abi._(_Architecture.x64, _OS.linux);
|
|
static const _linuxRiscv32 = Abi._(_Architecture.riscv32, _OS.linux);
|
|
static const _linuxRiscv64 = Abi._(_Architecture.riscv64, _OS.linux);
|
|
static const _macosArm64 = Abi._(_Architecture.arm64, _OS.macos);
|
|
static const _macosX64 = Abi._(_Architecture.x64, _OS.macos);
|
|
static const _windowsArm64 = Abi._(_Architecture.arm64, _OS.windows);
|
|
static const _windowsIA32 = Abi._(_Architecture.ia32, _OS.windows);
|
|
static const _windowsX64 = Abi._(_Architecture.x64, _OS.windows);
|
|
}
|
|
|
|
/// The hardware architectures the Dart VM runs on.
|
|
enum _Architecture {
|
|
arm,
|
|
arm64,
|
|
ia32,
|
|
x64,
|
|
riscv32,
|
|
riscv64,
|
|
}
|
|
|
|
/// The operating systems the Dart VM runs on.
|
|
enum _OS {
|
|
android,
|
|
fuchsia,
|
|
ios,
|
|
linux,
|
|
macos,
|
|
windows,
|
|
}
|