1 //===-- PlatformRemoteDarwinDevice.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_PLATFORMREMOTEDARWINDEVICE_H 10 #define LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMREMOTEDARWINDEVICE_H 11 12 #include <string> 13 14 #include "PlatformDarwin.h" 15 #include "lldb/Utility/FileSpec.h" 16 17 #include "llvm/Support/FileSystem.h" 18 19 class PlatformRemoteDarwinDevice : public PlatformDarwin { 20 public: 21 PlatformRemoteDarwinDevice(); 22 23 ~PlatformRemoteDarwinDevice() override; 24 25 // lldb_private::Platform functions 26 lldb_private::Status ResolveExecutable( 27 const lldb_private::ModuleSpec &module_spec, lldb::ModuleSP &module_sp, 28 const lldb_private::FileSpecList *module_search_paths_ptr) override; 29 30 void GetStatus(lldb_private::Stream &strm) override; 31 32 virtual lldb_private::Status 33 GetSymbolFile(const lldb_private::FileSpec &platform_file, 34 const lldb_private::UUID *uuid_ptr, 35 lldb_private::FileSpec &local_file); 36 37 lldb_private::Status 38 GetSharedModule(const lldb_private::ModuleSpec &module_spec, 39 lldb_private::Process *process, lldb::ModuleSP &module_sp, 40 const lldb_private::FileSpecList *module_search_paths_ptr, 41 llvm::SmallVectorImpl<lldb::ModuleSP> *old_modules, 42 bool *did_create_ptr) override; 43 44 void AddClangModuleCompilationOptions(lldb_private::Target * target,std::vector<std::string> & options)45 AddClangModuleCompilationOptions(lldb_private::Target *target, 46 std::vector<std::string> &options) override { 47 return PlatformDarwin::AddClangModuleCompilationOptionsForSDKType( 48 target, options, lldb_private::XcodeSDK::Type::iPhoneOS); 49 } 50 51 protected: 52 struct SDKDirectoryInfo { 53 SDKDirectoryInfo(const lldb_private::FileSpec &sdk_dir_spec); 54 lldb_private::FileSpec directory; 55 lldb_private::ConstString build; 56 llvm::VersionTuple version; 57 bool user_cached; 58 }; 59 60 typedef std::vector<SDKDirectoryInfo> SDKDirectoryInfoCollection; 61 62 std::mutex m_sdk_dir_mutex; 63 SDKDirectoryInfoCollection m_sdk_directory_infos; 64 std::string m_device_support_directory; 65 std::string m_device_support_directory_for_os_version; 66 std::string m_build_update; 67 uint32_t m_last_module_sdk_idx; 68 uint32_t m_connected_module_sdk_idx; 69 70 bool UpdateSDKDirectoryInfosIfNeeded(); 71 72 const char *GetDeviceSupportDirectory(); 73 74 const char *GetDeviceSupportDirectoryForOSVersion(); 75 76 const SDKDirectoryInfo *GetSDKDirectoryForLatestOSVersion(); 77 78 const SDKDirectoryInfo *GetSDKDirectoryForCurrentOSVersion(); 79 80 static lldb_private::FileSystem::EnumerateDirectoryResult 81 GetContainedFilesIntoVectorOfStringsCallback(void *baton, 82 llvm::sys::fs::file_type ft, 83 llvm::StringRef path); 84 85 uint32_t FindFileInAllSDKs(const char *platform_file_path, 86 lldb_private::FileSpecList &file_list); 87 88 bool GetFileInSDK(const char *platform_file_path, uint32_t sdk_idx, 89 lldb_private::FileSpec &local_file); 90 91 uint32_t FindFileInAllSDKs(const lldb_private::FileSpec &platform_file, 92 lldb_private::FileSpecList &file_list); 93 94 uint32_t GetConnectedSDKIndex(); 95 96 // Get index of SDK in SDKDirectoryInfoCollection by its pointer and return 97 // UINT32_MAX if that SDK not found. 98 uint32_t GetSDKIndexBySDKDirectoryInfo(const SDKDirectoryInfo *sdk_info); 99 100 virtual llvm::StringRef GetDeviceSupportDirectoryName() = 0; 101 virtual llvm::StringRef GetPlatformName() = 0; 102 103 private: 104 PlatformRemoteDarwinDevice(const PlatformRemoteDarwinDevice &) = delete; 105 const PlatformRemoteDarwinDevice & 106 operator=(const PlatformRemoteDarwinDevice &) = delete; 107 }; 108 109 #endif // LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMREMOTEDARWINDEVICE_H 110