Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: tools/patch_sdk.dart

Issue 2895983002: Read SDK and patches from a JSON file. (Closed)
Patch Set: Merged with 1333f97b9a0e3805f991578ef83b0ec4553ecf33 Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/libraries.yaml ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env dart 1 #!/usr/bin/env dart
2 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 2 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
3 // for details. All rights reserved. Use of this source code is governed by a 3 // for details. All rights reserved. Use of this source code is governed by a
4 // BSD-style license that can be found in the LICENSE file. 4 // BSD-style license that can be found in the LICENSE file.
5 5
6 /// Command line tool to merge the SDK libraries and our patch files. 6 /// Command line tool to merge the SDK libraries and our patch files.
7 /// This is currently designed as an offline tool, but we could automate it. 7 /// This is currently designed as an offline tool, but we could automate it.
8 8
9 import 'dart:io'; 9 import 'dart:io';
10 import 'dart:isolate' show RawReceivePort; 10 import 'dart:isolate' show RawReceivePort;
11 import 'dart:async'; 11 import 'dart:async';
12 import 'dart:math' as math; 12 import 'dart:math' as math;
13 import 'dart:convert' show JSON;
13 14
14 import 'package:analyzer/analyzer.dart'; 15 import 'package:analyzer/analyzer.dart';
15 import 'package:analyzer/src/generated/sdk.dart'; 16 import 'package:analyzer/src/generated/sdk.dart';
16 import 'package:path/path.dart' as path; 17 import 'package:path/path.dart' as path;
17 18
18 import 'package:front_end/src/fasta/fasta.dart' as fasta 19 import 'package:front_end/src/fasta/fasta.dart' as fasta
19 show compilePlatform, writeDepsFile; 20 show compilePlatform, writeDepsFile;
20 21
21 import 'package:compiler/src/kernel/fasta_support.dart' as dart2js 22 import 'package:compiler/src/kernel/fasta_support.dart' as dart2js
22 show compilePlatform; 23 show compilePlatform;
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 var outDirUri = Uri.base.resolveUri(new Uri.directory(outDir)); 89 var outDirUri = Uri.base.resolveUri(new Uri.directory(outDir));
89 var sdkOut = path.join(outDir, 'lib'); 90 var sdkOut = path.join(outDir, 'lib');
90 var packagesFile = argv[4]; 91 var packagesFile = argv[4];
91 92
92 // Parse libraries.dart 93 // Parse libraries.dart
93 var libContents = readInputFile(path.join( 94 var libContents = readInputFile(path.join(
94 sdkLibIn, '_internal', 'sdk_library_metadata', 'lib', 'libraries.dart')); 95 sdkLibIn, '_internal', 'sdk_library_metadata', 'lib', 'libraries.dart'));
95 if (forVm) libContents = _updateLibraryMetadata(sdkOut, libContents); 96 if (forVm) libContents = _updateLibraryMetadata(sdkOut, libContents);
96 var sdkLibraries = _getSdkLibraries(libContents); 97 var sdkLibraries = _getSdkLibraries(libContents);
97 98
99 Map<String, String> locations = <String, String>{};
100
98 // Enumerate core libraries and apply patches 101 // Enumerate core libraries and apply patches
99 for (SdkLibrary library in sdkLibraries) { 102 for (SdkLibrary library in sdkLibraries) {
100 if (forDart2js && library.isVmLibrary) continue; 103 if (forDart2js && library.isVmLibrary) continue;
101 if (forVm && library.isDart2JsLibrary) continue; 104 if (forVm && library.isDart2JsLibrary) continue;
102 _applyPatch(library, sdkLibIn, patchIn, sdkOut); 105 _applyPatch(library, sdkLibIn, patchIn, sdkOut, locations);
103 } 106 }
104 107
105 if (forVm) _copyExtraVmLibraries(sdkOut); 108 if (forVm) _copyExtraVmLibraries(sdkOut, locations);
106 109
107 Uri platform = outDirUri.resolve('platform.dill.tmp'); 110 Uri platform = outDirUri.resolve('platform.dill.tmp');
108 Uri outline = outDirUri.resolve('outline.dill'); 111 Uri outline = outDirUri.resolve('outline.dill');
112 Uri librariesJson = outDirUri.resolve("lib/libraries.json");
109 Uri packages = Uri.base.resolveUri(new Uri.file(packagesFile)); 113 Uri packages = Uri.base.resolveUri(new Uri.file(packagesFile));
114
115 await _writeSync(
116 librariesJson.toFilePath(), JSON.encode({"libraries": locations}));
117
110 if (forVm) { 118 if (forVm) {
111 await fasta.compilePlatform(outDirUri, platform, 119 await fasta.compilePlatform(outDirUri, platform,
112 packages: packages, outlineOutput: outline); 120 packages: packages, outlineOutput: outline);
113 } else { 121 } else {
114 await dart2js.compilePlatform(outDirUri, platform, 122 await dart2js.compilePlatform(outDirUri, platform,
115 packages: packages, outlineOutput: outline); 123 packages: packages, outlineOutput: outline);
116 } 124 }
117 125
118 Uri platformFinalLocation = outDirUri.resolve('platform.dill'); 126 Uri platformFinalLocation = outDirUri.resolve('platform.dill');
119 127
120 // To properly regenerate the patched_sdk, patched_dart2js_sdk, and 128 // To properly regenerate the patched_sdk, patched_dart2js_sdk, and
121 // platform.dill only when necessary, we track dependencies as follows: 129 // platform.dill only when necessary, we track dependencies as follows:
122 // - inputs like the sdk libraries and patch files are covered by the 130 // - inputs like the sdk libraries and patch files are covered by the
123 // extraDependencies argument. 131 // extraDependencies argument.
124 // - this script and its script dependencies are handled by writeDepsFile 132 // - this script and its script dependencies are handled by writeDepsFile
125 // here. 133 // here.
126 // - the internal platform libraries that may affect how this script 134 // - the internal platform libraries that may affect how this script
127 // runs in the VM are discovered by providing the `platform` argument 135 // runs in the VM are discovered by providing the `platform` argument
128 // below. Regardless of patched_sdk or patched_dart2js_sdk we provide below 136 // below. Regardless of patched_sdk or patched_dart2js_sdk we provide below
129 // the .dill file of patched_sdk (since the script runs in the VM and not 137 // the .dill file of patched_sdk (since the script runs in the VM and not
130 // in dart2js). At the BUILD.gn level we have a dependency from 138 // in dart2js). At the BUILD.gn level we have a dependency from
131 // patched_dart2js_sdk to patched_sdk to ensure that file already exists. 139 // patched_dart2js_sdk to patched_sdk to ensure that file already exists.
132 await fasta.writeDepsFile(Platform.script, 140 await fasta.writeDepsFile(Platform.script,
133 Uri.base.resolveUri(new Uri.file("$outDir.d")), platformFinalLocation, 141 Uri.base.resolveUri(new Uri.file("$outDir.d")), platformFinalLocation,
142 sdk: outDirUri,
134 packages: packages, 143 packages: packages,
135 platform: 144 platform:
136 forVm ? platform : outDirUri.resolve('../patched_sdk/platform.dill'), 145 forVm ? platform : outDirUri.resolve('../patched_sdk/platform.dill'),
137 extraDependencies: deps, 146 extraDependencies: deps);
138 verbose: false);
139 147
140 await new File.fromUri(platform).rename(platformFinalLocation.toFilePath()); 148 await new File.fromUri(platform).rename(platformFinalLocation.toFilePath());
141 } 149 }
142 150
143 /// Updates the contents of 151 /// Updates the contents of
144 /// sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart to include 152 /// sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart to include
145 /// declarations for vm internal libraries. 153 /// declarations for vm internal libraries.
146 String _updateLibraryMetadata(String sdkOut, String libContents) { 154 String _updateLibraryMetadata(String sdkOut, String libContents) {
147 // Copy and patch libraries.dart and version 155 // Copy and patch libraries.dart and version
148 libContents = libContents.replaceAll( 156 libContents = libContents.replaceAll(
(...skipping 27 matching lines...) Expand all
176 '''); 184 ''');
177 _writeSync( 185 _writeSync(
178 path.join( 186 path.join(
179 sdkOut, '_internal', 'sdk_library_metadata', 'lib', 'libraries.dart'), 187 sdkOut, '_internal', 'sdk_library_metadata', 'lib', 'libraries.dart'),
180 libContents); 188 libContents);
181 return libContents; 189 return libContents;
182 } 190 }
183 191
184 /// Copy internal libraries that are developed under 'runtime/bin/' to the 192 /// Copy internal libraries that are developed under 'runtime/bin/' to the
185 /// patched_sdk folder. 193 /// patched_sdk folder.
186 _copyExtraVmLibraries(String sdkOut) { 194 _copyExtraVmLibraries(String sdkOut, Map<String, String> locations) {
187 var base = path.fromUri(Platform.script); 195 var base = path.fromUri(Platform.script);
188 var dartDir = path.dirname(path.dirname(path.absolute(base))); 196 var dartDir = path.dirname(path.dirname(path.absolute(base)));
189 197
190 for (var tuple in [ 198 for (var tuple in [
191 ['_builtin', 'builtin.dart'] 199 ['_builtin', 'builtin.dart']
192 ]) { 200 ]) {
193 var vmLibrary = tuple[0]; 201 var vmLibrary = tuple[0];
194 var dartFile = tuple[1]; 202 var dartFile = tuple[1];
195 203
196 // The "dart:_builtin" library is only available for the DartVM. 204 // The "dart:_builtin" library is only available for the DartVM.
197 var builtinLibraryIn = path.join(dartDir, 'runtime', 'bin', dartFile); 205 var builtinLibraryIn = path.join(dartDir, 'runtime', 'bin', dartFile);
198 var builtinLibraryOut = path.join(sdkOut, vmLibrary, '${vmLibrary}.dart'); 206 var builtinLibraryOut = path.join(sdkOut, vmLibrary, '${vmLibrary}.dart');
199 _writeSync(builtinLibraryOut, readInputFile(builtinLibraryIn)); 207 _writeSync(builtinLibraryOut, readInputFile(builtinLibraryIn));
208 locations[vmLibrary] = path.join(vmLibrary, '${vmLibrary}.dart');
200 } 209 }
201 210
202 for (var file in ['loader.dart', 'server.dart', 'vmservice_io.dart']) { 211 for (var file in ['loader.dart', 'server.dart', 'vmservice_io.dart']) {
203 var libraryIn = path.join(dartDir, 'runtime', 'bin', 'vmservice', file); 212 var libraryIn = path.join(dartDir, 'runtime', 'bin', 'vmservice', file);
204 var libraryOut = path.join(sdkOut, 'vmservice_io', file); 213 var libraryOut = path.join(sdkOut, 'vmservice_io', file);
205 _writeSync(libraryOut, readInputFile(libraryIn)); 214 _writeSync(libraryOut, readInputFile(libraryIn));
206 } 215 }
216 locations["vmservice_io"] = "vmservice_io/vmservice_io.dart";
207 } 217 }
208 218
209 _applyPatch( 219 _applyPatch(SdkLibrary library, String sdkLibIn, String patchIn, String sdkOut,
210 SdkLibrary library, String sdkLibIn, String patchIn, String sdkOut) { 220 Map<String, String> locations) {
211 var libraryOut = path.join(sdkLibIn, library.path); 221 var libraryOut = path.join(sdkLibIn, library.path);
212 var libraryIn = libraryOut; 222 var libraryIn = libraryOut;
213 223
214 var libraryFile = getInputFile(libraryIn, canBeMissing: true); 224 var libraryFile = getInputFile(libraryIn, canBeMissing: true);
215 if (libraryFile != null) { 225 if (libraryFile != null) {
226 locations[Uri.parse(library.shortName).path] =
227 path.relative(libraryOut, from: sdkLibIn);
216 var outPaths = <String>[libraryOut]; 228 var outPaths = <String>[libraryOut];
217 var libraryContents = libraryFile.readAsStringSync(); 229 var libraryContents = libraryFile.readAsStringSync();
218 230
219 int inputModifyTime = libraryFile.lastModifiedSync().millisecondsSinceEpoch; 231 int inputModifyTime = libraryFile.lastModifiedSync().millisecondsSinceEpoch;
220 var partFiles = <File>[]; 232 var partFiles = <File>[];
221 for (var part in parseDirectives(libraryContents).directives) { 233 for (var part in parseDirectives(libraryContents).directives) {
222 if (part is PartDirective) { 234 if (part is PartDirective) {
223 var partPath = part.uri.stringValue; 235 var partPath = part.uri.stringValue;
224 outPaths.add(path.join(path.dirname(libraryOut), partPath)); 236 outPaths.add(path.join(path.dirname(libraryOut), partPath));
225 237
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 if (diff != 0) return diff; 622 if (diff != 0) return diff;
611 return end - other.end; 623 return end - other.end;
612 } 624 }
613 } 625 }
614 626
615 List<SdkLibrary> _getSdkLibraries(String contents) { 627 List<SdkLibrary> _getSdkLibraries(String contents) {
616 var libraryBuilder = new SdkLibrariesReader_LibraryBuilder(true); 628 var libraryBuilder = new SdkLibrariesReader_LibraryBuilder(true);
617 parseCompilationUnit(contents).accept(libraryBuilder); 629 parseCompilationUnit(contents).accept(libraryBuilder);
618 return libraryBuilder.librariesMap.sdkLibraries; 630 return libraryBuilder.librariesMap.sdkLibraries;
619 } 631 }
OLDNEW
« no previous file with comments | « runtime/vm/libraries.yaml ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698