diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/corelib/jsextensions/utilitiesextension.cpp | 24 | ||||
-rw-r--r-- | src/lib/corelib/tools/architectures.cpp | 23 | ||||
-rw-r--r-- | src/lib/corelib/tools/architectures.h | 5 |
3 files changed, 52 insertions, 0 deletions
diff --git a/src/lib/corelib/jsextensions/utilitiesextension.cpp b/src/lib/corelib/jsextensions/utilitiesextension.cpp index 1463438fc..5155545f2 100644 --- a/src/lib/corelib/jsextensions/utilitiesextension.cpp +++ b/src/lib/corelib/jsextensions/utilitiesextension.cpp @@ -71,6 +71,8 @@ class UtilitiesExtension : public QObject, QScriptable public: static QScriptValue js_ctor(QScriptContext *context, QScriptEngine *engine); static QScriptValue js_canonicalArchitecture(QScriptContext *context, QScriptEngine *engine); + static QScriptValue js_canonicalTargetArchitecture(QScriptContext *context, + QScriptEngine *engine); static QScriptValue js_canonicalToolchain(QScriptContext *context, QScriptEngine *engine); static QScriptValue js_getHash(QScriptContext *context, QScriptEngine *engine); static QScriptValue js_getNativeSetting(QScriptContext *context, QScriptEngine *engine); @@ -92,6 +94,9 @@ void initializeJsExtensionUtilities(QScriptValue extensionObject) engine->newFunction(&UtilitiesExtension::js_ctor)); environmentObj.setProperty(QStringLiteral("canonicalArchitecture"), engine->newFunction(UtilitiesExtension::js_canonicalArchitecture, 1)); + environmentObj.setProperty(QStringLiteral("canonicalTargetArchitecture"), + engine->newFunction( + UtilitiesExtension::js_canonicalTargetArchitecture, 4)); environmentObj.setProperty(QStringLiteral("canonicalToolchain"), engine->newFunction(UtilitiesExtension::js_canonicalToolchain)); environmentObj.setProperty(QStringLiteral("getHash"), @@ -121,6 +126,25 @@ QScriptValue UtilitiesExtension::js_ctor(QScriptContext *context, QScriptEngine return context->throwError(Tr::tr("'Utilities' cannot be instantiated.")); } +QScriptValue UtilitiesExtension::js_canonicalTargetArchitecture(QScriptContext *context, + QScriptEngine *engine) +{ + const QScriptValue arch = context->argument(0); + if (arch.isUndefined() || arch.isNull()) + return arch; + + const QScriptValue vendor = context->argument(1); + const QScriptValue system = context->argument(2); + const QScriptValue abi = context->argument(3); + + if (!arch.isString() || !vendor.isString() || !system.isString() || !abi.isString()) + return context->throwError(QScriptContext::SyntaxError, + QStringLiteral("canonicalTargetArchitecture expects 1 to 4 arguments of type string")); + + return engine->toScriptValue(canonicalTargetArchitecture(arch.toString(), vendor.toString(), + system.toString(), abi.toString())); +} + QScriptValue UtilitiesExtension::js_canonicalArchitecture(QScriptContext *context, QScriptEngine *engine) { diff --git a/src/lib/corelib/tools/architectures.cpp b/src/lib/corelib/tools/architectures.cpp index ca43b90c7..02f0fc868 100644 --- a/src/lib/corelib/tools/architectures.cpp +++ b/src/lib/corelib/tools/architectures.cpp @@ -46,6 +46,29 @@ namespace qbs { +QString canonicalTargetArchitecture(const QString &architecture, + const QString &vendor, + const QString &system, + const QString &abi) +{ + const QString arch = canonicalArchitecture(architecture); + const bool isApple = (vendor == QStringLiteral("apple") + || system == QStringLiteral("darwin") + || system == QStringLiteral("macosx") + || system == QStringLiteral("ios") + || system == QStringLiteral("tvos") + || system == QStringLiteral("watchos") + || abi == QStringLiteral("macho")); + + if (arch == QStringLiteral("armv7a") && isApple) + return QStringLiteral("armv7"); + + if (arch == QStringLiteral("x86")) + return QStringLiteral("i386"); + + return arch; +} + QString canonicalArchitecture(const QString &architecture) { QMap<QString, QStringList> archMap; diff --git a/src/lib/corelib/tools/architectures.h b/src/lib/corelib/tools/architectures.h index bb7f0d21e..ef4ebb537 100644 --- a/src/lib/corelib/tools/architectures.h +++ b/src/lib/corelib/tools/architectures.h @@ -43,6 +43,11 @@ namespace qbs { +QBS_EXPORT QString canonicalTargetArchitecture(const QString &architecture, + const QString &vendor, + const QString &system, + const QString &abi); + QBS_EXPORT QString canonicalArchitecture(const QString &architecture); } // namespace qbs |