From be97d03a25851f70a8dc4d00b30f3dd4e445614c Mon Sep 17 00:00:00 2001 From: Jackson Gardner Date: Thu, 16 Mar 2023 16:13:04 -0700 Subject: [PATCH] Use depfile with dart2wasm to determine when to rebuild. (#122817) Use depfile with dart2wasm to determine when to rebuild. --- .../flutter_tools/lib/src/build_system/targets/web.dart | 8 ++++++++ .../test/general.shard/build_system/targets/web_test.dart | 3 +++ 2 files changed, 11 insertions(+) diff --git a/packages/flutter_tools/lib/src/build_system/targets/web.dart b/packages/flutter_tools/lib/src/build_system/targets/web.dart index e69dbda3a46..1398ae8c591 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/web.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/web.dart @@ -295,6 +295,7 @@ class Dart2WasmTarget extends Dart2WebTarget { final BuildMode buildMode = getBuildModeForName(buildModeEnvironment); final Artifacts artifacts = globals.artifacts!; final File outputWasmFile = environment.buildDir.childFile('main.dart.wasm'); + final File depFile = environment.buildDir.childFile('dart2wasm.d'); final String dartSdkPath = artifacts.getArtifactPath(Artifact.engineDartSdkPath, platform: TargetPlatform.web_javascript); final String dartSdkRoot = environment.fileSystem.directory(dartSdkPath).parent.path; @@ -319,10 +320,12 @@ class Dart2WasmTarget extends Dart2WebTarget { dartSdkRoot, '--libraries-spec', artifacts.getHostArtifact(HostArtifact.flutterWebLibrariesJson).path, + '--depfile=${depFile.path}', environment.buildDir.childFile('main.dart').path, // dartfile outputWasmFile.path, ]; + globals.printTrace('compiling dart code to wasm with command "${compilationArgs.join(' ')}"'); final ProcessResult compileResult = await globals.processManager.run(compilationArgs); if (compileResult.exitCode != 0) { throw Exception(_collectOutput(compileResult)); @@ -335,6 +338,11 @@ class Dart2WasmTarget extends Dart2WebTarget { @override String get name => 'dart2wasm'; + @override + List get depfiles => const [ + 'dart2wasm.d', + ]; + @override List get outputs => const [ Source.pattern('{OUTPUT_DIR}/main.dart.wasm'), diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/web_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/web_test.dart index 16893898c43..47b37a13f84 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/web_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/web_test.dart @@ -778,6 +778,8 @@ void main() { environment.defines[kBuildMode] = 'profile'; environment.defines[kDartDefines] = encodeDartDefines(['FOO=bar', 'BAZ=qux']); + final File depFile = environment.buildDir.childFile('dart2wasm.d'); + processManager.addCommand(FakeCommand( command: [ 'bin/cache/dart-sdk/bin/dartaotruntime', @@ -796,6 +798,7 @@ void main() { 'bin/cache', '--libraries-spec', 'bin/cache/flutter_web_sdk/libraries.json', + '--depfile=${depFile.absolute.path}', environment.buildDir.childFile('main.dart').absolute.path, environment.buildDir.childFile('main.dart.wasm').absolute.path,