Unverified Commit c627dbfb authored by Derek Xu's avatar Derek Xu Committed by GitHub

Add `--frontend-server-starter-path` option to `flutter run` and `flutter test` (#135038)

parent da1f801f
......@@ -123,6 +123,7 @@ BuildApp() {
"-dSplitDebugInfo=${SPLIT_DEBUG_INFO}"
"-dTrackWidgetCreation=${TRACK_WIDGET_CREATION}"
"-dAction=${ACTION}"
"-dFrontendServerStarterPath=${FRONTEND_SERVER_STARTER_PATH}"
"--DartDefines=${DART_DEFINES}"
"--ExtraGenSnapshotOptions=${EXTRA_GEN_SNAPSHOT_OPTIONS}"
"--ExtraFrontEndOptions=${EXTRA_FRONT_END_OPTIONS}"
......
......@@ -13,6 +13,7 @@ Future<void> main(List<String> arguments) async {
final String? dartDefines = Platform.environment['DART_DEFINES'];
final bool dartObfuscation = Platform.environment['DART_OBFUSCATION'] == 'true';
final String? frontendServerStarterPath = Platform.environment['FRONTEND_SERVER_STARTER_PATH'];
final String? extraFrontEndOptions = Platform.environment['EXTRA_FRONT_END_OPTIONS'];
final String? extraGenSnapshotOptions = Platform.environment['EXTRA_GEN_SNAPSHOT_OPTIONS'];
final String? flutterEngine = Platform.environment['FLUTTER_ENGINE'];
......@@ -106,6 +107,8 @@ or
'--DartDefines=$dartDefines',
if (extraGenSnapshotOptions != null)
'--ExtraGenSnapshotOptions=$extraGenSnapshotOptions',
if (frontendServerStarterPath != null)
'-dFrontendServerStarterPath=$frontendServerStarterPath',
if (extraFrontEndOptions != null)
'--ExtraFrontEndOptions=$extraFrontEndOptions',
target,
......
......@@ -402,6 +402,7 @@ class Context {
'-dTrackWidgetCreation=${environment['TRACK_WIDGET_CREATION'] ?? ''}',
'-dDartObfuscation=${environment['DART_OBFUSCATION'] ?? ''}',
'-dAction=${environment['ACTION'] ?? ''}',
'-dFrontendServerStarterPath=${environment['FRONTEND_SERVER_STARTER_PATH'] ?? ''}',
'--ExtraGenSnapshotOptions=${environment['EXTRA_GEN_SNAPSHOT_OPTIONS'] ?? ''}',
'--DartDefines=${environment['DART_DEFINES'] ?? ''}',
'--ExtraFrontEndOptions=${environment['EXTRA_FRONT_END_OPTIONS'] ?? ''}',
......
......@@ -964,6 +964,10 @@ class FlutterPlugin implements Plugin<Project> {
if (project.hasProperty('track-widget-creation')) {
trackWidgetCreationValue = project.property('track-widget-creation').toBoolean()
}
String frontendServerStarterPathValue = null
if (project.hasProperty('frontend-server-starter-path')) {
frontendServerStarterPathValue = project.property('frontend-server-starter-path')
}
String extraFrontEndOptionsValue = null
if (project.hasProperty('extra-front-end-options')) {
extraFrontEndOptionsValue = project.property('extra-front-end-options')
......@@ -1052,6 +1056,7 @@ class FlutterPlugin implements Plugin<Project> {
targetPlatformValues = targetPlatforms
sourceDir getFlutterSourceDirectory()
intermediateDir project.file("${project.buildDir}/$INTERMEDIATES_DIR/flutter/${variant.name}/")
frontendServerStarterPath frontendServerStarterPathValue
extraFrontEndOptions extraFrontEndOptionsValue
extraGenSnapshotOptions extraGenSnapshotOptionsValue
splitDebugInfo splitDebugInfoValue
......@@ -1290,6 +1295,8 @@ abstract class BaseFlutterTask extends DefaultTask {
@Internal
File intermediateDir
@Optional @Input
String frontendServerStarterPath
@Optional @Input
String extraFrontEndOptions
@Optional @Input
String extraGenSnapshotOptions
......@@ -1394,6 +1401,9 @@ abstract class BaseFlutterTask extends DefaultTask {
if (extraGenSnapshotOptions != null) {
args "--ExtraGenSnapshotOptions=${extraGenSnapshotOptions}"
}
if (frontendServerStarterPath != null) {
args "-dFrontendServerStarterPath=${frontendServerStarterPath}"
}
if (extraFrontEndOptions != null) {
args "--ExtraFrontEndOptions=${extraFrontEndOptions}"
}
......
......@@ -23,6 +23,7 @@ class BuildInfo {
this.mode,
this.flavor, {
this.trackWidgetCreation = false,
this.frontendServerStarterPath,
List<String>? extraFrontEndOptions,
List<String>? extraGenSnapshotOptions,
List<String>? fileSystemRoots,
......@@ -82,6 +83,10 @@ class BuildInfo {
/// Whether the build should track widget creation locations.
final bool trackWidgetCreation;
/// If provided, the frontend server will be started in JIT mode from this
/// file.
final String? frontendServerStarterPath;
/// Extra command-line options for front-end.
final List<String> extraFrontEndOptions;
......@@ -237,6 +242,8 @@ class BuildInfo {
if (dartDefines.isNotEmpty)
kDartDefines: encodeDartDefines(dartDefines),
kDartObfuscation: dartObfuscation.toString(),
if (frontendServerStarterPath != null)
kFrontendServerStarterPath: frontendServerStarterPath!,
if (extraFrontEndOptions.isNotEmpty)
kExtraFrontEndOptions: extraFrontEndOptions.join(','),
if (extraGenSnapshotOptions.isNotEmpty)
......@@ -274,6 +281,8 @@ class BuildInfo {
if (dartDefines.isNotEmpty)
'DART_DEFINES': encodeDartDefines(dartDefines),
'DART_OBFUSCATION': dartObfuscation.toString(),
if (frontendServerStarterPath != null)
'FRONTEND_SERVER_STARTER_PATH': frontendServerStarterPath!,
if (extraFrontEndOptions.isNotEmpty)
'EXTRA_FRONT_END_OPTIONS': extraFrontEndOptions.join(','),
if (extraGenSnapshotOptions.isNotEmpty)
......@@ -310,6 +319,8 @@ class BuildInfo {
if (dartDefines.isNotEmpty)
'-Pdart-defines=${encodeDartDefines(dartDefines)}',
'-Pdart-obfuscation=$dartObfuscation',
if (frontendServerStarterPath != null)
'-Pfrontend-server-starter-path=$frontendServerStarterPath',
if (extraFrontEndOptions.isNotEmpty)
'-Pextra-front-end-options=${extraFrontEndOptions.join(',')}',
if (extraGenSnapshotOptions.isNotEmpty)
......@@ -901,6 +912,9 @@ const String kTargetFile = 'TargetFile';
/// Whether to enable or disable track widget creation.
const String kTrackWidgetCreation = 'TrackWidgetCreation';
/// If provided, the frontend server will be started in JIT mode from this file.
const String kFrontendServerStarterPath = 'FrontendServerStarterPath';
/// Additional configuration passed to the dart front end.
///
/// This is expected to be a comma separated list of strings.
......
......@@ -178,6 +178,7 @@ class KernelSnapshot extends Target {
final TargetPlatform targetPlatform = getTargetPlatformForName(targetPlatformEnvironment);
// This configuration is all optional.
final String? frontendServerStarterPath = environment.defines[kFrontendServerStarterPath];
final List<String> extraFrontEndOptions = decodeCommaSeparated(environment.defines, kExtraFrontEndOptions);
final List<String>? fileSystemRoots = environment.defines[kFileSystemRoots]?.split(',');
final String? fileSystemScheme = environment.defines[kFileSystemScheme];
......@@ -254,6 +255,7 @@ class KernelSnapshot extends Target {
linkPlatformKernelIn: forceLinkPlatform || buildMode.isPrecompiled,
mainPath: targetFileAbsolute,
depFilePath: environment.buildDir.childFile('kernel_snapshot.d').path,
frontendServerStarterPath: frontendServerStarterPath,
extraFrontEndOptions: extraFrontEndOptions,
fileSystemRoots: fileSystemRoots,
fileSystemScheme: fileSystemScheme,
......
......@@ -315,6 +315,7 @@ class RunCommand extends RunCommandBase {
requiresPubspecYaml();
usesFilesystemOptions(hide: !verboseHelp);
usesExtraDartFlagOptions(verboseHelp: verboseHelp);
usesFrontendServerStarterPathOption(verboseHelp: verboseHelp);
addEnableExperimentation(hide: !verboseHelp);
usesInitializeFromDillOption(hide: !verboseHelp);
......
......@@ -67,6 +67,7 @@ class TestCommand extends FlutterCommand with DeviceBasedDevelopmentArtifacts {
requiresPubspecYaml();
usesPubOption();
addNullSafetyModeOptions(hide: !verboseHelp);
usesFrontendServerStarterPathOption(verboseHelp: verboseHelp);
usesTrackWidgetCreation(verboseHelp: verboseHelp);
addEnableExperimentation(hide: !verboseHelp);
usesDartDefineOption();
......
......@@ -227,6 +227,7 @@ class KernelCompiler {
TargetModel targetModel = TargetModel.flutter,
bool linkPlatformKernelIn = false,
bool aot = false,
String? frontendServerStarterPath,
List<String>? extraFrontEndOptions,
List<String>? fileSystemRoots,
String? fileSystemScheme,
......@@ -243,10 +244,12 @@ class KernelCompiler {
String? nativeAssets,
}) async {
final TargetPlatform? platform = targetModel == TargetModel.dartdevc ? TargetPlatform.web_javascript : null;
final String frontendServer = _artifacts.getArtifactPath(
Artifact.frontendServerSnapshotForEngineDartSdk,
platform: platform,
);
final String frontendServer = (frontendServerStarterPath == null || frontendServerStarterPath.isEmpty)
? _artifacts.getArtifactPath(
Artifact.frontendServerSnapshotForEngineDartSdk,
platform: platform,
)
: frontendServerStarterPath;
// This is a URI, not a file path, so the forward slash is correct even on Windows.
if (!sdkRoot.endsWith('/')) {
sdkRoot = '$sdkRoot/';
......@@ -490,6 +493,7 @@ abstract class ResidentCompiler {
bool assumeInitializeFromDillUpToDate,
TargetModel targetModel,
bool unsafePackageSerialization,
String? frontendServerStarterPath,
List<String> extraFrontEndOptions,
String platformDill,
List<String>? dartDefines,
......@@ -605,6 +609,7 @@ class DefaultResidentCompiler implements ResidentCompiler {
this.assumeInitializeFromDillUpToDate = false,
this.targetModel = TargetModel.flutter,
this.unsafePackageSerialization = false,
this.frontendServerStarterPath,
this.extraFrontEndOptions,
this.platformDill,
List<String>? dartDefines,
......@@ -635,6 +640,7 @@ class DefaultResidentCompiler implements ResidentCompiler {
final String? initializeFromDill;
final bool assumeInitializeFromDillUpToDate;
final bool unsafePackageSerialization;
final String? frontendServerStarterPath;
final List<String>? extraFrontEndOptions;
final List<String> dartDefines;
final String? librariesSpec;
......@@ -771,10 +777,12 @@ class DefaultResidentCompiler implements ResidentCompiler {
String? nativeAssetsUri,
}) async {
final TargetPlatform? platform = (targetModel == TargetModel.dartdevc) ? TargetPlatform.web_javascript : null;
final String frontendServer = artifacts.getArtifactPath(
Artifact.frontendServerSnapshotForEngineDartSdk,
platform: platform,
);
final String frontendServer = (frontendServerStarterPath == null || frontendServerStarterPath!.isEmpty)
? artifacts.getArtifactPath(
Artifact.frontendServerSnapshotForEngineDartSdk,
platform: platform,
)
: frontendServerStarterPath!;
final List<String> command = <String>[
artifacts.getArtifactPath(Artifact.engineDartBinary, platform: platform),
'--disable-dart-dev',
......
......@@ -67,6 +67,7 @@ class FlutterDevice {
targetModel: targetModel,
dartDefines: buildInfo.dartDefines,
packagesPath: buildInfo.packagesPath,
frontendServerStarterPath: buildInfo.frontendServerStarterPath,
extraFrontEndOptions: buildInfo.extraFrontEndOptions,
artifacts: globals.artifacts!,
processManager: globals.processManager,
......@@ -155,6 +156,7 @@ class FlutterDevice {
),
assumeInitializeFromDillUpToDate: buildInfo.assumeInitializeFromDillUpToDate,
targetModel: TargetModel.dartdevc,
frontendServerStarterPath: buildInfo.frontendServerStarterPath,
extraFrontEndOptions: extraFrontEndOptions,
platformDill: globals.fs.file(platformDillPath).absolute.uri.toString(),
dartDefines: buildInfo.dartDefines,
......@@ -185,6 +187,7 @@ class FlutterDevice {
fileSystemScheme: buildInfo.fileSystemScheme,
targetModel: targetModel,
dartDefines: buildInfo.dartDefines,
frontendServerStarterPath: buildInfo.frontendServerStarterPath,
extraFrontEndOptions: extraFrontEndOptions,
initializeFromDill: buildInfo.initializeFromDill ?? getDefaultCachedKernelPath(
trackWidgetCreation: buildInfo.trackWidgetCreation,
......
......@@ -112,6 +112,7 @@ class FlutterCommandResult {
/// Common flutter command line options.
abstract final class FlutterOptions {
static const String kFrontendServerStarterPath = 'frontend-server-starter-path';
static const String kExtraFrontEndOptions = 'extra-front-end-options';
static const String kExtraGenSnapshotOptions = 'extra-gen-snapshot-options';
static const String kEnableExperiment = 'enable-experiment';
......@@ -849,6 +850,18 @@ abstract class FlutterCommand extends Command<void> {
);
}
void usesFrontendServerStarterPathOption({required bool verboseHelp}) {
argParser.addOption(
FlutterOptions.kFrontendServerStarterPath,
help: 'When this value is provided, the frontend server will be started '
'in JIT mode from the specified file, instead of from the AOT '
'snapshot shipped with the Dart SDK. The specified file can either '
'be a Dart source file, or an AppJIT snapshot. This option does '
'not affect web builds.',
hide: !verboseHelp,
);
}
/// Enables support for the hidden options --extra-front-end-options and
/// --extra-gen-snapshot-options.
void usesExtraDartFlagOptions({ required bool verboseHelp }) {
......@@ -1239,6 +1252,10 @@ abstract class FlutterCommand extends Command<void> {
? stringArg('flavor')
: null,
trackWidgetCreation: trackWidgetCreation,
frontendServerStarterPath: argParser.options
.containsKey(FlutterOptions.kFrontendServerStarterPath)
? stringArg(FlutterOptions.kFrontendServerStarterPath)
: null,
extraFrontEndOptions: extraFrontEndOptions.isNotEmpty
? extraFrontEndOptions
: null,
......
......@@ -121,6 +121,7 @@ class TestCompiler {
initializeFromDill: testFilePath,
dartDefines: buildInfo.dartDefines,
packagesPath: buildInfo.packagesPath,
frontendServerStarterPath: buildInfo.frontendServerStarterPath,
extraFrontEndOptions: buildInfo.extraFrontEndOptions,
platform: globals.platform,
testCompilation: true,
......
......@@ -175,6 +175,7 @@ void main() {
dartDefines: <String>['foo=2', 'bar=2'],
dartObfuscation: true,
splitDebugInfoPath: 'foo/',
frontendServerStarterPath: 'foo/bar/frontend_server_starter.dart',
extraFrontEndOptions: <String>['--enable-experiment=non-nullable', 'bar'],
extraGenSnapshotOptions: <String>['--enable-experiment=non-nullable', 'fizz'],
bundleSkSLPath: 'foo/bar/baz.sksl.json',
......@@ -190,6 +191,7 @@ void main() {
'BuildMode': 'debug',
'DartDefines': 'Zm9vPTI=,YmFyPTI=',
'DartObfuscation': 'true',
'FrontendServerStarterPath': 'foo/bar/frontend_server_starter.dart',
'ExtraFrontEndOptions': '--enable-experiment=non-nullable,bar',
'ExtraGenSnapshotOptions': '--enable-experiment=non-nullable,fizz',
'SplitDebugInfo': 'foo/',
......@@ -211,6 +213,7 @@ void main() {
dartDefines: <String>['foo=2', 'bar=2'],
dartObfuscation: true,
splitDebugInfoPath: 'foo/',
frontendServerStarterPath: 'foo/bar/frontend_server_starter.dart',
extraFrontEndOptions: <String>['--enable-experiment=non-nullable', 'bar'],
extraGenSnapshotOptions: <String>['--enable-experiment=non-nullable', 'fizz'],
bundleSkSLPath: 'foo/bar/baz.sksl.json',
......@@ -226,6 +229,7 @@ void main() {
'DART_DEFINES': 'Zm9vPTI=,YmFyPTI=',
'DART_OBFUSCATION': 'true',
'SPLIT_DEBUG_INFO': 'foo/',
'FRONTEND_SERVER_STARTER_PATH': 'foo/bar/frontend_server_starter.dart',
'EXTRA_FRONT_END_OPTIONS': '--enable-experiment=non-nullable,bar',
'EXTRA_GEN_SNAPSHOT_OPTIONS': '--enable-experiment=non-nullable,fizz',
'BUNDLE_SKSL_PATH': 'foo/bar/baz.sksl.json',
......@@ -242,6 +246,7 @@ void main() {
dartDefineConfigJsonMap: <String, Object>{'baz': '2'},
dartObfuscation: true,
splitDebugInfoPath: 'foo/',
frontendServerStarterPath: 'foo/bar/frontend_server_starter.dart',
extraFrontEndOptions: <String>['--enable-experiment=non-nullable', 'bar'],
extraGenSnapshotOptions: <String>['--enable-experiment=non-nullable', 'fizz'],
bundleSkSLPath: 'foo/bar/baz.sksl.json',
......@@ -253,6 +258,7 @@ void main() {
expect(buildInfo.toGradleConfig(), <String>[
'-Pdart-defines=Zm9vPTI=,YmFyPTI=',
'-Pdart-obfuscation=true',
'-Pfrontend-server-starter-path=foo/bar/frontend_server_starter.dart',
'-Pextra-front-end-options=--enable-experiment=non-nullable,bar',
'-Pextra-gen-snapshot-options=--enable-experiment=non-nullable,fizz',
'-Psplit-debug-info=foo/',
......
......@@ -217,6 +217,53 @@ native-assets: {}
expect(processManager, hasNoRemainingExpectations);
});
testWithoutContext('KernelSnapshot correctly forwards FrontendServerStarterPath', () async {
fileSystem.file('.dart_tool/package_config.json')
..createSync(recursive: true)
..writeAsStringSync('{"configVersion": 2, "packages":[]}');
androidEnvironment.buildDir.childFile('native_assets.yaml')
..createSync(recursive: true)
..writeAsStringSync(emptyNativeAssets);
final String build = androidEnvironment.buildDir.path;
final String flutterPatchedSdkPath = artifacts.getArtifactPath(
Artifact.flutterPatchedSdkPath,
platform: TargetPlatform.android_arm,
mode: BuildMode.profile,
);
processManager.addCommands(<FakeCommand>[
FakeCommand(command: <String>[
artifacts.getArtifactPath(Artifact.engineDartBinary),
'--disable-dart-dev',
'path/to/frontend_server_starter.dart',
'--sdk-root',
'$flutterPatchedSdkPath/',
'--target=flutter',
'--no-print-incremental-dependencies',
...buildModeOptions(BuildMode.profile, <String>[]),
'--track-widget-creation',
'--aot',
'--tfa',
'--target-os',
'android',
'--packages',
'/.dart_tool/package_config.json',
'--output-dill',
'$build/app.dill',
'--depfile',
'$build/kernel_snapshot.d',
'--native-assets',
'$build/native_assets.yaml',
'--verbosity=error',
'file:///lib/main.dart',
], stdout: 'result $kBoundaryKey\n$kBoundaryKey\n$kBoundaryKey $build/app.dill 0\n'),
]);
await const KernelSnapshot()
.build(androidEnvironment..defines[kFrontendServerStarterPath] = 'path/to/frontend_server_starter.dart');
expect(processManager, hasNoRemainingExpectations);
});
testWithoutContext('KernelSnapshot correctly forwards ExtraFrontEndOptions', () async {
fileSystem.file('.dart_tool/package_config.json')
..createSync(recursive: true)
......
......@@ -391,6 +391,38 @@ void main() {
ProcessManager: () => processManager,
}));
test('Dart2JSTarget ignores frontend server starter path option when calling dart2js', () => testbed.run(() async {
environment.defines[kBuildMode] = 'profile';
environment.defines[kFrontendServerStarterPath] = 'path/to/frontend_server_starter.dart';
processManager.addCommand(FakeCommand(
command: <String>[
..._kDart2jsLinuxArgs,
'-Ddart.vm.profile=true',
'--no-source-maps',
'-o',
environment.buildDir.childFile('app.dill').absolute.path,
'--packages=.dart_tool/package_config.json',
'--cfe-only',
environment.buildDir.childFile('main.dart').absolute.path,
]
));
processManager.addCommand(FakeCommand(
command: <String>[
..._kDart2jsLinuxArgs,
'-Ddart.vm.profile=true',
'--no-minify',
'--no-source-maps',
'-O4',
'-o',
environment.buildDir.childFile('main.dart.js').absolute.path,
environment.buildDir.childFile('app.dill').absolute.path,
]
));
await Dart2JSTarget(WebRendererMode.auto).build(environment);
}, overrides: <Type, Generator>{
ProcessManager: () => processManager,
}));
test('Dart2JSTarget calls dart2js with expected args with enabled experiment', () => testbed.run(() async {
environment.defines[kBuildMode] = 'profile';
......
......@@ -87,6 +87,7 @@ void main() {
BuildMode.debug,
null,
trackWidgetCreation: true,
frontendServerStarterPath: 'path/to/frontend_server_starter.dart',
extraFrontEndOptions: <String>['test1', 'test2'],
extraGenSnapshotOptions: <String>['test3', 'test4'],
fileSystemRoots: <String>['test5', 'test6'],
......@@ -106,6 +107,7 @@ void main() {
expect(env!.defines[kTargetPlatform], 'ios');
expect(env!.defines[kTargetFile], mainPath);
expect(env!.defines[kTrackWidgetCreation], 'true');
expect(env!.defines[kFrontendServerStarterPath], 'path/to/frontend_server_starter.dart');
expect(env!.defines[kExtraFrontEndOptions], 'test1,test2');
expect(env!.defines[kExtraGenSnapshotOptions], 'test3,test4');
expect(env!.defines[kFileSystemRoots], 'test5,test6');
......
......@@ -1963,6 +1963,28 @@ flutter:
ProcessManager: () => FakeProcessManager.any(),
});
testUsingContext('FlutterDevice passes frontendServerStarterPath parameter if specified', () async {
fakeVmServiceHost = FakeVmServiceHost(requests: <VmServiceExpectation>[]);
final FakeDevice device = FakeDevice();
final DefaultResidentCompiler? residentCompiler = (await FlutterDevice.create(
device,
buildInfo: const BuildInfo(
BuildMode.debug,
'',
treeShakeIcons: false,
frontendServerStarterPath: '/foo/bar/frontend_server_starter.dart',
),
target: null, platform: FakePlatform(),
)).generator as DefaultResidentCompiler?;
expect(residentCompiler!.frontendServerStarterPath, '/foo/bar/frontend_server_starter.dart');
}, overrides: <Type, Generator>{
Artifacts: () => Artifacts.test(),
FileSystem: () => MemoryFileSystem.test(),
ProcessManager: () => FakeProcessManager.any(),
});
testUsingContext('Handle existing VM service clients DDS error', () => testbed.run(() async {
fakeVmServiceHost = FakeVmServiceHost(requests: <VmServiceExpectation>[]);
final FakeDevice device = FakeDevice()
......
......@@ -51,6 +51,7 @@ void main() {
'-dTrackWidgetCreation=',
'-dDartObfuscation=',
'-dAction=build',
'-dFrontendServerStarterPath=',
'--ExtraGenSnapshotOptions=',
'--DartDefines=',
'--ExtraFrontEndOptions=',
......@@ -103,6 +104,7 @@ void main() {
'-dTrackWidgetCreation=',
'-dDartObfuscation=',
'-dAction=',
'-dFrontendServerStarterPath=',
'--ExtraGenSnapshotOptions=',
'--DartDefines=',
'--ExtraFrontEndOptions=',
......@@ -136,6 +138,7 @@ void main() {
const String expandedCodeSignIdentity = 'F1326572E0B71C3C8442805230CB4B33B708A2E2';
const String extraFrontEndOptions = '--some-option';
const String extraGenSnapshotOptions = '--obfuscate';
const String frontendServerStarterPath = '/path/to/frontend_server_starter.dart';
const String sdkRoot = '/path/to/sdk';
const String splitDebugInfo = '/path/to/split/debug/info';
const String trackWidgetCreation = 'true';
......@@ -154,6 +157,7 @@ void main() {
'EXTRA_FRONT_END_OPTIONS': extraFrontEndOptions,
'EXTRA_GEN_SNAPSHOT_OPTIONS': extraGenSnapshotOptions,
'FLUTTER_ROOT': flutterRoot.path,
'FRONTEND_SERVER_STARTER_PATH': frontendServerStarterPath,
'INFOPLIST_PATH': 'Info.plist',
'SDKROOT': sdkRoot,
'SPLIT_DEBUG_INFO': splitDebugInfo,
......@@ -177,6 +181,7 @@ void main() {
'-dTrackWidgetCreation=$trackWidgetCreation',
'-dDartObfuscation=$dartObfuscation',
'-dAction=install',
'-dFrontendServerStarterPath=$frontendServerStarterPath',
'--ExtraGenSnapshotOptions=$extraGenSnapshotOptions',
'--DartDefines=$dartDefines',
'--ExtraFrontEndOptions=$extraFrontEndOptions',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment