diff --git a/pkg/dartdev/lib/src/commands/compile.dart b/pkg/dartdev/lib/src/commands/compile.dart index 23ad8d60195..c8cc3f2345a 100644 --- a/pkg/dartdev/lib/src/commands/compile.dart +++ b/pkg/dartdev/lib/src/commands/compile.dart @@ -4,6 +4,7 @@ import 'dart:async'; import 'dart:io'; +import 'dart:isolate'; import 'package:args/args.dart'; import 'package:dart2native/generate.dart'; @@ -87,41 +88,48 @@ class CompileJSCommand extends CompileSubcommandCommand { @override FutureOr run() async { - if (!Sdk.checkArtifactExists(sdk.librariesJson)) { - return genericErrorExitCode; + if (!Sdk.checkArtifactExists(sdk.dart2jsSnapshot) || + !Sdk.checkArtifactExists(sdk.librariesJson)) { + return 255; } + final args = argResults!; - var snapshot = sdk.dart2jsAotSnapshot; - var runtime = sdk.dartAotRuntime; - if (!Sdk.checkArtifactExists(snapshot, logError: false)) { - // AOT snapshots cannot be generated on IA32, so we need this fallback - // branch until support for IA32 is dropped (https://dartbug.com/49969). - snapshot = sdk.dart2jsSnapshot; - runtime = sdk.dart; - if (!Sdk.checkArtifactExists(snapshot)) { - return genericErrorExitCode; - } - } - final dart2jsCommand = [ - runtime, - snapshot, + + // Build arguments. + final buildArgs = [ '--libraries-spec=${sdk.librariesJson}', '--cfe-invocation-modes=compile', '--invoker=dart_cli', // Add the remaining arguments. if (args.rest.isNotEmpty) ...args.rest.sublist(0), ]; + + var retval = 0; + final result = Completer(); + final exitPort = ReceivePort() + ..listen((msg) { + result.complete(0); + }); + final errorPort = ReceivePort() + ..listen((error) { + log.stderr(error.toString()); + result.complete(255); + }); try { - final exitCode = await runProcessInheritStdio(dart2jsCommand); - return exitCode; + await Isolate.spawnUri(Uri.file(sdk.dart2jsSnapshot), buildArgs, null, + onExit: exitPort.sendPort, onError: errorPort.sendPort); + retval = await result.future; } catch (e, st) { log.stderr('Error: JS compilation failed'); log.stderr(e.toString()); if (verbose) { log.stderr(st.toString()); } - return compileErrorExitCode; + retval = compileErrorExitCode; } + errorPort.close(); + exitPort.close(); + return retval; } } diff --git a/pkg/dartdev/lib/src/core.dart b/pkg/dartdev/lib/src/core.dart index 8e89b55745f..c6a8c79b13a 100644 --- a/pkg/dartdev/lib/src/core.dart +++ b/pkg/dartdev/lib/src/core.dart @@ -119,11 +119,8 @@ Future runProcess( } log.trace(command.join(' ')); - final process = await Process.start( - command.first, - command.skip(1).toList(), - workingDirectory: cwd, - ); + final process = await Process.start(command.first, command.skip(1).toList(), + workingDirectory: cwd); final (_, _, exitCode) = await ( forward(process.stdout, false), forward(process.stderr, true), @@ -132,22 +129,6 @@ Future runProcess( return exitCode; } -Future runProcessInheritStdio( - List command, { - bool logToTrace = false, - void Function(String str)? listener, - String? cwd, -}) async { - log.trace(command.join(' ')); - final process = await Process.start( - command.first, - command.skip(1).toList(), - workingDirectory: cwd, - mode: ProcessStartMode.inheritStdio, - ); - return await process.exitCode; -} - Future _streamLineTransform( Stream> stream, Function(String line) handler, diff --git a/pkg/dartdev/lib/src/sdk.dart b/pkg/dartdev/lib/src/sdk.dart index 5ef7626abce..168294bdf91 100644 --- a/pkg/dartdev/lib/src/sdk.dart +++ b/pkg/dartdev/lib/src/sdk.dart @@ -71,10 +71,6 @@ class Sdk { 'dart2js.dart.snapshot', ); - String get dart2jsAotSnapshot => _snapshotPathFor( - 'dart2js_aot.dart.snapshot', - ); - String get dart2wasmSnapshot => _snapshotPathFor( 'dart2wasm_product.snapshot', ); diff --git a/pkg/dartdev/test/sdk_test.dart b/pkg/dartdev/test/sdk_test.dart index 9ef7801da80..de399660df7 100644 --- a/pkg/dartdev/test/sdk_test.dart +++ b/pkg/dartdev/test/sdk_test.dart @@ -30,7 +30,7 @@ void _sdk() { }); test('dart2js snapshot', () { - expectSnapshotExists(Sdk().dart2jsAotSnapshot, Sdk().dart2jsSnapshot); + expectFileExists(Sdk().dart2jsSnapshot); }); } diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn index 93cf0222172..e03cf3e537b 100644 --- a/sdk/BUILD.gn +++ b/sdk/BUILD.gn @@ -43,8 +43,7 @@ declare_args() { # ......snapshots/ # ........analysis_server.dart.snapshot # ........dart2bytecode.snapshot (if dart_dynamic_modules) -# ........dart2js_aot.dart.snapshot (AOT snapshot, if not on ia32) -# ........dart2js.dart.snapshot (JIT snapshot only on ia32) +# ........dart2js.dart.snapshot # ........dart2wasm_product.snapshot (if not on ia32) # ........dartdev.dart.snapshot (app-jit snapshot or kernel dill file) # ........dartdevc.dart.snapshot @@ -153,6 +152,10 @@ if (dart_dynamic_modules) { } _full_sdk_snapshots = _platform_sdk_snapshots + [ + [ + "dart2js", + "../utils/compiler:dart2js", + ], [ "dartdevc", "../utils/ddc:dartdevc", @@ -162,17 +165,6 @@ _full_sdk_snapshots = _platform_sdk_snapshots + [ "../utils/bazel:kernel_worker", ], ] -if (dart_target_arch != "ia32" && dart_target_arch != "x86") { - _full_sdk_snapshots += [ [ - "dart2js_aot", - "../utils/compiler:dart2js_sdk_aot", - ] ] -} else { - _full_sdk_snapshots += [ [ - "dart2js", - "../utils/compiler:dart2js", - ] ] -} # Libraries that go under lib/ _full_sdk_libraries = [ diff --git a/utils/compiler/BUILD.gn b/utils/compiler/BUILD.gn index f76196af31d..7a3093b5acf 100644 --- a/utils/compiler/BUILD.gn +++ b/utils/compiler/BUILD.gn @@ -87,22 +87,6 @@ aot_snapshot("dart2js_aot") { name = "dart2js_aot" } -aot_snapshot("dart2js_sdk_aot") { - deps = [ ":dart2js_create_snapshot_entry" ] - - main_dart = "$target_gen_dir/dart2js.dart" - name = "dart2js_aot.dart" - output = "$root_gen_dir/dart2js_aot.dart.snapshot" - - # dartaotruntime has dart_product_config applied to it, - # so it is built in # product mode in both release and - # product builds, and is only built in debug mode in debug - # builds. The following line ensures that the dartaotruntime - # and dartdevc_aot snapshot in an SDK build are - # always compatible with each other. - force_product_mode = !dart_debug -} - compile_platform("compile_dart2js_platform_unsound") { single_root_scheme = "org-dartlang-sdk" single_root_base = rebase_path("$sdk_root/")