1 | //===-- SBPlatform.h --------------------------------------------*- C++ -*-===// |
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. |
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | |
9 | #ifndef LLDB_API_SBPLATFORM_H |
10 | #define LLDB_API_SBPLATFORM_H |
11 | |
12 | #include "lldb/API/SBDefines.h" |
13 | #include "lldb/API/SBProcess.h" |
14 | #include "lldb/API/SBProcessInfoList.h" |
15 | |
16 | #include <functional> |
17 | |
18 | struct PlatformConnectOptions; |
19 | struct PlatformShellCommand; |
20 | class ProcessInstanceInfoMatch; |
21 | |
22 | namespace lldb { |
23 | |
24 | class SBAttachInfo; |
25 | class SBLaunchInfo; |
26 | |
27 | class LLDB_API SBPlatformConnectOptions { |
28 | public: |
29 | SBPlatformConnectOptions(const char *url); |
30 | |
31 | SBPlatformConnectOptions(const SBPlatformConnectOptions &rhs); |
32 | |
33 | ~SBPlatformConnectOptions(); |
34 | |
35 | SBPlatformConnectOptions &operator=(const SBPlatformConnectOptions &rhs); |
36 | |
37 | const char *GetURL(); |
38 | |
39 | void SetURL(const char *url); |
40 | |
41 | bool GetRsyncEnabled(); |
42 | |
43 | void EnableRsync(const char *options, const char *remote_path_prefix, |
44 | bool omit_remote_hostname); |
45 | |
46 | void DisableRsync(); |
47 | |
48 | const char *GetLocalCacheDirectory(); |
49 | |
50 | void SetLocalCacheDirectory(const char *path); |
51 | |
52 | protected: |
53 | PlatformConnectOptions *m_opaque_ptr; |
54 | }; |
55 | |
56 | class LLDB_API SBPlatformShellCommand { |
57 | public: |
58 | SBPlatformShellCommand(const char *shell, const char *shell_command); |
59 | SBPlatformShellCommand(const char *shell_command); |
60 | |
61 | SBPlatformShellCommand(const SBPlatformShellCommand &rhs); |
62 | |
63 | SBPlatformShellCommand &operator=(const SBPlatformShellCommand &rhs); |
64 | |
65 | ~SBPlatformShellCommand(); |
66 | |
67 | void Clear(); |
68 | |
69 | const char *GetShell(); |
70 | |
71 | void SetShell(const char *shell); |
72 | |
73 | const char *GetCommand(); |
74 | |
75 | void SetCommand(const char *shell_command); |
76 | |
77 | const char *GetWorkingDirectory(); |
78 | |
79 | void SetWorkingDirectory(const char *path); |
80 | |
81 | uint32_t GetTimeoutSeconds(); |
82 | |
83 | void SetTimeoutSeconds(uint32_t sec); |
84 | |
85 | int GetSignal(); |
86 | |
87 | int GetStatus(); |
88 | |
89 | const char *GetOutput(); |
90 | |
91 | protected: |
92 | friend class SBPlatform; |
93 | |
94 | PlatformShellCommand *m_opaque_ptr; |
95 | }; |
96 | |
97 | class LLDB_API SBPlatform { |
98 | public: |
99 | SBPlatform(); |
100 | |
101 | SBPlatform(const char *platform_name); |
102 | |
103 | SBPlatform(const SBPlatform &rhs); |
104 | |
105 | SBPlatform &operator=(const SBPlatform &rhs); |
106 | |
107 | ~SBPlatform(); |
108 | |
109 | static SBPlatform GetHostPlatform(); |
110 | |
111 | explicit operator bool() const; |
112 | |
113 | bool IsValid() const; |
114 | |
115 | void Clear(); |
116 | |
117 | const char *GetWorkingDirectory(); |
118 | |
119 | bool SetWorkingDirectory(const char *path); |
120 | |
121 | const char *GetName(); |
122 | |
123 | SBError ConnectRemote(SBPlatformConnectOptions &connect_options); |
124 | |
125 | void DisconnectRemote(); |
126 | |
127 | bool IsConnected(); |
128 | |
129 | // The following functions will work if the platform is connected |
130 | const char *GetTriple(); |
131 | |
132 | const char *GetHostname(); |
133 | |
134 | const char *GetOSBuild(); |
135 | |
136 | const char *GetOSDescription(); |
137 | |
138 | uint32_t GetOSMajorVersion(); |
139 | |
140 | uint32_t GetOSMinorVersion(); |
141 | |
142 | uint32_t GetOSUpdateVersion(); |
143 | |
144 | void SetSDKRoot(const char *sysroot); |
145 | |
146 | SBError Put(SBFileSpec &src, SBFileSpec &dst); |
147 | |
148 | SBError Get(SBFileSpec &src, SBFileSpec &dst); |
149 | |
150 | SBError Install(SBFileSpec &src, SBFileSpec &dst); |
151 | |
152 | SBError Run(SBPlatformShellCommand &shell_command); |
153 | |
154 | SBError Launch(SBLaunchInfo &launch_info); |
155 | |
156 | SBProcess Attach(SBAttachInfo &attach_info, const SBDebugger &debugger, |
157 | SBTarget &target, SBError &error); |
158 | |
159 | SBProcessInfoList GetAllProcesses(SBError &error); |
160 | |
161 | SBError Kill(const lldb::pid_t pid); |
162 | |
163 | SBError |
164 | MakeDirectory(const char *path, |
165 | uint32_t file_permissions = eFilePermissionsDirectoryDefault); |
166 | |
167 | uint32_t GetFilePermissions(const char *path); |
168 | |
169 | SBError SetFilePermissions(const char *path, uint32_t file_permissions); |
170 | |
171 | SBUnixSignals GetUnixSignals() const; |
172 | |
173 | /// Return the environment variables of the remote platform connection |
174 | /// process. |
175 | /// |
176 | /// \return |
177 | /// An lldb::SBEnvironment object which is a copy of the platform's |
178 | /// environment. |
179 | SBEnvironment GetEnvironment(); |
180 | |
181 | /// Set a callback as an implementation for locating module in order to |
182 | /// implement own module cache system. For example, to leverage distributed |
183 | /// build system, to bypass pulling files from remote platform, or to search |
184 | /// symbol files from symbol servers. The target will call this callback to |
185 | /// get a module file and a symbol file, and it will fallback to the LLDB |
186 | /// implementation when this callback failed or returned non-existent file. |
187 | /// This callback can set either module_file_spec or symbol_file_spec, or both |
188 | /// module_file_spec and symbol_file_spec. The callback will be cleared if |
189 | /// nullptr or None is set. |
190 | SBError SetLocateModuleCallback(lldb::SBPlatformLocateModuleCallback callback, |
191 | void *callback_baton); |
192 | |
193 | protected: |
194 | friend class SBDebugger; |
195 | friend class SBTarget; |
196 | |
197 | lldb::PlatformSP GetSP() const; |
198 | |
199 | void SetSP(const lldb::PlatformSP &platform_sp); |
200 | |
201 | SBError ExecuteConnected( |
202 | const std::function<lldb_private::Status(const lldb::PlatformSP &)> |
203 | &func); |
204 | |
205 | lldb::PlatformSP m_opaque_sp; |
206 | }; |
207 | |
208 | } // namespace lldb |
209 | |
210 | #endif // LLDB_API_SBPLATFORM_H |
211 | |