gen_snapshot: fix Platform.operatingSystem issue (#213)

This change fixes an issue that `Platform.operatingSystem` returns Android on x64 hosts and when cross-building for arm64 targets on x64 hosts. To fix the issue, use the gen_snapshot of linux and elinux instead of Android's one.

Fixed https://github.com/sony/flutter-elinux/issues/212

Signed-off-by: Hidenori Matsubayashi <Hidenori.Matsubayashi@gmail.com>
This commit is contained in:
Hidenori Matsubayashi
2023-08-29 12:07:51 +00:00
committed by GitHub
parent fa64bab806
commit d2ae0ffdb9
4 changed files with 18 additions and 34 deletions
+3 -4
View File
@@ -88,12 +88,11 @@ class BuildPackageCommand extends BuildSubCommand
@override
Future<Set<DevelopmentArtifact>> get requiredArtifacts async =>
<DevelopmentArtifact>{
// Use gensnapshot for Arm64 Linux when the host is arm64 because
// the artifacts for arm64 host don't support self-building now.
// Use gen_snapshot of the arm64 linux-desktop when self-building
// on arm64 hosts. This is because elinux's artifacts for arm64
// doesn't support self-build as of now.
if (_getCurrentHostPlatformArchName() == 'arm64')
DevelopmentArtifact.linux,
if (_getCurrentHostPlatformArchName() == 'x64')
DevelopmentArtifact.androidGenSnapshot,
ELinuxDevelopmentArtifact.elinux,
};
+3 -4
View File
@@ -18,12 +18,11 @@ class ELinuxRunCommand extends RunCommand
@override
Future<Set<DevelopmentArtifact>> get requiredArtifacts async =>
<DevelopmentArtifact>{
// Use gensnapshot for Arm64 Linux when the host is arm64 because
// the artifacts for arm64 host don't support self-building now.
// Use gen_snapshot of the arm64 linux-desktop when self-building
// on arm64 hosts. This is because elinux's artifacts for arm64
// doesn't support self-build as of now.
if (_getCurrentHostPlatformArchName() == 'arm64')
DevelopmentArtifact.linux,
if (_getCurrentHostPlatformArchName() == 'x64')
DevelopmentArtifact.androidGenSnapshot,
ELinuxDevelopmentArtifact.elinux,
};
+10 -7
View File
@@ -34,16 +34,19 @@ class ELinuxArtifacts extends CachedArtifacts {
BuildMode? mode,
EnvironmentType? environmentType,
}) {
final HostPlatform hostPlatform = getCurrentHostPlatform();
// Use elinux-*-*/linux-x64/gen_snapshot only when the host pc is x64 arch.
// The other causes use linux-desktop's one.
if (artifact == Artifact.genSnapshot &&
hostPlatform == HostPlatform.linux_x64 &&
platform != null &&
getNameForTargetPlatform(platform).startsWith('android')) {
getNameForTargetPlatform(platform).startsWith('linux')) {
assert(mode != null, 'Need to specify a build mode.');
assert(mode != BuildMode.debug,
'Artifact $artifact only available in non-debug mode.');
final String arch = _getArchForTargetPlatform(platform);
final HostPlatform hostPlatform = getCurrentHostPlatform();
assert(hostPlatform != HostPlatform.linux_arm64,
'Artifact $artifact not available on Linux arm64.');
return _getEngineArtifactsDirectory(arch, mode!)
.childDirectory(getNameForHostPlatform(hostPlatform))
.childFile('gen_snapshot')
@@ -53,10 +56,10 @@ class ELinuxArtifacts extends CachedArtifacts {
}
String _getArchForTargetPlatform(TargetPlatform platform) {
if (platform == TargetPlatform.android_arm64) {
return 'arm64';
} else {
if (platform == TargetPlatform.linux_x64) {
return 'x64';
} else {
return 'arm64';
}
}
}
+2 -19
View File
@@ -12,7 +12,6 @@ import 'package:flutter_tools/src/android/gradle.dart';
import 'package:flutter_tools/src/base/analyze_size.dart';
import 'package:flutter_tools/src/base/common.dart';
import 'package:flutter_tools/src/base/logger.dart';
import 'package:flutter_tools/src/base/os.dart';
import 'package:flutter_tools/src/build_info.dart';
import 'package:flutter_tools/src/build_system/build_system.dart';
import 'package:flutter_tools/src/cache.dart';
@@ -179,22 +178,11 @@ class ELinuxBuilder {
/// See: [getTargetPlatformForName] in `build_info.dart`
TargetPlatform _getTargetPlatformForArch(String arch) {
final String hostArch = _getCurrentHostPlatformArchName();
switch (arch) {
case 'arm64':
// Use gensnapshot for Arm64 Linux when the host is arm64 because
// the artifacts for arm64 host don't support self-building now.
if (hostArch == 'arm64') {
return TargetPlatform.linux_arm64;
}
return TargetPlatform.android_arm64;
return TargetPlatform.linux_arm64;
default:
// Use gensnapshot for Arm64 Linux when the host is arm64 because
// the artifacts for arm64 host don't support self-building now.
if (hostArch == 'arm64') {
return TargetPlatform.linux_x64;
}
return TargetPlatform.android_x64;
return TargetPlatform.linux_x64;
}
}
@@ -211,8 +199,3 @@ String _getTargetPlatformPlatformName(TargetPlatform targetPlatform) {
return 'android-x64';
}
}
String _getCurrentHostPlatformArchName() {
final HostPlatform hostPlatform = getCurrentHostPlatform();
return hostPlatform.platformName;
}