Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

135 lines
3.6 KiB
C++

//===-- RunInTerminal.h ----------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef LLDB_TOOLS_LLDB_DAP_RUNINTERMINAL_H
#define LLDB_TOOLS_LLDB_DAP_RUNINTERMINAL_H
#include "FifoFiles.h"
#include "lldb/API/SBError.h"
#include <future>
#include <memory>
#include <string>
namespace lldb_dap {
enum RunInTerminalMessageKind {
eRunInTerminalMessageKindPID = 0,
eRunInTerminalMessageKindError,
eRunInTerminalMessageKindDidAttach,
};
struct RunInTerminalMessage;
struct RunInTerminalMessagePid;
struct RunInTerminalMessageError;
struct RunInTerminalMessageDidAttach;
struct RunInTerminalMessage {
RunInTerminalMessage(RunInTerminalMessageKind kind);
virtual ~RunInTerminalMessage() = default;
/// Serialize this object to JSON
virtual llvm::json::Value ToJSON() const = 0;
const RunInTerminalMessagePid *GetAsPidMessage() const;
const RunInTerminalMessageError *GetAsErrorMessage() const;
RunInTerminalMessageKind kind;
};
using RunInTerminalMessageUP = std::unique_ptr<RunInTerminalMessage>;
struct RunInTerminalMessagePid : RunInTerminalMessage {
RunInTerminalMessagePid(lldb::pid_t pid);
llvm::json::Value ToJSON() const override;
lldb::pid_t pid;
};
struct RunInTerminalMessageError : RunInTerminalMessage {
RunInTerminalMessageError(llvm::StringRef error);
llvm::json::Value ToJSON() const override;
std::string error;
};
struct RunInTerminalMessageDidAttach : RunInTerminalMessage {
RunInTerminalMessageDidAttach();
llvm::json::Value ToJSON() const override;
};
class RunInTerminalLauncherCommChannel {
public:
RunInTerminalLauncherCommChannel(llvm::StringRef comm_file);
/// Wait until the debug adapter attaches.
///
/// \param[in] timeout
/// How long to wait to be attached.
//
/// \return
/// An \a llvm::Error object in case of errors or if this operation times
/// out.
llvm::Error WaitUntilDebugAdapterAttaches(std::chrono::milliseconds timeout);
/// Notify the debug adapter this process' pid.
///
/// \return
/// An \a llvm::Error object in case of errors or if this operation times
/// out.
llvm::Error NotifyPid();
llvm::Error NotifyPid(lldb::pid_t pid);
/// Notify the debug adapter that there's been an error.
void NotifyError(llvm::StringRef error);
private:
FifoFileIO m_io;
};
class RunInTerminalDebugAdapterCommChannel {
public:
RunInTerminalDebugAdapterCommChannel(llvm::StringRef comm_file);
RunInTerminalDebugAdapterCommChannel(std::shared_ptr<FifoFile> comm_file);
/// Notify the runInTerminal launcher that it was attached.
///
/// \return
/// A future indicated whether the runInTerminal launcher received the
/// message correctly or not.
std::future<lldb::SBError> NotifyDidAttach();
/// Fetch the pid of the runInTerminal launcher.
///
/// \return
/// An \a llvm::Error object in case of errors or if this operation times
/// out.
llvm::Expected<lldb::pid_t> GetLauncherPid();
/// Fetch any errors emitted by the runInTerminal launcher or return a
/// default error message if a certain timeout if reached.
std::string GetLauncherError();
private:
FifoFileIO m_io;
};
/// Create a fifo file used to communicate the debug adapter with
/// the runInTerminal launcher.
llvm::Expected<std::shared_ptr<FifoFile>> CreateRunInTerminalCommFile();
} // namespace lldb_dap
#endif // LLDB_TOOLS_LLDB_DAP_RUNINTERMINAL_H