File: PlatformAppleSimulator.h

package info (click to toggle)
llvm-toolchain-17 1%3A17.0.6-22
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,799,624 kB
  • sloc: cpp: 6,428,607; ansic: 1,383,196; asm: 793,408; python: 223,504; objc: 75,364; f90: 60,502; lisp: 33,869; pascal: 15,282; sh: 9,684; perl: 7,453; ml: 4,937; awk: 3,523; makefile: 2,889; javascript: 2,149; xml: 888; fortran: 619; cs: 573
file content (149 lines) | stat: -rw-r--r-- 5,138 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
//===-- PlatformAppleSimulator.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_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMAPPLESIMULATOR_H
#define LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMAPPLESIMULATOR_H

#include "Plugins/Platform/MacOSX/PlatformDarwin.h"
#include "Plugins/Platform/MacOSX/objcxx/PlatformiOSSimulatorCoreSimulatorSupport.h"
#include "lldb/Utility/ConstString.h"
#include "lldb/Utility/FileSpec.h"
#include "lldb/Utility/ProcessInfo.h"
#include "lldb/Utility/Status.h"
#include "lldb/Utility/XcodeSDK.h"
#include "lldb/lldb-forward.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/TargetParser/Triple.h"

#include <mutex>
#include <optional>
#include <vector>

namespace lldb_private {
class ArchSpec;
class Args;
class Debugger;
class FileSpecList;
class ModuleSpec;
class Process;
class ProcessLaunchInfo;
class Stream;
class Target;
class UUID;

class PlatformAppleSimulator : public PlatformDarwin {
public:
  // Class Functions
  static void Initialize();

  static void Terminate();

  // Class Methods
  PlatformAppleSimulator(
      const char *class_name, const char *description, ConstString plugin_name,
      llvm::Triple::OSType preferred_os,
      llvm::SmallVector<llvm::StringRef, 4> supported_triples,
      std::string sdk_name_primary, std::string sdk_name_secondary,
      XcodeSDK::Type sdk_type,
      CoreSimulatorSupport::DeviceType::ProductFamilyID kind);

  static lldb::PlatformSP
  CreateInstance(const char *class_name, const char *description,
                 ConstString plugin_name,
                 llvm::SmallVector<llvm::Triple::ArchType, 4> supported_arch,
                 llvm::Triple::OSType preferred_os,
                 llvm::SmallVector<llvm::Triple::OSType, 4> supported_os,
                 llvm::SmallVector<llvm::StringRef, 4> supported_triples,
                 std::string sdk_name_primary, std::string sdk_name_secondary,
                 XcodeSDK::Type sdk_type,
                 CoreSimulatorSupport::DeviceType::ProductFamilyID kind,
                 bool force, const ArchSpec *arch);

  ~PlatformAppleSimulator() override;

  llvm::StringRef GetPluginName() override {
    return m_plugin_name.GetStringRef();
  }
  llvm::StringRef GetDescription() override { return m_description; }

  Status LaunchProcess(ProcessLaunchInfo &launch_info) override;

  void GetStatus(Stream &strm) override;

  Status ConnectRemote(Args &args) override;

  Status DisconnectRemote() override;

  lldb::ProcessSP DebugProcess(ProcessLaunchInfo &launch_info,
                               Debugger &debugger, Target &target,
                               Status &error) override;

  std::vector<ArchSpec>
  GetSupportedArchitectures(const ArchSpec &process_host_arch) override;

  Status
  ResolveExecutable(const ModuleSpec &module_spec, lldb::ModuleSP &module_sp,
                    const FileSpecList *module_search_paths_ptr) override;

  Status GetSharedModule(const ModuleSpec &module_spec, Process *process,
                         lldb::ModuleSP &module_sp,
                         const FileSpecList *module_search_paths_ptr,
                         llvm::SmallVectorImpl<lldb::ModuleSP> *old_modules,
                         bool *did_create_ptr) override;

  uint32_t FindProcesses(const ProcessInstanceInfoMatch &match_info,
                         ProcessInstanceInfoList &process_infos) override;

  void
  AddClangModuleCompilationOptions(Target *target,
                                   std::vector<std::string> &options) override {
    return PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(
        target, options, m_sdk_type);
  }

protected:
  const char *m_class_name;
  const char *m_description;
  ConstString m_plugin_name;
  std::mutex m_core_sim_path_mutex;
  std::optional<FileSpec> m_core_simulator_framework_path;
  std::optional<CoreSimulatorSupport::Device> m_device;
  CoreSimulatorSupport::DeviceType::ProductFamilyID m_kind;

  FileSpec GetCoreSimulatorPath();

  llvm::StringRef GetSDKFilepath();

  llvm::Triple::OSType m_os_type = llvm::Triple::UnknownOS;
  llvm::SmallVector<llvm::StringRef, 4> m_supported_triples = {};
  std::string m_sdk_name_primary;
  std::string m_sdk_name_secondary;
  bool m_have_searched_for_sdk = false;
  llvm::StringRef m_sdk;
  XcodeSDK::Type m_sdk_type;

  void LoadCoreSimulator();

#if defined(__APPLE__)
  CoreSimulatorSupport::Device GetSimulatorDevice();
#endif

private:
  PlatformAppleSimulator(const PlatformAppleSimulator &) = delete;
  const PlatformAppleSimulator &
  operator=(const PlatformAppleSimulator &) = delete;
  Status

  GetSymbolFile(const FileSpec &platform_file, const UUID *uuid_ptr,
                FileSpec &local_file);
};

} // namespace lldb_private

#endif // LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMAPPLESIMULATOR_H