Abi: Add xtensa architecture

Also add an "rtos" OS flavor to baremetal, which is popular with xtensa.

Task-number: QTCREATORBUG-20147
Change-Id: Id4d22ebfc59f123a76dc3de898c7c57bb3be8a38
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Tobias Hunger
2018-03-26 15:11:08 +02:00
parent b135306d9f
commit ca97be6a13
2 changed files with 22 additions and 1 deletions

View File

@@ -442,6 +442,12 @@ Abi Abi::abiFromTargetTriplet(const QString &triple)
|| p == "i686" || p == "x86") { || p == "i686" || p == "x86") {
arch = X86Architecture; arch = X86Architecture;
width = 32; width = 32;
} else if (p == "xtensa") {
arch = XtensaArchitecture;
os = BareMetalOS;
flavor = GenericBareMetalFlavor;
format = ElfFormat;
width = 32;
} else if (p.startsWith("arm")) { } else if (p.startsWith("arm")) {
arch = ArmArchitecture; arch = ArmArchitecture;
width = p.contains("64") ? 64 : 32; width = p.contains("64") ? 64 : 32;
@@ -601,6 +607,8 @@ QString Abi::toString(const Architecture &a)
return QLatin1String("arm"); return QLatin1String("arm");
case AvrArchitecture: case AvrArchitecture:
return QLatin1String("avr"); return QLatin1String("avr");
case XtensaArchitecture:
return QLatin1String("xtensa");
case X86Architecture: case X86Architecture:
return QLatin1String("x86"); return QLatin1String("x86");
case MipsArchitecture: case MipsArchitecture:
@@ -683,6 +691,8 @@ QString Abi::toString(const OSFlavor &of)
return QLatin1String("ce"); return QLatin1String("ce");
case VxWorksFlavor: case VxWorksFlavor:
return QLatin1String("vxworks"); return QLatin1String("vxworks");
case RtosFlavor:
return QLatin1String("rtos");
case UnknownFlavor: case UnknownFlavor:
default: default:
return QLatin1String("unknown"); return QLatin1String("unknown");
@@ -734,6 +744,8 @@ Abi::Architecture Abi::architectureFromString(const QStringRef &a)
return ItaniumArchitecture; return ItaniumArchitecture;
if (a == "sh") if (a == "sh")
return ShArchitecture; return ShArchitecture;
else if (a == "xtensa")
return XtensaArchitecture;
return UnknownArchitecture; return UnknownArchitecture;
} }
@@ -814,6 +826,8 @@ Abi::OSFlavor Abi::osFlavorFromString(const QStringRef &of, const OS os)
result = WindowsCEFlavor; result = WindowsCEFlavor;
} else if (of == "vxworks") { } else if (of == "vxworks") {
result = VxWorksFlavor; result = VxWorksFlavor;
} else if (of == "rtos") {
result = RtosFlavor;
} }
return flavorsForOs(os).contains(result) ? result : UnknownFlavor; return flavorsForOs(os).contains(result) ? result : UnknownFlavor;
@@ -869,7 +883,7 @@ QList<Abi::OSFlavor> Abi::flavorsForOs(const Abi::OS &o)
case QnxOS: case QnxOS:
return {GenericQnxFlavor, UnknownFlavor}; return {GenericQnxFlavor, UnknownFlavor};
case BareMetalOS: case BareMetalOS:
return {GenericBareMetalFlavor, UnknownFlavor}; return {GenericBareMetalFlavor, RtosFlavor, UnknownFlavor};
case UnknownOS: case UnknownOS:
return {UnknownFlavor}; return {UnknownFlavor};
} }
@@ -1335,6 +1349,9 @@ void ProjectExplorer::ProjectExplorerPlugin::testAbiFromTargetTriplet_data()
QTest::newRow("aarch64-unknown-linux-gnu") << int(Abi::ArmArchitecture) QTest::newRow("aarch64-unknown-linux-gnu") << int(Abi::ArmArchitecture)
<< int(Abi::LinuxOS) << int(Abi::GenericLinuxFlavor) << int(Abi::LinuxOS) << int(Abi::GenericLinuxFlavor)
<< int(Abi::ElfFormat) << 64; << int(Abi::ElfFormat) << 64;
QTest::newRow("xtensa-lx106-elf") << int(Abi::XtensaArchitecture)
<< int(Abi::BareMetalOS) << int(Abi::GenericBareMetalFlavor)
<< int(Abi::ElfFormat) << 32;
// Yes, that's the entire triplet // Yes, that's the entire triplet
QTest::newRow("avr") << int(Abi::AvrArchitecture) QTest::newRow("avr") << int(Abi::AvrArchitecture)

View File

@@ -49,6 +49,7 @@ public:
PowerPCArchitecture, PowerPCArchitecture,
ShArchitecture, ShArchitecture,
AvrArchitecture, AvrArchitecture,
XtensaArchitecture,
UnknownArchitecture UnknownArchitecture
}; };
@@ -97,6 +98,9 @@ public:
GenericQnxFlavor, GenericQnxFlavor,
GenericBareMetalFlavor, GenericBareMetalFlavor,
// Generic:
RtosFlavor,
UnknownFlavor UnknownFlavor
}; };