Skip to content

Commit 4a5dc26

Browse files
authored
[record_use] Run build hooks and link hooks in separate targets (flutter#184880)
Bug: * dart-lang/native#2690 Splits the build and link hooks into separate `Target`s so that the build hooks can run concurrently with gen_kernel, dart2js, and dart2wasm. Caching tests added: * Changing Dart code and recorded uses causes no build hooks rerun but link hooks rerun. * Changing Dart code but no recorded uses casus no link hooks rerun. * Changing build hooks (or its dependencies) causes build hooks to rerun, but not link hooks to rerun of the outputs of the build hooks didn't change. * Changing the build hook outputs causes the link hooks to rerun. Fixes the test case: * Properly adds the dependencies to both the build and link hook. Also refactors the targets to better naming: * `DartBuild` -> `BuildHooks` (name `dart_build` -> `build_hooks`) * `DartLink` -> `LinkHooks` (name `dart_link` -> `link_hooks`) And simplifies the amount of targets: * removed the `ForNative` and `ForWeb` variants and made the targets a bit more configurable instead.
1 parent 735966b commit 4a5dc26

23 files changed

Lines changed: 737 additions & 275 deletions

File tree

dev/integration_tests/record_use_test_package/hook/build.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,16 @@ import 'package:hooks/hooks.dart';
88
void main(List<String> args) async {
99
await build(args, (BuildInput input, BuildOutputBuilder output) async {
1010
if (input.config.buildAssetTypes.contains('data_assets/data')) {
11+
final Uri file = input.packageRoot.resolve('data/translations.json');
1112
output.assets.data.add(
1213
DataAsset(
1314
package: input.packageName,
1415
name: 'data/translations.json',
15-
file: input.packageRoot.resolve('data/translations.json'),
16+
file: file,
1617
),
1718
routing: input.config.linkingEnabled ? ToLinkHook(input.packageName) : const ToAppBundle(),
1819
);
20+
output.dependencies.add(file);
1921
}
2022
});
2123
}

dev/integration_tests/record_use_test_package/hook/link.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ void main(List<String> args) async {
1717
return;
1818
}
1919

20+
output.dependencies.add(translationAsset.asDataAsset.file);
21+
2022
final Recordings? recordings = await input.recordings;
2123
if (recordings == null) {
2224
// Record use not enabled, return full translations file.

packages/flutter_tools/lib/src/build_system/targets/android.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ abstract class AndroidAssetBundle extends Target {
3131
@override
3232
List<Source> get inputs => const <Source>[
3333
Source.pattern('{BUILD_DIR}/app.dill'),
34-
Source.pattern('{BUILD_DIR}/${DartBuild.dartHookResultFilename}'),
34+
Source.pattern('{BUILD_DIR}/${LinkHooks.resultFilename}'),
3535
...IconTreeShaker.inputs,
3636
];
3737

@@ -72,7 +72,7 @@ abstract class AndroidAssetBundle extends Target {
7272
.file(isolateSnapshotData)
7373
.copySync(outputDirectory.childFile('isolate_snapshot_data').path);
7474
}
75-
final DartHooksResult dartHookResult = await DartBuild.loadHookResult(environment);
75+
final DartHooksResult dartHookResult = await LinkHooks.loadHookResult(environment);
7676
final Depfile assetDepfile = await copyAssets(
7777
environment,
7878
outputDirectory,
@@ -94,7 +94,7 @@ abstract class AndroidAssetBundle extends Target {
9494

9595
@override
9696
List<Target> get dependencies => const <Target>[
97-
DartBuildForNative(),
97+
LinkHooks(),
9898
KernelSnapshot(),
9999
InstallCodeAssets(),
100100
];

packages/flutter_tools/lib/src/build_system/targets/assets.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -272,14 +272,14 @@ class CopyAssets extends Target {
272272
String get name => 'copy_assets';
273273

274274
@override
275-
List<Target> get dependencies => const <Target>[DartBuildForNative(), KernelSnapshot()];
275+
List<Target> get dependencies => const <Target>[LinkHooks(), KernelSnapshot()];
276276

277277
@override
278278
List<Source> get inputs => const <Source>[
279279
Source.pattern(
280280
'{FLUTTER_ROOT}/packages/flutter_tools/lib/src/build_system/targets/assets.dart',
281281
),
282-
Source.pattern('{BUILD_DIR}/${DartBuild.dartHookResultFilename}'),
282+
Source.pattern('{BUILD_DIR}/${LinkHooks.resultFilename}'),
283283
...IconTreeShaker.inputs,
284284
...ShaderCompiler.inputs,
285285
];
@@ -302,7 +302,7 @@ class CopyAssets extends Target {
302302
final buildMode = BuildMode.fromCliName(buildModeEnvironment);
303303
final Directory output = environment.buildDir.childDirectory('flutter_assets');
304304
output.createSync(recursive: true);
305-
final DartHooksResult dartHookResult = await DartBuild.loadHookResult(environment);
305+
final DartHooksResult dartHookResult = await LinkHooks.loadHookResult(environment);
306306
final Depfile depfile = await copyAssets(
307307
environment,
308308
output,

packages/flutter_tools/lib/src/build_system/targets/common.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class CopyFlutterBundle extends Target {
4040
Source.artifact(Artifact.vmSnapshotData, mode: BuildMode.debug),
4141
Source.artifact(Artifact.isolateSnapshotData, mode: BuildMode.debug),
4242
Source.pattern('{BUILD_DIR}/app.dill'),
43-
Source.pattern('{BUILD_DIR}/${DartBuild.dartHookResultFilename}'),
43+
Source.pattern('{BUILD_DIR}/${LinkHooks.resultFilename}'),
4444
...IconTreeShaker.inputs,
4545
...ShaderCompiler.inputs,
4646
];
@@ -50,7 +50,7 @@ class CopyFlutterBundle extends Target {
5050
Source.pattern('{OUTPUT_DIR}/vm_snapshot_data'),
5151
Source.pattern('{OUTPUT_DIR}/isolate_snapshot_data'),
5252
Source.pattern('{OUTPUT_DIR}/kernel_blob.bin'),
53-
Source.pattern('{BUILD_DIR}/${DartBuild.dartHookResultFilename}'),
53+
Source.pattern('{BUILD_DIR}/${LinkHooks.resultFilename}'),
5454
];
5555

5656
@override
@@ -87,7 +87,7 @@ class CopyFlutterBundle extends Target {
8787
.file(isolateSnapshotData)
8888
.copySync(environment.outputDir.childFile('isolate_snapshot_data').path);
8989
}
90-
final DartHooksResult dartHookResult = await DartBuild.loadHookResult(environment);
90+
final DartHooksResult dartHookResult = await LinkHooks.loadHookResult(environment);
9191
final Depfile assetDepfile = await copyAssets(
9292
environment,
9393
environment.outputDir,
@@ -109,7 +109,7 @@ class CopyFlutterBundle extends Target {
109109

110110
@override
111111
List<Target> get dependencies => const <Target>[
112-
DartBuildForNative(),
112+
LinkHooks(),
113113
KernelSnapshot(),
114114
InstallCodeAssets(),
115115
];

packages/flutter_tools/lib/src/build_system/targets/ios.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -622,14 +622,14 @@ abstract class IosAssetBundle extends Target {
622622
KernelSnapshot(),
623623
InstallCodeAssets(),
624624
_IssueLaunchRootViewControllerAccess(),
625-
DartBuildForNative(),
625+
LinkHooks(),
626626
];
627627

628628
@override
629629
List<Source> get inputs => const <Source>[
630630
Source.pattern('{BUILD_DIR}/App.framework/App'),
631631
Source.pattern('{PROJECT_DIR}/pubspec.yaml'),
632-
Source.pattern('{BUILD_DIR}/${DartBuild.dartHookResultFilename}'),
632+
Source.pattern('{BUILD_DIR}/${LinkHooks.resultFilename}'),
633633
...IconTreeShaker.inputs,
634634
...ShaderCompiler.inputs,
635635
];
@@ -710,7 +710,7 @@ abstract class IosAssetBundle extends Target {
710710
final String? flavor = await flutterProject.ios.parseFlavorFromConfiguration(environment);
711711

712712
// Copy the assets.
713-
final DartHooksResult dartHookResult = await DartBuild.loadHookResult(environment);
713+
final DartHooksResult dartHookResult = await LinkHooks.loadHookResult(environment);
714714
final Depfile assetDepfile = await copyAssets(
715715
environment,
716716
assetDirectory,

packages/flutter_tools/lib/src/build_system/targets/linux.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ abstract class BundleLinuxAssets extends Target {
9494

9595
@override
9696
List<Target> get dependencies => <Target>[
97-
const DartBuildForNative(),
97+
const LinkHooks(),
9898
const KernelSnapshot(),
9999
const InstallCodeAssets(),
100100
UnpackLinux(targetPlatform),
@@ -104,7 +104,7 @@ abstract class BundleLinuxAssets extends Target {
104104
List<Source> get inputs => const <Source>[
105105
Source.pattern('{FLUTTER_ROOT}/packages/flutter_tools/lib/src/build_system/targets/linux.dart'),
106106
Source.pattern('{PROJECT_DIR}/pubspec.yaml'),
107-
Source.pattern('{BUILD_DIR}/${DartBuild.dartHookResultFilename}'),
107+
Source.pattern('{BUILD_DIR}/${LinkHooks.resultFilename}'),
108108
...IconTreeShaker.inputs,
109109
];
110110

@@ -130,7 +130,7 @@ abstract class BundleLinuxAssets extends Target {
130130
.copySync(outputDirectory.childFile('kernel_blob.bin').path);
131131
}
132132
final String versionInfo = getVersionInfo(environment.defines);
133-
final DartHooksResult dartHookResult = await DartBuild.loadHookResult(environment);
133+
final DartHooksResult dartHookResult = await LinkHooks.loadHookResult(environment);
134134
final Depfile depfile = await copyAssets(
135135
environment,
136136
outputDirectory,

packages/flutter_tools/lib/src/build_system/targets/macos.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -382,12 +382,12 @@ abstract class MacOSBundleFlutterAssets extends Target {
382382
const MacOSBundleFlutterAssets();
383383

384384
@override
385-
List<Target> get dependencies => const <Target>[DartBuildForNative()];
385+
List<Target> get dependencies => const <Target>[LinkHooks()];
386386

387387
@override
388388
List<Source> get inputs => const <Source>[
389389
Source.pattern('{BUILD_DIR}/App.framework/App'),
390-
Source.pattern('{BUILD_DIR}/${DartBuild.dartHookResultFilename}'),
390+
Source.pattern('{BUILD_DIR}/${LinkHooks.resultFilename}'),
391391
...IconTreeShaker.inputs,
392392
];
393393

@@ -446,7 +446,7 @@ abstract class MacOSBundleFlutterAssets extends Target {
446446
final FlutterProject flutterProject = FlutterProject.fromDirectory(environment.projectDir);
447447
final String? flavor = await flutterProject.macos.parseFlavorFromConfiguration(environment);
448448

449-
final DartHooksResult dartHookResult = await DartBuild.loadHookResult(environment);
449+
final DartHooksResult dartHookResult = await LinkHooks.loadHookResult(environment);
450450
final Depfile assetDepfile = await copyAssets(
451451
environment,
452452
assetDirectory,

0 commit comments

Comments
 (0)