 Chromium Code Reviews
 Chromium Code Reviews Issue 2710943006:
  Make patch_sdk step invoke fasta's compile_platform to generate patched_sdk/platform.dill.  (Closed)
    
  
    Issue 2710943006:
  Make patch_sdk step invoke fasta's compile_platform to generate patched_sdk/platform.dill.  (Closed) 
  | OLD | NEW | 
|---|---|
| 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:math' as math; | 10 import 'dart:math' as math; | 
| 11 | 11 | 
| 12 import 'package:analyzer/analyzer.dart'; | 12 import 'package:analyzer/analyzer.dart'; | 
| 13 import 'package:analyzer/src/generated/sdk.dart'; | 13 import 'package:analyzer/src/generated/sdk.dart'; | 
| 14 import 'package:path/path.dart' as path; | 14 import 'package:path/path.dart' as path; | 
| 15 import 'package:front_end/src/fasta/bin/compile_platform.dart' as | |
| 16 compile_platform; | |
| 15 | 17 | 
| 16 void main(List<String> argv) { | 18 void main(List<String> argv) { | 
| 17 var base = path.fromUri(Platform.script); | 19 var base = path.fromUri(Platform.script); | 
| 18 var dartDir = path.dirname(path.dirname(path.absolute(base))); | 20 var dartDir = path.dirname(path.dirname(path.absolute(base))); | 
| 19 | 21 | 
| 20 if (argv.length != 4 || | 22 if (argv.length != 5 || (!argv.isEmpty && argv.first != 'vm')) { | 
| 
kustermann
2017/02/23 15:59:38
We have shortcut operators: Just use
if (argv.len
 | |
| 21 !argv.isEmpty && argv.first != 'vm' && argv.first != 'ddc') { | |
| 22 var self = path.relative(base); | 23 var self = path.relative(base); | 
| 23 print('Usage: $self MODE SDK_DIR PATCH_DIR OUTPUT_DIR'); | 24 print('Usage: $self MODE SDK_DIR PATCH_DIR OUTPUT_DIR PACKAGES'); | 
| 24 print('MODE must be one of ddc or vm.'); | 25 print('MODE must be one of ddc or vm.'); | 
| 
kustermann
2017/02/23 15:59:39
Remove "ddc or".
 | |
| 25 | 26 | 
| 26 var toolDir = path.relative(path.dirname(base)); | 27 var repositoryDir = path.relative(path.dirname(path.dirname(base))); | 
| 27 var sdkExample = path.join(toolDir, 'input_sdk'); | 28 var sdkExample = path.relative(path.join(repositoryDir, 'sdk')); | 
| 28 var patchExample = path.join(sdkExample, 'patch'); | 29 var packagesExample = path.relative(path.join(repositoryDir, '.packages')); | 
| 29 var outExample = | 30 var patchExample = path.relative(path.join(repositoryDir, 'out', 'DebugX64', | 
| 30 path.relative(path.normalize(path.join('gen', 'patched_sdk'))); | 31 'obj', 'gen', 'patch')); | 
| 32 var outExample = path.relative(path.join(repositoryDir, 'out', 'DebugX64', | |
| 33 'obj', 'gen', 'patched_sdk')); | |
| 
kustermann
2017/02/23 15:59:39
final?
 | |
| 31 print('For example:'); | 34 print('For example:'); | 
| 32 print('\$ $self ddc $sdkExample $patchExample $outExample'); | |
| 33 | |
| 34 var repositoryDir = path.relative(path.dirname(path.dirname(base))); | |
| 35 sdkExample = path.relative(path.join(repositoryDir, 'sdk')); | |
| 36 patchExample = path.relative(path.join(repositoryDir, 'out', 'DebugX64', | |
| 37 'obj', 'gen', 'patch')); | |
| 38 outExample = path.relative(path.join(repositoryDir, 'out', 'DebugX64', | |
| 39 'obj', 'gen', 'patched_sdk')); | |
| 40 print('or:'); | |
| 41 print('\$ $self vm $sdkExample $patchExample $outExample'); | 35 print('\$ $self vm $sdkExample $patchExample $outExample'); | 
| 42 | 36 | 
| 43 exit(1); | 37 exit(1); | 
| 44 } | 38 } | 
| 45 | 39 | 
| 46 var mode = argv[0]; | 40 var mode = argv[0]; | 
| 47 var input = argv[1]; | 41 var input = argv[1]; | 
| 48 var sdkLibIn = path.join(input, 'lib'); | 42 var sdkLibIn = path.join(input, 'lib'); | 
| 49 var patchIn = argv[2]; | 43 var patchIn = argv[2]; | 
| 50 var sdkOut = path.join(argv[3], 'lib'); | 44 var sdkOut = path.join(argv[3], 'lib'); | 
| 45 var packagesFile = argv[4]; | |
| 
kustermann
2017/02/23 15:59:38
final?
 | |
| 51 | 46 | 
| 52 var privateIn = path.join(input, 'private'); | 47 var privateIn = path.join(input, 'private'); | 
| 53 var INTERNAL_PATH = '_internal/compiler/js_lib/'; | 48 var INTERNAL_PATH = '_internal/compiler/js_lib/'; | 
| 54 | 49 | 
| 55 // Copy and patch libraries.dart and version | 50 // Copy and patch libraries.dart and version | 
| 56 var libContents = new File(path.join(sdkLibIn, '_internal', | 51 var libContents = new File(path.join(sdkLibIn, '_internal', | 
| 57 'sdk_library_metadata', 'lib', 'libraries.dart')).readAsStringSync(); | 52 'sdk_library_metadata', 'lib', 'libraries.dart')).readAsStringSync(); | 
| 58 var patchedLibContents = libContents; | 53 var patchedLibContents = libContents; | 
| 59 if (mode == 'vm') { | 54 if (mode == 'vm') { | 
| 60 libContents = libContents.replaceAll( | 55 libContents = libContents.replaceAll( | 
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 173 contents = _patchLibrary( | 168 contents = _patchLibrary( | 
| 174 patchFile.path, contents, patchContents); | 169 patchFile.path, contents, patchContents); | 
| 175 } | 170 } | 
| 176 | 171 | 
| 177 for (var i = 0; i < outPaths.length; i++) { | 172 for (var i = 0; i < outPaths.length; i++) { | 
| 178 _writeSync(outPaths[i], contents[i]); | 173 _writeSync(outPaths[i], contents[i]); | 
| 179 } | 174 } | 
| 180 } | 175 } | 
| 181 } | 176 } | 
| 182 } | 177 } | 
| 178 | |
| 183 if (mode == 'vm') { | 179 if (mode == 'vm') { | 
| 184 | |
| 185 for (var tuple in [['_builtin', 'builtin.dart']]) { | 180 for (var tuple in [['_builtin', 'builtin.dart']]) { | 
| 186 var vmLibrary = tuple[0]; | 181 var vmLibrary = tuple[0]; | 
| 187 var dartFile = tuple[1]; | 182 var dartFile = tuple[1]; | 
| 188 | 183 | 
| 189 // The "dart:_builtin" library is only available for the DartVM. | 184 // The "dart:_builtin" library is only available for the DartVM. | 
| 190 var builtinLibraryIn = path.join(dartDir, 'runtime', 'bin', dartFile); | 185 var builtinLibraryIn = path.join(dartDir, 'runtime', 'bin', dartFile); | 
| 191 var builtinLibraryOut = path.join(sdkOut, vmLibrary, '${vmLibrary}.dart'); | 186 var builtinLibraryOut = path.join(sdkOut, vmLibrary, '${vmLibrary}.dart'); | 
| 192 _writeSync(builtinLibraryOut, new File(builtinLibraryIn).readAsStringSync( )); | 187 _writeSync(builtinLibraryOut, new File(builtinLibraryIn).readAsStringSync( )); | 
| 193 } | 188 } | 
| 194 | 189 | 
| 195 for (var file in ['loader.dart', 'server.dart', 'vmservice_io.dart']) { | 190 for (var file in ['loader.dart', 'server.dart', 'vmservice_io.dart']) { | 
| 196 var libraryIn = path.join(dartDir, 'runtime', 'bin', 'vmservice', file); | 191 var libraryIn = path.join(dartDir, 'runtime', 'bin', 'vmservice', file); | 
| 197 var libraryOut = path.join(sdkOut, 'vmservice_io', file); | 192 var libraryOut = path.join(sdkOut, 'vmservice_io', file); | 
| 198 _writeSync(libraryOut, new File(libraryIn).readAsStringSync()); | 193 _writeSync(libraryOut, new File(libraryIn).readAsStringSync()); | 
| 199 } | 194 } | 
| 200 } | 195 } | 
| 196 | |
| 197 compile_platform.main(<String>[ | |
| 
kustermann
2017/02/23 15:59:39
await compile_platform.main();
 | |
| 198 '--packages', packagesFile, sdkOut, path.join(sdkOut, 'platform.dill') | |
| 199 ]); | |
| 201 } | 200 } | 
| 202 | 201 | 
| 203 /// Writes a file, creating the directory if needed. | 202 /// Writes a file, creating the directory if needed. | 
| 204 void _writeSync(String filePath, String contents) { | 203 void _writeSync(String filePath, String contents) { | 
| 205 var outDir = new Directory(path.dirname(filePath)); | 204 var outDir = new Directory(path.dirname(filePath)); | 
| 206 if (!outDir.existsSync()) outDir.createSync(recursive: true); | 205 if (!outDir.existsSync()) outDir.createSync(recursive: true); | 
| 207 | 206 | 
| 208 new File(filePath).writeAsStringSync(contents); | 207 new File(filePath).writeAsStringSync(contents); | 
| 209 } | 208 } | 
| 210 | 209 | 
| (...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 534 if (diff != 0) return diff; | 533 if (diff != 0) return diff; | 
| 535 return end - other.end; | 534 return end - other.end; | 
| 536 } | 535 } | 
| 537 } | 536 } | 
| 538 | 537 | 
| 539 List<SdkLibrary> _getSdkLibraries(String contents) { | 538 List<SdkLibrary> _getSdkLibraries(String contents) { | 
| 540 var libraryBuilder = new SdkLibrariesReader_LibraryBuilder(true); | 539 var libraryBuilder = new SdkLibrariesReader_LibraryBuilder(true); | 
| 541 parseCompilationUnit(contents).accept(libraryBuilder); | 540 parseCompilationUnit(contents).accept(libraryBuilder); | 
| 542 return libraryBuilder.librariesMap.sdkLibraries; | 541 return libraryBuilder.librariesMap.sdkLibraries; | 
| 543 } | 542 } | 
| OLD | NEW |