blob: 98291f18247dc707f397f66c44b6707ba8e76e95 [file] [log] [blame]
//===-- SBPlatform.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_API_SBPLATFORM_H
#define LLDB_API_SBPLATFORM_H
#include "lldb/API/SBDefines.h"
#include <functional>
struct PlatformConnectOptions;
struct PlatformShellCommand;
namespace lldb {
class SBLaunchInfo;
class LLDB_API SBPlatformConnectOptions {
public:
SBPlatformConnectOptions(const char *url);
SBPlatformConnectOptions(const SBPlatformConnectOptions &rhs);
~SBPlatformConnectOptions();
SBPlatformConnectOptions &operator=(const SBPlatformConnectOptions &rhs);
const char *GetURL();
void SetURL(const char *url);
bool GetRsyncEnabled();
void EnableRsync(const char *options, const char *remote_path_prefix,
bool omit_remote_hostname);
void DisableRsync();
const char *GetLocalCacheDirectory();
void SetLocalCacheDirectory(const char *path);
protected:
PlatformConnectOptions *m_opaque_ptr;
};
class LLDB_API SBPlatformShellCommand {
public:
SBPlatformShellCommand(const char *shell, const char *shell_command);
SBPlatformShellCommand(const char *shell_command);
SBPlatformShellCommand(const SBPlatformShellCommand &rhs);
SBPlatformShellCommand &operator=(const SBPlatformShellCommand &rhs);
~SBPlatformShellCommand();
void Clear();
const char *GetShell();
void SetShell(const char *shell);
const char *GetCommand();
void SetCommand(const char *shell_command);
const char *GetWorkingDirectory();
void SetWorkingDirectory(const char *path);
uint32_t GetTimeoutSeconds();
void SetTimeoutSeconds(uint32_t sec);
int GetSignal();
int GetStatus();
const char *GetOutput();
protected:
friend class SBPlatform;
PlatformShellCommand *m_opaque_ptr;
};
class LLDB_API SBPlatform {
public:
SBPlatform();
SBPlatform(const char *platform_name);
SBPlatform(const SBPlatform &rhs);
SBPlatform &operator=(const SBPlatform &rhs);
~SBPlatform();
static SBPlatform GetHostPlatform();
explicit operator bool() const;
bool IsValid() const;
void Clear();
const char *GetWorkingDirectory();
bool SetWorkingDirectory(const char *path);
const char *GetName();
SBError ConnectRemote(SBPlatformConnectOptions &connect_options);
void DisconnectRemote();
bool IsConnected();
// The following functions will work if the platform is connected
const char *GetTriple();
const char *GetHostname();
const char *GetOSBuild();
const char *GetOSDescription();
uint32_t GetOSMajorVersion();
uint32_t GetOSMinorVersion();
uint32_t GetOSUpdateVersion();
SBError Put(SBFileSpec &src, SBFileSpec &dst);
SBError Get(SBFileSpec &src, SBFileSpec &dst);
SBError Install(SBFileSpec &src, SBFileSpec &dst);
SBError Run(SBPlatformShellCommand &shell_command);
SBError Launch(SBLaunchInfo &launch_info);
SBError Kill(const lldb::pid_t pid);
SBError
MakeDirectory(const char *path,
uint32_t file_permissions = eFilePermissionsDirectoryDefault);
uint32_t GetFilePermissions(const char *path);
SBError SetFilePermissions(const char *path, uint32_t file_permissions);
SBUnixSignals GetUnixSignals() const;
/// Return the environment variables of the remote platform connection
/// process.
///
/// \return
/// An lldb::SBEnvironment object which is a copy of the platform's
/// environment.
SBEnvironment GetEnvironment();
protected:
friend class SBDebugger;
friend class SBTarget;
lldb::PlatformSP GetSP() const;
void SetSP(const lldb::PlatformSP &platform_sp);
SBError ExecuteConnected(
const std::function<lldb_private::Status(const lldb::PlatformSP &)>
&func);
lldb::PlatformSP m_opaque_sp;
};
} // namespace lldb
#endif // LLDB_API_SBPLATFORM_H