Remove dependency on [Target] and instead operate on [Architecture] (#159196)
The dart-lang/native repository contains a `Target` class that is almost not needed anymore. The remaining uses are mainly due to kernel asset mapping (which we may be able to remove in the future). This PR removes usages of that `Target` (in favor of `Architecture`) class in most places in flutter tools. This makes the code also cleaner because we no longer have an implicit assumption that a `List<Target>` all belong to the same operating system.
This commit is contained in:
parent
15a03a4ada
commit
e2d8121708
@ -34,7 +34,7 @@ Future<void> copyNativeCodeAssetsAndroid(
|
||||
final Uri source = assetMapping.key.file!;
|
||||
final Uri target = (assetMapping.value.path as KernelAssetAbsolutePath).uri;
|
||||
final AndroidArch androidArch =
|
||||
_getAndroidArch(assetMapping.value.target);
|
||||
_getAndroidArch(assetMapping.value.target.architecture);
|
||||
final String jniArchDir = androidArch.archName;
|
||||
final Uri archUri = buildUri.resolve('jniLibs/lib/$jniArchDir/');
|
||||
final Uri targetUri = archUri.resolveUri(target);
|
||||
@ -43,25 +43,25 @@ Future<void> copyNativeCodeAssetsAndroid(
|
||||
}
|
||||
}
|
||||
|
||||
/// Get the [Target] for [androidArch].
|
||||
Target getNativeAndroidTarget(AndroidArch androidArch) {
|
||||
/// Get the [Architecture] for [androidArch].
|
||||
Architecture getNativeAndroidArchitecture(AndroidArch androidArch) {
|
||||
return switch (androidArch) {
|
||||
AndroidArch.armeabi_v7a => Target.androidArm,
|
||||
AndroidArch.arm64_v8a => Target.androidArm64,
|
||||
AndroidArch.x86 => Target.androidIA32,
|
||||
AndroidArch.x86_64 => Target.androidX64,
|
||||
AndroidArch.armeabi_v7a => Architecture.arm,
|
||||
AndroidArch.arm64_v8a => Architecture.arm64,
|
||||
AndroidArch.x86 => Architecture.ia32,
|
||||
AndroidArch.x86_64 => Architecture.x64,
|
||||
};
|
||||
}
|
||||
|
||||
/// Get the [AndroidArch] for [target].
|
||||
AndroidArch _getAndroidArch(Target target) {
|
||||
return switch (target) {
|
||||
Target.androidArm => AndroidArch.armeabi_v7a,
|
||||
Target.androidArm64 => AndroidArch.arm64_v8a,
|
||||
Target.androidIA32 => AndroidArch.x86,
|
||||
Target.androidX64 => AndroidArch.x86_64,
|
||||
Target.androidRiscv64 => throwToolExit('Android RISC-V not yet supported.'),
|
||||
_ => throwToolExit('Invalid target: $target.'),
|
||||
/// Get the [AndroidArch] for [architecture].
|
||||
AndroidArch _getAndroidArch(Architecture architecture) {
|
||||
return switch (architecture) {
|
||||
Architecture.arm => AndroidArch.armeabi_v7a,
|
||||
Architecture.arm64 => AndroidArch.arm64_v8a,
|
||||
Architecture.ia32 => AndroidArch.x86,
|
||||
Architecture.x64 => AndroidArch.x86_64,
|
||||
Architecture.riscv64 => throwToolExit('Android RISC-V not yet supported.'),
|
||||
_ => throwToolExit('Invalid architecture: $architecture.'),
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -20,12 +20,12 @@ IOSSdk getIOSSdk(EnvironmentType environmentType) {
|
||||
};
|
||||
}
|
||||
|
||||
/// Extract the [Target] from a [DarwinArch].
|
||||
Target getNativeIOSTarget(DarwinArch darwinArch) {
|
||||
/// Extract the [Architecture] from a [DarwinArch].
|
||||
Architecture getNativeIOSArchitecture(DarwinArch darwinArch) {
|
||||
return switch (darwinArch) {
|
||||
DarwinArch.armv7 => Target.iOSArm,
|
||||
DarwinArch.arm64 => Target.iOSArm64,
|
||||
DarwinArch.x86_64 => Target.iOSX64,
|
||||
DarwinArch.armv7 => Architecture.arm,
|
||||
DarwinArch.arm64 => Architecture.arm64,
|
||||
DarwinArch.x86_64 => Architecture.x64,
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -13,11 +13,11 @@ import 'native_assets_host.dart';
|
||||
// TODO(dcharkes): Fetch minimum MacOS version from somewhere. https://github.com/flutter/flutter/issues/145104
|
||||
const int targetMacOSVersion = 13;
|
||||
|
||||
/// Extract the [Target] from a [DarwinArch].
|
||||
Target getNativeMacOSTarget(DarwinArch darwinArch) {
|
||||
/// Extract the [Architecture] from a [DarwinArch].
|
||||
Architecture getNativeMacOSArchitecture(DarwinArch darwinArch) {
|
||||
return switch (darwinArch) {
|
||||
DarwinArch.arm64 => Target.macOSArm64,
|
||||
DarwinArch.x86_64 => Target.macOSX64,
|
||||
DarwinArch.arm64 => Architecture.arm64,
|
||||
DarwinArch.x86_64 => Architecture.x64,
|
||||
DarwinArch.armv7 => throw Exception('Unknown DarwinArch: $darwinArch.'),
|
||||
};
|
||||
}
|
||||
|
@ -96,16 +96,16 @@ Future<DartBuildResult> runFlutterSpecificDartBuild({
|
||||
return const DartBuildResult.empty();
|
||||
}
|
||||
|
||||
final build_info.BuildMode buildMode = _getBuildMode(targetPlatform, environmentDefines, flutterTester);
|
||||
final List<Target> targets = flutterTester
|
||||
? <Target>[Target.current]
|
||||
: _targetsForOS(targetPlatform, targetOS, environmentDefines);
|
||||
final DartBuildResult result = targets.isEmpty
|
||||
final build_info.BuildMode buildMode = _getBuildMode(environmentDefines, flutterTester);
|
||||
final List<Architecture> architectures = flutterTester
|
||||
? <Architecture>[Architecture.current]
|
||||
: _architecturesForOS(targetPlatform, targetOS, environmentDefines);
|
||||
final DartBuildResult result = architectures.isEmpty
|
||||
? const DartBuildResult.empty()
|
||||
: await _runDartBuild(
|
||||
environmentDefines: environmentDefines,
|
||||
buildRunner: buildRunner,
|
||||
targets: targets,
|
||||
architectures: architectures,
|
||||
projectUri: projectUri,
|
||||
buildMode: _nativeAssetsBuildMode(buildMode),
|
||||
fileSystem: fileSystem,
|
||||
@ -124,7 +124,7 @@ Future<void> installCodeAssets({
|
||||
final OS targetOS = getNativeOSFromTargetPlatfrorm(targetPlatform);
|
||||
final Uri buildUri = nativeAssetsBuildUri(projectUri, targetOS);
|
||||
final bool flutterTester = targetPlatform == build_info.TargetPlatform.tester;
|
||||
final build_info.BuildMode buildMode = _getBuildMode(targetPlatform, environmentDefines, flutterTester);
|
||||
final build_info.BuildMode buildMode = _getBuildMode(environmentDefines, flutterTester);
|
||||
|
||||
final String? codesignIdentity = environmentDefines[build_info.kCodesignIdentity];
|
||||
final Map<CodeAsset, KernelAsset> assetTargetLocations = assetTargetLocationsForOS(targetOS, dartBuildResult.codeAssets, flutterTester, buildUri);
|
||||
@ -711,20 +711,23 @@ Future<void> _copyNativeCodeAssetsForOS(
|
||||
Future<DartBuildResult> _runDartBuild({
|
||||
required Map<String, String> environmentDefines,
|
||||
required FlutterNativeAssetsBuildRunner buildRunner,
|
||||
required List<Target> targets,
|
||||
required List<Architecture> architectures,
|
||||
required Uri projectUri,
|
||||
required BuildMode buildMode,
|
||||
required FileSystem fileSystem,
|
||||
required OS targetOS,
|
||||
required OS? targetOS,
|
||||
}) async {
|
||||
final bool linkingEnabled = buildMode == BuildMode.release;
|
||||
final String targetString = targets.length == 1
|
||||
? targets.single.toString()
|
||||
: targets.toList().toString();
|
||||
|
||||
final String architectureString = architectures.length == 1
|
||||
? architectures.single.toString()
|
||||
: architectures.toList().toString();
|
||||
|
||||
globals.logger
|
||||
.printTrace('Building native assets for $targetString $buildMode.');
|
||||
.printTrace('Building native assets for $targetOS $architectureString $buildMode.');
|
||||
final List<EncodedAsset> assets = <EncodedAsset>[];
|
||||
final Set<Uri> dependencies = <Uri>{};
|
||||
|
||||
final build_info.EnvironmentType? environmentType;
|
||||
if (targetOS == OS.iOS) {
|
||||
final String? sdkRoot = environmentDefines[build_info.kSdkRoot];
|
||||
@ -748,12 +751,12 @@ Future<DartBuildResult> _runDartBuild({
|
||||
final int? macOSVersion = targetOS == OS.macOS ? targetMacOSVersion : null;
|
||||
final IOSSdk? iOSSdk = targetOS == OS.iOS ? getIOSSdk(environmentType!) : null;
|
||||
|
||||
for (final Target target in targets) {
|
||||
for (final Architecture architecture in architectures) {
|
||||
final BuildResult? buildResult = await buildRunner.build(
|
||||
supportedAssetTypes: <String>[CodeAsset.type],
|
||||
configCreator: () => BuildConfigBuilder()
|
||||
..setupCodeConfig(
|
||||
targetArchitecture: target.architecture,
|
||||
targetArchitecture: architecture,
|
||||
linkModePreference: LinkModePreference.dynamic,
|
||||
cCompilerConfig: cCompilerConfig,
|
||||
targetAndroidNdkApi: androidNdkApi,
|
||||
@ -770,7 +773,7 @@ Future<DartBuildResult> _runDartBuild({
|
||||
applicationAssetValidator: (List<EncodedAsset> assets) async => <String>[
|
||||
...await validateCodeAssetInApplication(assets),
|
||||
],
|
||||
targetOS: target.os,
|
||||
targetOS: targetOS!,
|
||||
buildMode: buildMode,
|
||||
workingDirectory: projectUri,
|
||||
includeParentEnvironment: true,
|
||||
@ -787,7 +790,7 @@ Future<DartBuildResult> _runDartBuild({
|
||||
supportedAssetTypes: <String>[CodeAsset.type],
|
||||
configCreator: () => LinkConfigBuilder()
|
||||
..setupCodeConfig(
|
||||
targetArchitecture: target.architecture,
|
||||
targetArchitecture: architecture,
|
||||
linkModePreference: LinkModePreference.dynamic,
|
||||
cCompilerConfig: cCompilerConfig,
|
||||
targetAndroidNdkApi: androidNdkApi,
|
||||
@ -823,7 +826,7 @@ Future<DartBuildResult> _runDartBuild({
|
||||
.map<CodeAsset>(CodeAsset.fromEncoded)
|
||||
.toList();
|
||||
globals.logger
|
||||
.printTrace('Building native assets for $targetString $buildMode done.');
|
||||
.printTrace('Building native assets for $targetOS $architectureString $buildMode done.');
|
||||
return DartBuildResult(codeAssets, dependencies.toList());
|
||||
}
|
||||
|
||||
@ -865,13 +868,13 @@ Future<DartBuildResult> _runDartDryRunBuild({
|
||||
dependencies.toList());
|
||||
}
|
||||
|
||||
List<Target> _targetsForOS(build_info.TargetPlatform targetPlatform,
|
||||
List<Architecture> _architecturesForOS(build_info.TargetPlatform targetPlatform,
|
||||
OS targetOS, Map<String, String> environmentDefines) {
|
||||
switch (targetOS) {
|
||||
case OS.linux:
|
||||
return <Target>[_getNativeTarget(targetPlatform)];
|
||||
return <Architecture>[_getNativeArchitecture(targetPlatform)];
|
||||
case OS.windows:
|
||||
return <Target>[_getNativeTarget(targetPlatform)];
|
||||
return <Architecture>[_getNativeArchitecture(targetPlatform)];
|
||||
case OS.macOS:
|
||||
final List<build_info.DarwinArch> darwinArchs =
|
||||
_emptyToNull(environmentDefines[build_info.kDarwinArchs])
|
||||
@ -882,7 +885,7 @@ List<Target> _targetsForOS(build_info.TargetPlatform targetPlatform,
|
||||
build_info.DarwinArch.x86_64,
|
||||
build_info.DarwinArch.arm64
|
||||
];
|
||||
return darwinArchs.map(getNativeMacOSTarget).toList();
|
||||
return darwinArchs.map(getNativeMacOSArchitecture).toList();
|
||||
case OS.android:
|
||||
final String? androidArchsEnvironment =
|
||||
environmentDefines[build_info.kAndroidArchs];
|
||||
@ -890,7 +893,7 @@ List<Target> _targetsForOS(build_info.TargetPlatform targetPlatform,
|
||||
targetPlatform,
|
||||
androidArchsEnvironment,
|
||||
);
|
||||
return androidArchs.map(getNativeAndroidTarget).toList();
|
||||
return androidArchs.map(getNativeAndroidArchitecture).toList();
|
||||
case OS.iOS:
|
||||
final List<build_info.DarwinArch> iosArchs =
|
||||
_emptyToNull(environmentDefines[build_info.kIosArchs])
|
||||
@ -898,24 +901,22 @@ List<Target> _targetsForOS(build_info.TargetPlatform targetPlatform,
|
||||
.map(build_info.getIOSArchForName)
|
||||
.toList() ??
|
||||
<build_info.DarwinArch>[build_info.DarwinArch.arm64];
|
||||
return iosArchs.map(getNativeIOSTarget).toList();
|
||||
return iosArchs.map(getNativeIOSArchitecture).toList();
|
||||
default:
|
||||
// TODO(dacoharkes): Implement other OSes. https://github.com/flutter/flutter/issues/129757
|
||||
// Write the file we claim to have in the [outputs].
|
||||
return <Target>[];
|
||||
return <Architecture>[];
|
||||
}
|
||||
}
|
||||
|
||||
Target _getNativeTarget(build_info.TargetPlatform targetPlatform) {
|
||||
Architecture _getNativeArchitecture(build_info.TargetPlatform targetPlatform) {
|
||||
switch (targetPlatform) {
|
||||
case build_info.TargetPlatform.linux_x64:
|
||||
return Target.linuxX64;
|
||||
case build_info.TargetPlatform.linux_arm64:
|
||||
return Target.linuxArm64;
|
||||
case build_info.TargetPlatform.windows_x64:
|
||||
return Target.windowsX64;
|
||||
return Architecture.x64;
|
||||
case build_info.TargetPlatform.linux_arm64:
|
||||
case build_info.TargetPlatform.windows_arm64:
|
||||
return Target.windowsArm64;
|
||||
return Architecture.arm64;
|
||||
case build_info.TargetPlatform.android:
|
||||
case build_info.TargetPlatform.ios:
|
||||
case build_info.TargetPlatform.darwin:
|
||||
@ -1097,7 +1098,7 @@ const Map<OS, Set<Architecture>> _osTargets = <OS, Set<Architecture>>{
|
||||
},
|
||||
};
|
||||
|
||||
build_info.BuildMode _getBuildMode(build_info.TargetPlatform targetPlatform, Map<String, String> environmentDefines, bool isFlutterTester) {
|
||||
build_info.BuildMode _getBuildMode(Map<String, String> environmentDefines, bool isFlutterTester) {
|
||||
if (isFlutterTester) {
|
||||
return build_info.BuildMode.debug;
|
||||
}
|
||||
|
@ -111,8 +111,8 @@ void main() {
|
||||
expect(
|
||||
(globals.logger as BufferLogger).traceText,
|
||||
stringContainsInOrder(<String>[
|
||||
'Building native assets for android_arm64 $buildMode.',
|
||||
'Building native assets for android_arm64 $buildMode done.',
|
||||
'Building native assets for android arm64 $buildMode.',
|
||||
'Building native assets for android arm64 $buildMode done.',
|
||||
]),
|
||||
);
|
||||
|
||||
|
@ -216,8 +216,8 @@ void main() {
|
||||
expect(
|
||||
(globals.logger as BufferLogger).traceText,
|
||||
stringContainsInOrder(<String>[
|
||||
'Building native assets for [ios_arm64, ios_x64] $buildMode.',
|
||||
'Building native assets for [ios_arm64, ios_x64] $buildMode done.',
|
||||
'Building native assets for ios [arm64, x64] $buildMode.',
|
||||
'Building native assets for ios [arm64, x64] $buildMode done.',
|
||||
]),
|
||||
);
|
||||
expect(environment.buildDir.childFile(InstallCodeAssets.nativeAssetsFilename), exists);
|
||||
|
@ -323,13 +323,13 @@ void main() {
|
||||
nativeAssetsFileUri: nativeAssetsFileUri ,
|
||||
);
|
||||
final String expectedArchsBeingBuilt = flutterTester
|
||||
? (isArm64 ? 'macos_arm64' : 'macos_x64')
|
||||
: '[macos_arm64, macos_x64]';
|
||||
? (isArm64 ? 'arm64' : 'x64')
|
||||
: '[arm64, x64]';
|
||||
expect(
|
||||
(globals.logger as BufferLogger).traceText,
|
||||
stringContainsInOrder(<String>[
|
||||
'Building native assets for $expectedArchsBeingBuilt $buildMode.',
|
||||
'Building native assets for $expectedArchsBeingBuilt $buildMode done.',
|
||||
'Building native assets for macos $expectedArchsBeingBuilt $buildMode.',
|
||||
'Building native assets for macos $expectedArchsBeingBuilt $buildMode done.',
|
||||
]),
|
||||
);
|
||||
final String nativeAssetsFileContent = await fileSystem.file(nativeAssetsFileUri).readAsString();
|
||||
|
@ -127,13 +127,16 @@ void main() {
|
||||
nativeAssetsFileUri: nativeAssetsFileUri,
|
||||
);
|
||||
final String expectedOS = flutterTester
|
||||
? native_assets_cli.Target.current.toString()
|
||||
: 'windows_x64';
|
||||
? OS.current.toString()
|
||||
: 'windows';
|
||||
final String expectedArch = flutterTester
|
||||
? Architecture.current.toString()
|
||||
: 'x64';
|
||||
expect(
|
||||
(globals.logger as BufferLogger).traceText,
|
||||
stringContainsInOrder(<String>[
|
||||
'Building native assets for $expectedOS $buildMode.',
|
||||
'Building native assets for $expectedOS $buildMode done.',
|
||||
'Building native assets for $expectedOS $expectedArch $buildMode.',
|
||||
'Building native assets for $expectedOS $expectedArch $buildMode done.',
|
||||
]),
|
||||
);
|
||||
expect(
|
||||
|
Loading…
x
Reference in New Issue
Block a user