#!/usr/bin/env dart // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. import 'dart:async'; import 'dart:convert' show json; import 'dart:io'; import 'package:args/args.dart' show ArgParser; import 'package:dev_compiler/src/compiler/module_builder.dart'; import 'package:dev_compiler/src/kernel/target.dart'; import 'package:dev_compiler/src/kernel/command.dart'; import 'package:dev_compiler/src/kernel/compiler.dart'; import 'package:front_end/src/api_prototype/compiler_options.dart'; import 'package:front_end/src/api_prototype/kernel_generator.dart'; import 'package:kernel/kernel.dart'; import 'package:path/path.dart' as path; Future main(List args) async { // Parse flags. var parser = new ArgParser(); var parserOptions = parser.parse(args); var rest = parserOptions.rest; Directory.current = path.dirname(path.dirname(path.fromUri(Platform.script))); var outputPath = path.absolute(rest.length > 0 ? rest[0] : 'gen/sdk/kernel/ddc_sdk.dill'); var inputPath = path.absolute('tool/input_sdk'); var target = new DevCompilerTarget(); var options = new CompilerOptions() ..compileSdk = true ..packagesFileUri = path.toUri(path.absolute('../../.packages')) ..sdkRoot = path.toUri(inputPath) ..target = target; var inputs = target.extraRequiredLibraries.map(Uri.parse).toList(); var component = await kernelForComponent(inputs, options); var outputDir = path.dirname(outputPath); await new Directory(outputDir).create(recursive: true); await writeComponentToBinary(component, outputPath); var jsModule = new ProgramCompiler(component, declaredVariables: {}) .emitModule(component, [], []); var moduleFormats = { 'amd': ModuleFormat.amd, 'common': ModuleFormat.common, 'es6': ModuleFormat.es6, 'legacy': ModuleFormat.legacy, }; for (var name in moduleFormats.keys) { var format = moduleFormats[name]; var jsDir = path.join(outputDir, name); var jsPath = path.join(jsDir, 'dart_sdk.js'); await new Directory(jsDir).create(); var jsCode = jsProgramToCode(jsModule, format); await new File(jsPath).writeAsString(jsCode.code); await new File('$jsPath.map').writeAsString(json.encode(jsCode.sourceMap)); } }