aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken6/ApiExtractor/clangparser/compilersupport.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2025-06-17 08:11:13 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2025-06-27 15:22:56 +0200
commit7e1a388425d6fdb2b4256106036241c5b049e532 (patch)
treed78a9a276d1356b6ad26259b9b9d525d26727cfd /sources/shiboken6/ApiExtractor/clangparser/compilersupport.cpp
parent244b5dd5e1869ea85c5b78d27259965f7ca2c7bb (diff)
shiboken6: Pass target to clang parser when cross compiling
When cross compiling (detected by the platform/architecture values passed via command line not matching the host) and no custom clang command line option specifying a target is present, determine a target triplet and pass that to clang. Task-number: PYSIDE-3105 Change-Id: Ib34ecfc1880525d2e035a04079242b5ade205a7a Reviewed-by: Shyamnath Premnadh <Shyamnath.Premnadh@qt.io>
Diffstat (limited to 'sources/shiboken6/ApiExtractor/clangparser/compilersupport.cpp')
-rw-r--r--sources/shiboken6/ApiExtractor/clangparser/compilersupport.cpp28
1 files changed, 22 insertions, 6 deletions
diff --git a/sources/shiboken6/ApiExtractor/clangparser/compilersupport.cpp b/sources/shiboken6/ApiExtractor/clangparser/compilersupport.cpp
index 394f6ea38..14f27bc60 100644
--- a/sources/shiboken6/ApiExtractor/clangparser/compilersupport.cpp
+++ b/sources/shiboken6/ApiExtractor/clangparser/compilersupport.cpp
@@ -677,13 +677,29 @@ void setTargetTriple(const QString &t)
_targetTriple = t;
}
-void setTargetTriple(const QStringList &clangOptions)
+bool isCrossCompilation()
{
- static constexpr auto targetOption = "--target="_L1;
- auto targetOptionPred = [](const QString &o) { return o.startsWith(targetOption); };
- const auto it = std::find_if(clangOptions.cbegin(), clangOptions.cend(), targetOptionPred);
- if (it != clangOptions.cend())
- _targetTriple = it->sliced(targetOption.size());
+ return platform() != hostPlatform() || architecture() != hostArchitecture()
+ || compiler() != hostCompiler();
+}
+
+static const char targetOptionC[] = "--target=";
+
+static inline bool isTargetOption(const QByteArray &o)
+{
+ return o.startsWith(targetOptionC);
+}
+
+static bool isTargetArchOption(const QByteArray &o)
+{
+ return isTargetOption(o)
+ || o.startsWith("-march=") || o.startsWith("-meabi");
+}
+
+bool hasTargetOption(const QByteArrayList &clangOptions)
+{
+ return std::any_of(clangOptions.cbegin(), clangOptions.cend(),
+ isTargetArchOption);
}
} // namespace clang