aboutsummaryrefslogtreecommitdiff
path: root/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h
blob: 28bd9df0fad7ccc2a7ceebca0b0c40610335bb97 (plain) (blame)
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
//===-- PlatformRemoteAppleTV.h ---------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef liblldb_PlatformRemoteAppleTV_h_
#define liblldb_PlatformRemoteAppleTV_h_

// C Includes
// C++ Includes
#include <string>

// Other libraries and framework includes
// Project includes
#include "lldb/Host/FileSpec.h"

#include "PlatformDarwin.h"

class PlatformRemoteAppleTV : public PlatformDarwin
{
public:
    PlatformRemoteAppleTV();

    ~PlatformRemoteAppleTV() override = default;

    //------------------------------------------------------------
    // Class Functions
    //------------------------------------------------------------
    static lldb::PlatformSP
    CreateInstance (bool force, const lldb_private::ArchSpec *arch);

    static void
    Initialize ();

    static void
    Terminate ();
    
    static lldb_private::ConstString
    GetPluginNameStatic ();

    static const char *
    GetDescriptionStatic();
    
    //------------------------------------------------------------
    // Class Methods
    //------------------------------------------------------------
    //------------------------------------------------------------
    // lldb_private::PluginInterface functions
    //------------------------------------------------------------
    lldb_private::ConstString
    GetPluginName() override
    {
        return GetPluginNameStatic();
    }
    
    uint32_t
    GetPluginVersion() override
    {
        return 1;
    }

    //------------------------------------------------------------
    // lldb_private::Platform functions
    //------------------------------------------------------------
    lldb_private::Error
    ResolveExecutable (const lldb_private::ModuleSpec &module_spec,
                       lldb::ModuleSP &module_sp,
                       const lldb_private::FileSpecList *module_search_paths_ptr) override;

    const char *
    GetDescription () override
    {
        return GetDescriptionStatic();
    }

    void
    GetStatus (lldb_private::Stream &strm) override;

    virtual lldb_private::Error
    GetSymbolFile (const lldb_private::FileSpec &platform_file, 
                   const lldb_private::UUID *uuid_ptr,
                   lldb_private::FileSpec &local_file);

    lldb_private::Error
    GetSharedModule (const lldb_private::ModuleSpec &module_spec,
                     lldb_private::Process* process,
                     lldb::ModuleSP &module_sp,
                     const lldb_private::FileSpecList *module_search_paths_ptr,
                     lldb::ModuleSP *old_module_sp_ptr,
                     bool *did_create_ptr) override;

    bool
    GetSupportedArchitectureAtIndex (uint32_t idx, 
                                     lldb_private::ArchSpec &arch) override;
    
    void
    AddClangModuleCompilationOptions (lldb_private::Target *target, std::vector<std::string> &options) override
    {
        return PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(target, options, PlatformDarwin::SDKType::iPhoneOS);
    }

protected:
    struct SDKDirectoryInfo
    {
        SDKDirectoryInfo (const lldb_private::FileSpec &sdk_dir_spec);
        lldb_private::FileSpec directory;
        lldb_private::ConstString build;
        uint32_t version_major;
        uint32_t version_minor;
        uint32_t version_update;
        bool user_cached;
    };
    typedef std::vector<SDKDirectoryInfo> SDKDirectoryInfoCollection;
    SDKDirectoryInfoCollection m_sdk_directory_infos;
    std::string m_device_support_directory;
    std::string m_device_support_directory_for_os_version;
    std::string m_build_update;
    uint32_t m_last_module_sdk_idx;
    uint32_t m_connected_module_sdk_idx;

    bool
    UpdateSDKDirectoryInfosIfNeeded();

    const char *
    GetDeviceSupportDirectory();

    const char *
    GetDeviceSupportDirectoryForOSVersion();

    const SDKDirectoryInfo *
    GetSDKDirectoryForLatestOSVersion ();

    const SDKDirectoryInfo *
    GetSDKDirectoryForCurrentOSVersion ();

    static lldb_private::FileSpec::EnumerateDirectoryResult
    GetContainedFilesIntoVectorOfStringsCallback (void *baton,
                                                  lldb_private::FileSpec::FileType file_type,
                                                  const lldb_private::FileSpec &file_spec);

    uint32_t
    FindFileInAllSDKs (const char *platform_file_path,
                       lldb_private::FileSpecList &file_list);

    bool
    GetFileInSDK (const char *platform_file_path,
                  uint32_t sdk_idx,
                  lldb_private::FileSpec &local_file);

    bool
    GetFileInSDKRoot (const char *platform_file_path,
                      const char *sdkroot_path,
                      bool symbols_dirs_only,
                      lldb_private::FileSpec &local_file);

    uint32_t
    FindFileInAllSDKs (const lldb_private::FileSpec &platform_file,
                       lldb_private::FileSpecList &file_list);

    uint32_t
    GetConnectedSDKIndex ();

private:
    DISALLOW_COPY_AND_ASSIGN (PlatformRemoteAppleTV);
};

#endif // liblldb_PlatformRemoteAppleTV_h_