mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-09 17:47:43 +00:00
Work on URDE version detection and downloading
This commit is contained in:
@@ -1,4 +1,9 @@
|
||||
#include "Common.hpp"
|
||||
#include <QStringList>
|
||||
|
||||
#ifndef _WIN32
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#if __APPLE__
|
||||
const QString CurPlatformString = QStringLiteral("macos");
|
||||
@@ -25,22 +30,13 @@ QString PlatformToString(Platform plat)
|
||||
}
|
||||
}
|
||||
|
||||
#if ZEUS_ARCH_X86_64
|
||||
const QString CurArchitectureString = QStringLiteral("x86_64");
|
||||
#elif ZEUS_ARCH_X86
|
||||
const QString CurArchitectureString = QStringLiteral("x86");
|
||||
#elif ZEUS_ARCH_ARM
|
||||
const QString CurArchitectureString = QStringLiteral("arm");
|
||||
#elif ZEUS_ARCH_AARCH64
|
||||
const QString CurArchitectureString = QStringLiteral("aarch64");
|
||||
#else
|
||||
#error HECL does not know which architecture to fetch for
|
||||
#endif
|
||||
Architecture CurArchitecture = Architecture::Invalid;
|
||||
QString CurArchitectureString;
|
||||
|
||||
Platform StringToPlatform(const QString& str)
|
||||
{
|
||||
for (int i = 1; i < int(Platform::MAXPlatform); ++i)
|
||||
if (str.contains(PlatformToString(Platform(i)), Qt::CaseInsensitive))
|
||||
if (!str.compare(PlatformToString(Platform(i)), Qt::CaseInsensitive))
|
||||
return Platform(i);
|
||||
return Platform::Invalid;
|
||||
}
|
||||
@@ -65,7 +61,7 @@ QString ArchitectureToString(Architecture arch)
|
||||
Architecture StringToArchitecture(const QString& str)
|
||||
{
|
||||
for (int i = 1; i < int(Architecture::MAXArchitecture); ++i)
|
||||
if (str.contains(ArchitectureToString(Architecture(i)), Qt::CaseInsensitive))
|
||||
if (!str.compare(ArchitectureToString(Architecture(i)), Qt::CaseInsensitive))
|
||||
return Architecture(i);
|
||||
return Architecture::Invalid;
|
||||
}
|
||||
@@ -96,7 +92,62 @@ QString VectorISAToString(VectorISA visa)
|
||||
VectorISA StringToVectorISA(const QString& str)
|
||||
{
|
||||
for (int i = 1; i < int(VectorISA::MAXVectorISA); ++i)
|
||||
if (str.contains(VectorISAToString(VectorISA(i)), Qt::CaseInsensitive))
|
||||
if (!str.compare(VectorISAToString(VectorISA(i)), Qt::CaseInsensitive))
|
||||
return VectorISA(i);
|
||||
return VectorISA::Invalid;
|
||||
}
|
||||
|
||||
URDEVersion::URDEVersion(const QString& filename)
|
||||
{
|
||||
int idx;
|
||||
QString useFilename = filename;
|
||||
if ((idx = filename.indexOf('.')) >= 0)
|
||||
{
|
||||
m_extension = QString(filename).remove(0, idx);
|
||||
useFilename.truncate(idx);
|
||||
}
|
||||
QStringList list = useFilename.split('-');
|
||||
if (list.size() >= 2)
|
||||
m_version = list[1].toInt();
|
||||
if (list.size() >= 3)
|
||||
m_platform = StringToPlatform(list[2]);
|
||||
if (list.size() >= 4)
|
||||
m_architecture = StringToArchitecture(list[3]);
|
||||
if (list.size() >= 5)
|
||||
m_vectorISA = StringToVectorISA(list[4]);
|
||||
}
|
||||
|
||||
QString URDEVersion::fileString(bool withExtension) const
|
||||
{
|
||||
if (m_version < 0)
|
||||
return {};
|
||||
if (withExtension && !m_extension.isEmpty())
|
||||
return QString("urde-%1-%2-%3-%4%5").arg(QString::number(m_version),
|
||||
PlatformToString(m_platform),
|
||||
ArchitectureToString(m_architecture),
|
||||
VectorISAToString(m_vectorISA),
|
||||
m_extension);
|
||||
else
|
||||
return QString("urde-%1-%2-%3-%4").arg(QString::number(m_version),
|
||||
PlatformToString(m_platform),
|
||||
ArchitectureToString(m_architecture),
|
||||
VectorISAToString(m_vectorISA));
|
||||
}
|
||||
|
||||
void InitializePlatform()
|
||||
{
|
||||
#if ZEUS_ARCH_X86_64
|
||||
const_cast<Architecture&>(CurArchitecture) = Architecture::X86_64;
|
||||
#elif ZEUS_ARCH_X86
|
||||
#if !defined(__APPLE__) && !defined(_WIN32)
|
||||
const_cast<Architecture&>(CurArchitecture) =
|
||||
(sysconf(_SC_WORD_BIT) == 64 ? Architecture::X86_64 : Architecture::X86);
|
||||
#elif _WIN32
|
||||
bool isWOW = false;
|
||||
IsWow64Process(GetCurrentProcess(), &isWOW);
|
||||
const_cast<Architecture&>(CurArchitecture) =
|
||||
(isWOW ? Architecture::X86_64 : Architecture::X86);
|
||||
#endif
|
||||
#endif
|
||||
const_cast<QString&>(CurArchitectureString) = ArchitectureToString(CurArchitecture);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user