blob: 384eb548793355c13bfdb3821546d3cf2d66fce0 [file] [log] [blame] [edit]
// Copyright (c) 2023, 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 '../api/architecture.dart';
final class ArchitectureImpl implements Architecture {
/// This architecture as used in [Platform.version].
final String dartPlatform;
const ArchitectureImpl._(this.dartPlatform);
factory ArchitectureImpl.fromAbi(Abi abi) => _abiToArch[abi]!;
static const ArchitectureImpl arm = ArchitectureImpl._('arm');
static const ArchitectureImpl arm64 = ArchitectureImpl._('arm64');
static const ArchitectureImpl ia32 = ArchitectureImpl._('ia32');
static const ArchitectureImpl riscv32 = ArchitectureImpl._('riscv32');
static const ArchitectureImpl riscv64 = ArchitectureImpl._('riscv64');
static const ArchitectureImpl x64 = ArchitectureImpl._('x64');
static const List<ArchitectureImpl> values = [
arm,
arm64,
ia32,
riscv32,
riscv64,
x64,
];
static const _abiToArch = {
Abi.androidArm: ArchitectureImpl.arm,
Abi.androidArm64: ArchitectureImpl.arm64,
Abi.androidIA32: ArchitectureImpl.ia32,
Abi.androidX64: ArchitectureImpl.x64,
Abi.androidRiscv64: ArchitectureImpl.riscv64,
Abi.fuchsiaArm64: ArchitectureImpl.arm64,
Abi.fuchsiaX64: ArchitectureImpl.x64,
Abi.iosArm: ArchitectureImpl.arm,
Abi.iosArm64: ArchitectureImpl.arm64,
Abi.iosX64: ArchitectureImpl.x64,
Abi.linuxArm: ArchitectureImpl.arm,
Abi.linuxArm64: ArchitectureImpl.arm64,
Abi.linuxIA32: ArchitectureImpl.ia32,
Abi.linuxRiscv32: ArchitectureImpl.riscv32,
Abi.linuxRiscv64: ArchitectureImpl.riscv64,
Abi.linuxX64: ArchitectureImpl.x64,
Abi.macosArm64: ArchitectureImpl.arm64,
Abi.macosX64: ArchitectureImpl.x64,
Abi.windowsArm64: ArchitectureImpl.arm64,
Abi.windowsIA32: ArchitectureImpl.ia32,
Abi.windowsX64: ArchitectureImpl.x64,
};
static const String configKey = 'target_architecture';
@override
String toString() => dartPlatform;
static final Map<String, ArchitectureImpl> _architectureByName = {
for (var architecture in values) architecture.dartPlatform: architecture
};
factory ArchitectureImpl.fromString(String target) =>
_architectureByName[target]!;
static final ArchitectureImpl current = Target.current.architecture;
}