blob: ea367d64802644e1f1068c77d4d33a00408e1a4e [file] [log] [blame]
// Copyright (c) 2024, 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 'package:dtd_impl/dtd.dart' as dtd show DartToolingDaemonOptions;
import '../core.dart';
import '../sdk.dart';
import '../vm_interop_handler.dart';
class ToolingDaemonCommand extends DartdevCommand {
static const String commandName = 'tooling-daemon';
static const String commandDescription = "Start Dart's tooling daemon.";
ToolingDaemonCommand({bool verbose = false})
: super(
commandName,
commandDescription,
verbose,
hidden: !verbose,
) {
dtd.DartToolingDaemonOptions.populateArgOptions(
argParser,
verbose: verbose,
);
}
@override
Future<int> run() async {
var script = sdk.dartAotRuntime;
var snapshot = sdk.dtdAotSnapshot;
var useExecProcess = true;
final args = argResults!.arguments;
if (!Sdk.checkArtifactExists(sdk.dtdAotSnapshot, logError: false)) {
// On ia32 platforms we do not have an AOT snapshot and so we need
// to run the JIT snapshot.
useExecProcess = false;
script = sdk.dtdSnapshot;
}
final dtdCommand = [
if (useExecProcess) snapshot,
// Add the remaining args.
if (args.isNotEmpty) ...args,
];
try {
VmInteropHandler.run(
script,
dtdCommand,
packageConfigOverride: null,
useExecProcess : useExecProcess,
);
return 0;
} catch (e, st) {
log.stderr('Error: launching tooling daemon failed');
log.stderr(e.toString());
if (verbose) {
log.stderr(st.toString());
}
return 255;
}
}
}