Index: tools/patch_sdk.dart |
diff --git a/tools/patch_sdk.dart b/tools/patch_sdk.dart |
index 8e86120e9c5a7e37327dc2c5850a840f4c7adccf..97e2e12c8c95400bf74a578d9094bbbba212099f 100644 |
--- a/tools/patch_sdk.dart |
+++ b/tools/patch_sdk.dart |
@@ -108,7 +108,7 @@ Future _main(List<String> argv) async { |
libContents = _updateLibraryMetadata(sdkOut, libContents); |
var sdkLibraries = _getSdkLibraries(libContents); |
- Map<String, String> locations = <String, String>{}; |
+ var locations = <String, Map<String, String>>{}; |
// Enumerate core libraries and apply patches |
for (SdkLibrary library in sdkLibraries) { |
@@ -125,7 +125,10 @@ Future _main(List<String> argv) async { |
Uri packages = Uri.base.resolveUri(new Uri.file(packagesFile)); |
await _writeSync( |
- librariesJson.toFilePath(), JSON.encode({"libraries": locations})); |
+ librariesJson.toFilePath(), |
+ JSON.encode({ |
+ mode: {"libraries": locations} |
+ })); |
var flags = new TargetFlags(); |
var target = forVm |
@@ -141,6 +144,22 @@ Future _main(List<String> argv) async { |
var base = path.fromUri(Platform.script); |
Uri dartDir = |
new Uri.directory(path.dirname(path.dirname(path.absolute(base)))); |
+ |
+ String vmserviceJson = JSON.encode({ |
+ 'vm': { |
+ "libraries": { |
+ '_vmservice': { |
+ 'uri': '${dartDir.resolve('sdk/lib/vmservice/vmservice.dart')}' |
+ }, |
+ 'vmservice_io': { |
+ 'uri': |
+ '${dartDir.resolve('runtime/bin/vmservice/vmservice_io.dart')}' |
+ }, |
+ } |
+ } |
+ }); |
+ Uri vmserviceJsonUri = outDirUri.resolve("lib/vmservice_libraries.json"); |
+ await _writeSync(vmserviceJsonUri.toFilePath(), vmserviceJson); |
var program = await kernelForProgram( |
Uri.parse('dart:$vmserviceName'), |
new CompilerOptions() |
@@ -148,11 +167,7 @@ Future _main(List<String> argv) async { |
// TODO(sigmund): investigate. This should be outline, but it breaks |
// vm-debug tests. Issue #30111 |
..sdkSummary = platform |
- ..dartLibraries = <String, Uri>{ |
- '_vmservice': dartDir.resolve('sdk/lib/vmservice/vmservice.dart'), |
- 'vmservice_io': |
- dartDir.resolve('runtime/bin/vmservice/vmservice_io.dart'), |
- } |
+ ..librariesSpecificationUri = vmserviceJsonUri |
..packagesFileUri = packages); |
Uri vmserviceUri = outDirUri.resolve('$vmserviceName.dill'); |
// TODO(sigmund): remove. This is a workaround because in the VM |
@@ -333,7 +348,7 @@ String _updateLibraryMetadata(String sdkOut, String libContents) { |
/// Copy internal libraries that are developed outside the sdk folder into the |
/// patched_sdk folder. For the VM< this includes files under 'runtime/bin/', |
/// for flutter, this is includes also the ui library. |
-_copyExtraLibraries(String sdkOut, Map<String, String> locations) { |
+_copyExtraLibraries(String sdkOut, Map<String, Map<String, String>> locations) { |
if (forDart2js) return; |
var base = path.fromUri(Platform.script); |
var dartDir = path.dirname(path.dirname(path.absolute(base))); |
@@ -341,7 +356,7 @@ _copyExtraLibraries(String sdkOut, Map<String, String> locations) { |
var builtinLibraryIn = path.join(dartDir, 'runtime', 'bin', 'builtin.dart'); |
var builtinLibraryOut = path.join(sdkOut, '_builtin', '_builtin.dart'); |
_writeSync(builtinLibraryOut, readInputFile(builtinLibraryIn)); |
- locations['_builtin'] = path.join('_builtin', '_builtin.dart'); |
+ addLocation(locations, '_builtin', path.join('_builtin', '_builtin.dart')); |
if (forFlutter) { |
// Flutter repo has this layout: |
@@ -356,7 +371,7 @@ _copyExtraLibraries(String sdkOut, Map<String, String> locations) { |
var uiLibraryOut = path.join(sdkOut, 'ui', name); |
_writeSync(uiLibraryOut, readInputFile(file.path)); |
} |
- locations['ui'] = 'ui/ui.dart'; |
+ addLocation(locations, 'ui', path.join('ui', 'ui.dart')); |
if (!forFlutterRelease) { |
// vmservice should be present unless we build release flavor of Flutter. |
@@ -368,22 +383,23 @@ _copyExtraLibraries(String sdkOut, Map<String, String> locations) { |
var libraryOut = path.join(sdkOut, 'vmservice_io', file); |
_writeSync(libraryOut, readInputFile(libraryIn)); |
} |
- locations['vmservice_sky'] = |
- path.join('vmservice_io', 'vmservice_io.dart'); |
- locations['_vmservice'] = path.join('vmservice', 'vmservice.dart'); |
+ addLocation(locations, 'vmservice_sky', |
+ path.join('vmservice_io', 'vmservice_io.dart')); |
+ addLocation( |
+ locations, '_vmservice', path.join('vmservice', 'vmservice.dart')); |
} |
} |
} |
_applyPatch(SdkLibrary library, String sdkLibIn, String patchIn, String sdkOut, |
- Map<String, String> locations) { |
+ Map<String, Map<String, String>> locations) { |
var libraryOut = path.join(sdkLibIn, library.path); |
var libraryIn = libraryOut; |
var libraryFile = getInputFile(libraryIn, canBeMissing: true); |
if (libraryFile != null) { |
- locations[Uri.parse(library.shortName).path] = |
- path.relative(libraryOut, from: sdkLibIn); |
+ addLocation(locations, Uri.parse(library.shortName).path, |
+ path.relative(libraryOut, from: sdkLibIn)); |
var outPaths = <String>[libraryOut]; |
var libraryContents = libraryFile.readAsStringSync(); |
@@ -806,3 +822,9 @@ List<SdkLibrary> _getSdkLibraries(String contents) { |
parseCompilationUnit(contents).accept(libraryBuilder); |
return libraryBuilder.librariesMap.sdkLibraries; |
} |
+ |
+void addLocation(Map<String, Map<String, String>> locations, String libraryName, |
+ String libraryPath) { |
+ assert(locations[libraryName] == null); |
+ locations[libraryName] = {'uri': '${path.toUri(libraryPath)}'}; |
+} |