Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit eac124e

Browse files
authored
[gn] Change sdk_rewriter() template to use depfiles (#51314)
Part of flutter/flutter#144430 From `gn help inputs`: "It may be tempting to write a script that enumerates all files in a directory as inputs. Don't do this!"
1 parent 6cefbe1 commit eac124e

File tree

3 files changed

+46
-29
lines changed

3 files changed

+46
-29
lines changed

web_sdk/BUILD.gn

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ sdk_rewriter("web_ui_library_sources") {
4141
output_dir = "$root_out_dir/flutter_web_sdk/lib/ui/"
4242

4343
# exclude everything in the engine directory, it will be a separate internal library
44-
exclude_patterns = [ rebase_path("//flutter/lib/web_ui/lib/src/*") ]
44+
exclude_pattern = rebase_path("//flutter/lib/web_ui/lib/src")
4545
}
4646

4747
web_ui_ui_web_with_output("web_ui_ui_web") {
@@ -55,8 +55,7 @@ sdk_rewriter("web_engine_library") {
5555
output_dir = "$root_out_dir/flutter_web_sdk/lib/_engine/"
5656

5757
# exclude skwasm, it will be a separate internal library
58-
exclude_patterns =
59-
[ rebase_path("//flutter/lib/web_ui/lib/src/engine/skwasm/*") ]
58+
exclude_pattern = rebase_path("//flutter/lib/web_ui/lib/src/engine/skwasm")
6059
}
6160

6261
sdk_rewriter("skwasm_stub_library") {

web_sdk/sdk_rewriter.dart

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ final ArgParser argParser = ArgParser()
1515
..addOption('library-name')
1616
..addOption('api-file')
1717
..addMultiOption('source-file')
18-
..addOption('stamp');
18+
..addOption('stamp')
19+
..addOption('depfile')
20+
..addOption('exclude-pattern')
21+
..addOption('build-dir');
1922

2023
final List<Replacer> uiPatterns = <Replacer>[
2124
AllReplacer(RegExp(r'library\s+ui;'), 'library dart.ui;'),
@@ -113,6 +116,10 @@ void main(List<String> arguments) {
113116
final ArgResults results = argParser.parse(arguments);
114117
final Directory directory = Directory(results['output-dir'] as String);
115118
final String inputDirectoryPath = results['input-dir'] as String;
119+
final String? excludePattern = results['exclude-pattern'] as String?;
120+
final String stampfilePath = results['stamp'] as String;
121+
final String depfilePath = results['depfile'] as String;
122+
final String buildDirPath = results['build-dir'] as String;
116123

117124
String Function(String source)? preprocessor;
118125
List<Replacer> replacementPatterns;
@@ -130,13 +137,25 @@ void main(List<String> arguments) {
130137
preprocessor = (String source) => preprocessPartFile(source, libraryName!);
131138
replacementPatterns = generatePartsPatterns(libraryName, isPublic);
132139
}
133-
for (final String inputFilePath in results['source-file'] as Iterable<String>) {
134-
String pathSuffix = inputFilePath.substring(inputDirectoryPath.length);
140+
141+
final List<String> inputFiles = <String>[];
142+
final List<FileSystemEntity> entries = Directory(inputDirectoryPath).listSync(
143+
recursive: true, followLinks: false,
144+
);
145+
for (final File inputFile in entries.whereType<File>()) {
146+
if (excludePattern != null && inputFile.path.startsWith(excludePattern)) {
147+
continue;
148+
}
149+
if (!inputFile.path.endsWith('.dart') || inputFile.path.endsWith('_test.dart')) {
150+
continue;
151+
}
152+
inputFiles.add(path.relative(inputFile.path, from: buildDirPath));
153+
String pathSuffix = inputFile.path.substring(inputDirectoryPath.length);
135154
if (libraryName != null) {
136155
pathSuffix = path.join(libraryName, pathSuffix);
137156
}
138157
final String outputFilePath = path.join(directory.path, pathSuffix);
139-
processFile(inputFilePath, outputFilePath, preprocessor, replacementPatterns);
158+
processFile(inputFile.path, outputFilePath, preprocessor, replacementPatterns);
140159
}
141160

142161
if (results['api-file'] != null) {
@@ -159,10 +178,15 @@ void main(List<String> arguments) {
159178
);
160179
}
161180

181+
File(stampfilePath).writeAsStringSync('stamp');
182+
writeDepfile(depfilePath, stampfilePath, inputFiles);
183+
}
162184

163-
if (results['stamp'] != null) {
164-
File(results['stamp'] as String).writeAsStringSync('stamp');
165-
}
185+
void writeDepfile(String depfilePath, String stampfilePath, List<String> inputFiles) {
186+
final StringBuffer outBuf = StringBuffer();
187+
outBuf.write('$stampfilePath: ');
188+
outBuf.write(inputFiles.join(' '));
189+
File(depfilePath).writeAsStringSync(outBuf.toString());
166190
}
167191

168192
List<String> getExtraImportsForLibrary(String libraryName) {

web_sdk/web_sdk.gni

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,42 +18,41 @@ template("sdk_rewriter") {
1818
assert(defined(invoker.input_dir), "Must pass 'input_dir'")
1919
assert(defined(invoker.output_dir), "Must pass 'output_dir'")
2020

21-
source_dart_files = exec_script("$dart_src/tools/list_dart_files.py",
22-
[
23-
"absolute",
24-
rebase_path(invoker.input_dir),
25-
],
26-
"list lines")
27-
28-
if (defined(invoker.exclude_patterns)) {
29-
filtered_files = filter_exclude(source_dart_files, invoker.exclude_patterns)
30-
source_dart_files = []
31-
source_dart_files = filtered_files
32-
}
33-
3421
prebuilt_dart_action(target_name) {
3522
packages = dart_sdk_package_config
3623
pool = "//flutter/build/dart:dart_pool"
3724

3825
script = "//flutter/web_sdk/sdk_rewriter.dart"
39-
inputs = source_dart_files + [ script ]
26+
27+
depfile = "$target_gen_dir/$target_name.d"
4028

4129
stamp_location = "$target_gen_dir/$target_name.stamp"
4230
outputs = [
4331
stamp_location,
4432
invoker.output_dir,
4533
]
4634

35+
build_dir = rebase_path(root_out_dir)
4736
input_dir = rebase_path(invoker.input_dir)
4837
output_dir = rebase_path(invoker.output_dir)
4938

5039
args = [
40+
"--build-dir=$build_dir",
5141
"--output-dir=$output_dir",
5242
"--input-dir=$input_dir",
43+
"--depfile",
44+
rebase_path(depfile),
5345
"--stamp",
5446
rebase_path(stamp_location, root_build_dir),
5547
]
5648

49+
if (defined(invoker.exclude_pattern)) {
50+
args += [
51+
"--exclude-pattern",
52+
invoker.exclude_pattern,
53+
]
54+
}
55+
5756
if (defined(invoker.is_public) && invoker.is_public) {
5857
args += [ "--public" ]
5958
}
@@ -68,11 +67,6 @@ template("sdk_rewriter") {
6867
"--api-file=$api_file",
6968
]
7069
}
71-
72-
foreach(source_file, source_dart_files) {
73-
path = rebase_path(source_file)
74-
args += [ "--source-file=$path" ]
75-
}
7670
}
7771
}
7872

0 commit comments

Comments
 (0)