diff options
| author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2025-06-17 08:11:13 +0200 |
|---|---|---|
| committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2025-06-27 15:22:56 +0200 |
| commit | 7e1a388425d6fdb2b4256106036241c5b049e532 (patch) | |
| tree | d78a9a276d1356b6ad26259b9b9d525d26727cfd /sources/shiboken6/ApiExtractor/clangparser/compilersupport.cpp | |
| parent | 244b5dd5e1869ea85c5b78d27259965f7ca2c7bb (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.cpp | 28 |
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 |
