1 | //===-- PlatformDarwinDevice.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_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMDARWINDEVICE_H |
10 | #define LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMDARWINDEVICE_H |
11 | |
12 | #include "PlatformDarwin.h" |
13 | |
14 | #include "llvm/ADT/StringRef.h" |
15 | |
16 | #include <string> |
17 | |
18 | namespace lldb_private { |
19 | |
20 | /// Abstract Darwin platform with a potential device support directory. |
21 | class PlatformDarwinDevice : public PlatformDarwin { |
22 | public: |
23 | using PlatformDarwin::PlatformDarwin; |
24 | ~PlatformDarwinDevice() override; |
25 | |
26 | protected: |
27 | virtual Status GetSharedModuleWithLocalCache( |
28 | const ModuleSpec &module_spec, lldb::ModuleSP &module_sp, |
29 | const FileSpecList *module_search_paths_ptr, |
30 | llvm::SmallVectorImpl<lldb::ModuleSP> *old_modules, bool *did_create_ptr); |
31 | |
32 | struct SDKDirectoryInfo { |
33 | SDKDirectoryInfo(const FileSpec &sdk_dir_spec); |
34 | FileSpec directory; |
35 | ConstString build; |
36 | llvm::VersionTuple version; |
37 | bool user_cached; |
38 | }; |
39 | |
40 | typedef std::vector<SDKDirectoryInfo> SDKDirectoryInfoCollection; |
41 | |
42 | bool UpdateSDKDirectoryInfosIfNeeded(); |
43 | |
44 | const SDKDirectoryInfo *GetSDKDirectoryForLatestOSVersion(); |
45 | const SDKDirectoryInfo *GetSDKDirectoryForCurrentOSVersion(); |
46 | |
47 | static FileSystem::EnumerateDirectoryResult |
48 | GetContainedFilesIntoVectorOfStringsCallback(void *baton, |
49 | llvm::sys::fs::file_type ft, |
50 | llvm::StringRef path); |
51 | |
52 | const char *GetDeviceSupportDirectory(); |
53 | const char *GetDeviceSupportDirectoryForOSVersion(); |
54 | |
55 | virtual llvm::StringRef GetPlatformName() = 0; |
56 | virtual llvm::StringRef GetDeviceSupportDirectoryName() = 0; |
57 | |
58 | std::mutex m_sdk_dir_mutex; |
59 | SDKDirectoryInfoCollection m_sdk_directory_infos; |
60 | |
61 | private: |
62 | std::string m_device_support_directory; |
63 | std::string m_device_support_directory_for_os_version; |
64 | }; |
65 | } // namespace lldb_private |
66 | |
67 | #endif // LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMDARWINDEVICE_H |
68 | |