return CoreSimulatorSupport::Device();
}
#endif
+
+bool PlatformAppleSimulator::GetSupportedArchitectureAtIndex(uint32_t idx,
+ ArchSpec &arch) {
+ if (idx >= m_supported_triples.size())
+ return false;
+ arch = ArchSpec(m_supported_triples[idx]);
+ return true;
+}
lldb_private::Target *target,
lldb_private::Status &error) override;
+ bool GetSupportedArchitectureAtIndex(uint32_t idx,
+ lldb_private::ArchSpec &arch) override;
+
protected:
std::mutex m_core_sim_path_mutex;
llvm::Optional<lldb_private::FileSpec> m_core_simulator_framework_path;
lldb_private::FileSpec GetCoreSimulatorPath();
+ llvm::Triple::OSType m_os_type = llvm::Triple::UnknownOS;
+ llvm::ArrayRef<llvm::StringRef> m_supported_triples = {};
+
void LoadCoreSimulator();
#if defined(__APPLE__)
bool create = force;
if (!create && arch && arch->IsValid()) {
switch (arch->GetMachine()) {
+ case llvm::Triple::aarch64:
case llvm::Triple::x86_64: {
const llvm::Triple &triple = arch->GetTriple();
switch (triple.getVendor()) {
/// Default Constructor
PlatformAppleTVSimulator::PlatformAppleTVSimulator()
: PlatformAppleSimulator(
- CoreSimulatorSupport::DeviceType::ProductFamilyID::appleTV) {}
+ CoreSimulatorSupport::DeviceType::ProductFamilyID::appleTV) {
+#ifdef __APPLE__
+#if __arm64__
+ static const llvm::StringRef supported_triples[] = {
+ "arm64e-apple-tvos-simulator",
+ "arm64-apple-tvos-simulator",
+ "x86_64h-apple-tvos-simulator",
+ "x86_64-apple-tvos-simulator",
+ };
+#else
+ static const llvm::StringRef supported_triples[] = {
+ "x86_64h-apple-tvos-simulator",
+ "x86_64-apple-tvos-simulator",
+ };
+#endif
+ m_supported_triples = supported_triples;
+#endif
+}
/// Destructor.
///
}
return process_infos.size();
}
-
-bool PlatformAppleTVSimulator::GetSupportedArchitectureAtIndex(uint32_t idx,
- ArchSpec &arch) {
- static const ArchSpec platform_arch(
- HostInfo::GetArchitecture(HostInfo::eArchKind64));
-
- if (idx == 0) {
- arch = platform_arch;
- if (arch.IsValid()) {
- arch.GetTriple().setOS(llvm::Triple::TvOS);
- arch.GetTriple().setEnvironment(llvm::Triple::Simulator);
- return true;
- }
- }
- return false;
-}
FindProcesses(const lldb_private::ProcessInstanceInfoMatch &match_info,
lldb_private::ProcessInstanceInfoList &process_infos) override;
- bool GetSupportedArchitectureAtIndex(uint32_t idx,
- lldb_private::ArchSpec &arch) override;
-
void
AddClangModuleCompilationOptions(lldb_private::Target *target,
std::vector<std::string> &options) override {
bool create = force;
if (!create && arch && arch->IsValid()) {
switch (arch->GetMachine()) {
+ case llvm::Triple::aarch64:
case llvm::Triple::x86_64:
case llvm::Triple::x86: {
const llvm::Triple &triple = arch->GetTriple();
/// Default Constructor
PlatformAppleWatchSimulator::PlatformAppleWatchSimulator()
: PlatformAppleSimulator(
- CoreSimulatorSupport::DeviceType::ProductFamilyID::appleWatch) {}
+ CoreSimulatorSupport::DeviceType::ProductFamilyID::appleWatch) {
+#ifdef __APPLE__
+#if __arm64__
+ static const llvm::StringRef supported_triples[] = {
+ "arm64e-apple-watchos-simulator",
+ "arm64-apple-watchos-simulator",
+ };
+#else
+ static const llvm::StringRef supported_triples[] = {
+ "x86_64-apple-watchos-simulator",
+ "x86_64h-apple-watchos-simulator",
+ "i386-apple-watchos-simulator",
+ };
+#endif
+ m_supported_triples = supported_triples;
+#endif
+}
/// Destructor.
///
return process_infos.size();
}
-bool PlatformAppleWatchSimulator::GetSupportedArchitectureAtIndex(
- uint32_t idx, ArchSpec &arch) {
- if (idx == 0) {
- arch = HostInfo::GetArchitecture(HostInfo::eArchKind32);
- if (arch.IsValid()) {
- arch.GetTriple().setOS(llvm::Triple::WatchOS);
- arch.GetTriple().setEnvironment(llvm::Triple::Simulator);
- return true;
- }
- }
-
- if (idx == 1) {
- arch = HostInfo::GetArchitecture(HostInfo::eArchKind64);
- if (arch.IsValid()) {
- arch.GetTriple().setOS(llvm::Triple::WatchOS);
- arch.GetTriple().setEnvironment(llvm::Triple::Simulator);
- return true;
- }
- }
- return false;
-}
FindProcesses(const lldb_private::ProcessInstanceInfoMatch &match_info,
lldb_private::ProcessInstanceInfoList &process_infos) override;
- bool GetSupportedArchitectureAtIndex(uint32_t idx,
- lldb_private::ArchSpec &arch) override;
-
void
AddClangModuleCompilationOptions(lldb_private::Target *target,
std::vector<std::string> &options) override {
bool create = force;
if (!create && arch && arch->IsValid()) {
switch (arch->GetMachine()) {
+ case llvm::Triple::aarch64:
case llvm::Triple::x86_64:
case llvm::Triple::x86: {
const llvm::Triple &triple = arch->GetTriple();
/// Default Constructor
PlatformiOSSimulator::PlatformiOSSimulator()
: PlatformAppleSimulator(
- CoreSimulatorSupport::DeviceType::ProductFamilyID::iPhone) {}
+ CoreSimulatorSupport::DeviceType::ProductFamilyID::iPhone) {
+#ifdef __APPLE__
+#if __arm64__
+ static const llvm::StringRef supported_triples[] = {
+ "arm64e-apple-ios-simulator",
+ "arm64-apple-ios-simulator",
+ "x86_64-apple-ios-simulator",
+ "x86_64h-apple-ios-simulator",
+ };
+#else
+ static const llvm::StringRef supported_triples[] = {
+ "x86_64h-apple-ios-simulator",
+ "x86_64-apple-ios-simulator",
+ "i386-apple-ios-simulator",
+ };
+#endif
+ m_supported_triples = supported_triples;
+#endif
+}
/// Destructor.
///
return process_infos.size();
}
-bool PlatformiOSSimulator::GetSupportedArchitectureAtIndex(uint32_t idx,
- ArchSpec &arch) {
- static const ArchSpec platform_arch(
- HostInfo::GetArchitecture(HostInfo::eArchKindDefault));
- static const ArchSpec platform_arch64(
- HostInfo::GetArchitecture(HostInfo::eArchKind64));
-
- if (idx == 0) {
- arch = platform_arch;
- if (arch.IsValid()) {
- arch.GetTriple().setOS(llvm::Triple::IOS);
- arch.GetTriple().setEnvironment(llvm::Triple::Simulator);
- return true;
- }
- } else {
- if (platform_arch.IsExactMatch(platform_arch64)) {
- // This macosx platform supports both 32 and 64 bit.
- if (idx == 1) {
- // 32/64: return "x86_64-apple-macosx" for architecture 1
- arch = platform_arch64;
- return true;
- } else if (idx == 2 || idx == 3) {
- arch = HostInfo::GetArchitecture(HostInfo::eArchKind32);
- if (arch.IsValid()) {
- if (idx == 2)
- arch.GetTriple().setOS(llvm::Triple::IOS);
- // 32/64: return "i386-apple-ios" for architecture 2 32/64: return
- // "i386-apple-macosx" for architecture 3
- return true;
- }
- }
- } else if (idx == 1) {
- // This macosx platform supports only 32 bit, so return the *-apple-
- // macosx version
- arch = platform_arch;
- return true;
- }
- }
- return false;
-}
FindProcesses(const lldb_private::ProcessInstanceInfoMatch &match_info,
lldb_private::ProcessInstanceInfoList &process_infos) override;
- bool GetSupportedArchitectureAtIndex(uint32_t idx,
- lldb_private::ArchSpec &arch) override;
-
void
AddClangModuleCompilationOptions(lldb_private::Target *target,
std::vector<std::string> &options) override {
add_lldb_unittest(LLDBPlatformTests
+ PlatformAppleSimulatorTest.cpp
PlatformDarwinTest.cpp
LINK_LIBS
--- /dev/null
+//===-- PlatformAppleSimulatorTest.cpp ------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "gtest/gtest.h"
+
+#include "Plugins/Platform/MacOSX/PlatformAppleTVSimulator.h"
+#include "Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.h"
+#include "Plugins/Platform/MacOSX/PlatformiOSSimulator.h"
+#include "TestingSupport/SubsystemRAII.h"
+#include "lldb/Host/FileSystem.h"
+#include "lldb/Host/HostInfo.h"
+#include "lldb/Target/Platform.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+class PlatformAppleSimulatorTest : public ::testing::Test {
+ SubsystemRAII<FileSystem, HostInfo, PlatformAppleTVSimulator,
+ PlatformiOSSimulator, PlatformAppleWatchSimulator>
+ subsystems;
+};
+
+#ifdef __APPLE__
+
+static void testSimPlatformArchHasSimEnvironment(llvm::StringRef name) {
+ Status error;
+ auto platform_sp = Platform::Create(ConstString(name), error);
+ ASSERT_TRUE(platform_sp);
+ int num_arches = 0;
+
+ while (true) {
+ ArchSpec arch;
+ if (!platform_sp->GetSupportedArchitectureAtIndex(num_arches, arch))
+ break;
+ EXPECT_EQ(arch.GetTriple().getEnvironment(), llvm::Triple::Simulator);
+ num_arches++;
+ }
+
+ EXPECT_GT(num_arches, 0);
+}
+
+TEST_F(PlatformAppleSimulatorTest, TestSimHasSimEnvionament) {
+ testSimPlatformArchHasSimEnvironment("ios-simulator");
+ testSimPlatformArchHasSimEnvironment("tvos-simulator");
+ testSimPlatformArchHasSimEnvironment("watchos-simulator");
+}
+
+TEST_F(PlatformAppleSimulatorTest, TestHostPlatformToSim) {
+ static const ArchSpec platform_arch(
+ HostInfo::GetArchitecture(HostInfo::eArchKindDefault));
+
+ const llvm::Triple::OSType sim_platforms[] = {
+ llvm::Triple::IOS,
+ llvm::Triple::TvOS,
+ llvm::Triple::WatchOS,
+ };
+
+ for (auto sim : sim_platforms) {
+ ArchSpec arch = platform_arch;
+ arch.GetTriple().setOS(sim);
+ arch.GetTriple().setEnvironment(llvm::Triple::Simulator);
+
+ Status error;
+ auto platform_sp = Platform::Create(arch, nullptr, error);
+ EXPECT_TRUE(platform_sp);
+ }
+}
+
+#endif