aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/corelib/jsextensions/utilitiesextension.cpp24
-rw-r--r--src/lib/corelib/tools/architectures.cpp23
-rw-r--r--src/lib/corelib/tools/architectures.h5
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