Add --target support for Windows and Linux (#34660)
- Adds desktop projects to ApplicationPackageStore
- Plumbs target overrides through the desktop builds
diff --git a/packages/flutter_tools/lib/src/bundle.dart b/packages/flutter_tools/lib/src/bundle.dart
index 42fd38a..f298114 100644
--- a/packages/flutter_tools/lib/src/bundle.dart
+++ b/packages/flutter_tools/lib/src/bundle.dart
@@ -18,7 +18,7 @@
import 'globals.dart';
import 'project.dart';
-const String defaultMainPath = 'lib/main.dart';
+String get defaultMainPath => fs.path.join('lib', 'main.dart');
const String defaultAssetBasePath = '.';
const String defaultManifestPath = 'pubspec.yaml';
String get defaultDepfilePath => fs.path.join(getBuildDirectory(), 'snapshot_blob.bin.d');
@@ -55,7 +55,7 @@
Future<void> build({
TargetPlatform platform,
BuildMode buildMode,
- String mainPath = defaultMainPath,
+ String mainPath,
String manifestPath = defaultManifestPath,
String applicationKernelFilePath,
String depfilePath,
@@ -70,6 +70,7 @@
List<String> fileSystemRoots,
String fileSystemScheme,
}) async {
+ mainPath ??= defaultMainPath;
depfilePath ??= defaultDepfilePath;
assetDirPath ??= getAssetBuildDirectory();
packagesPath ??= fs.path.absolute(PackageMap.globalPackagesPath);
diff --git a/packages/flutter_tools/lib/src/commands/build_linux.dart b/packages/flutter_tools/lib/src/commands/build_linux.dart
index c1f15dd..4175b6d 100644
--- a/packages/flutter_tools/lib/src/commands/build_linux.dart
+++ b/packages/flutter_tools/lib/src/commands/build_linux.dart
@@ -16,6 +16,7 @@
/// A command to build a linux desktop target through a build shell script.
class BuildLinuxCommand extends BuildSubCommand {
BuildLinuxCommand() {
+ usesTargetOption();
argParser.addFlag('debug',
negatable: false,
help: 'Build a debug version of your app.',
@@ -59,7 +60,7 @@
if (!flutterProject.linux.existsSync()) {
throwToolExit('No Linux desktop project configured.');
}
- await buildLinux(flutterProject.linux, buildInfo);
+ await buildLinux(flutterProject.linux, buildInfo, target: targetFile);
return null;
}
}
diff --git a/packages/flutter_tools/lib/src/commands/build_windows.dart b/packages/flutter_tools/lib/src/commands/build_windows.dart
index 2f59aec..884d26f 100644
--- a/packages/flutter_tools/lib/src/commands/build_windows.dart
+++ b/packages/flutter_tools/lib/src/commands/build_windows.dart
@@ -16,6 +16,7 @@
/// A command to build a windows desktop target through a build shell script.
class BuildWindowsCommand extends BuildSubCommand {
BuildWindowsCommand() {
+ usesTargetOption();
argParser.addFlag('debug',
negatable: false,
help: 'Build a debug version of your app.',
@@ -59,7 +60,7 @@
if (!flutterProject.windows.existsSync()) {
throwToolExit('No Windows desktop project configured.');
}
- await buildWindows(flutterProject.windows, buildInfo);
+ await buildWindows(flutterProject.windows, buildInfo, target: targetFile);
return null;
}
}
diff --git a/packages/flutter_tools/lib/src/linux/linux_device.dart b/packages/flutter_tools/lib/src/linux/linux_device.dart
index 3746aa5..17b8002 100644
--- a/packages/flutter_tools/lib/src/linux/linux_device.dart
+++ b/packages/flutter_tools/lib/src/linux/linux_device.dart
@@ -81,7 +81,11 @@
}) async {
_lastBuiltMode = debuggingOptions.buildInfo.mode;
if (!prebuiltApplication) {
- await buildLinux(FlutterProject.current().linux, debuggingOptions.buildInfo);
+ await buildLinux(
+ FlutterProject.current().linux,
+ debuggingOptions.buildInfo,
+ target: mainPath,
+ );
}
await stopApp(package);
final Process process = await processManager.start(<String>[
diff --git a/packages/flutter_tools/lib/src/windows/build_windows.dart b/packages/flutter_tools/lib/src/windows/build_windows.dart
index 781b095..9f1a82c 100644
--- a/packages/flutter_tools/lib/src/windows/build_windows.dart
+++ b/packages/flutter_tools/lib/src/windows/build_windows.dart
@@ -18,13 +18,15 @@
import 'visual_studio.dart';
/// Builds the Windows project using msbuild.
-Future<void> buildWindows(WindowsProject windowsProject, BuildInfo buildInfo, {String target = 'lib/main.dart'}) async {
+Future<void> buildWindows(WindowsProject windowsProject, BuildInfo buildInfo, {String target}) async {
final Map<String, String> environment = <String, String>{
'FLUTTER_ROOT': Cache.flutterRoot,
- 'FLUTTER_TARGET': target,
'PROJECT_DIR': windowsProject.project.directory.path,
'TRACK_WIDGET_CREATION': (buildInfo?.trackWidgetCreation == true).toString(),
};
+ if (target != null) {
+ environment['FLUTTER_TARGET'] = target;
+ }
if (artifacts is LocalEngineArtifacts) {
final LocalEngineArtifacts localEngineArtifacts = artifacts;
final String engineOutPath = localEngineArtifacts.engineOutPath;
diff --git a/packages/flutter_tools/lib/src/windows/windows_device.dart b/packages/flutter_tools/lib/src/windows/windows_device.dart
index d55df6d..f2e5e10 100644
--- a/packages/flutter_tools/lib/src/windows/windows_device.dart
+++ b/packages/flutter_tools/lib/src/windows/windows_device.dart
@@ -82,7 +82,11 @@
bool ipv6 = false,
}) async {
if (!prebuiltApplication) {
- await buildWindows(FlutterProject.current().windows, debuggingOptions.buildInfo);
+ await buildWindows(
+ FlutterProject.current().windows,
+ debuggingOptions.buildInfo,
+ target: mainPath,
+ );
}
await stopApp(package);
final Process process = await processManager.start(<String>[