diff options
Diffstat (limited to 'sources')
4 files changed, 52 insertions, 0 deletions
diff --git a/sources/shiboken6/ApiExtractor/apiextractor.cpp b/sources/shiboken6/ApiExtractor/apiextractor.cpp index 90f4f5dd9..38dedfd14 100644 --- a/sources/shiboken6/ApiExtractor/apiextractor.cpp +++ b/sources/shiboken6/ApiExtractor/apiextractor.cpp @@ -370,6 +370,7 @@ bool ApiExtractorPrivate::runHelper(ApiExtractorFlags flags) bool addCompilerSupportArguments = true; if (clangOptionsSize > 0) { + clang::setTargetTriple(m_clangOptions); qsizetype i = 0; if (m_clangOptions.at(i) == u"-") { ++i; diff --git a/sources/shiboken6/ApiExtractor/clangparser/clangparser.cpp b/sources/shiboken6/ApiExtractor/clangparser/clangparser.cpp index 54a1a2c8b..69582af0d 100644 --- a/sources/shiboken6/ApiExtractor/clangparser/clangparser.cpp +++ b/sources/shiboken6/ApiExtractor/clangparser/clangparser.cpp @@ -275,6 +275,15 @@ static CXTranslationUnit createTranslationUnit(CXIndex index, return tu; } +static void setupTarget(CXTranslationUnit translationUnit) +{ + const CXTargetInfo targetInfo = clang_getTranslationUnitTargetInfo(translationUnit); + const auto tripleCS = clang_TargetInfo_getTriple(targetInfo); + clang::setPointerSize(clang_TargetInfo_getPointerWidth(targetInfo)); + clang::setTargetTriple(QString::fromUtf8(clang_getCString(tripleCS))); + clang_disposeString(tripleCS); +} + /* clangFlags are flags to clang_parseTranslationUnit2() such as * CXTranslationUnit_KeepGoing (from CINDEX_VERSION_MAJOR/CINDEX_VERSION_MINOR 0.35) */ @@ -295,6 +304,8 @@ bool parse(const QByteArrayList &clangArgs, bool addCompilerSupportArguments, if (!translationUnit) return false; + setupTarget(translationUnit); + CXCursor rootCursor = clang_getTranslationUnitCursor(translationUnit); clang_visitChildren(rootCursor, visitorCallback, reinterpret_cast<CXClientData>(&bv)); diff --git a/sources/shiboken6/ApiExtractor/clangparser/compilersupport.cpp b/sources/shiboken6/ApiExtractor/clangparser/compilersupport.cpp index ed8057b62..d4edf55c0 100644 --- a/sources/shiboken6/ApiExtractor/clangparser/compilersupport.cpp +++ b/sources/shiboken6/ApiExtractor/clangparser/compilersupport.cpp @@ -59,6 +59,9 @@ bool setCompiler(const QString &name) QString _compilerPath; // Pre-defined compiler path (from command line) +static unsigned _pointerSize = QT_POINTER_SIZE * 8; +static QString _targetTriple; + const QString &compilerPath() { return _compilerPath; @@ -451,4 +454,33 @@ LanguageLevel languageLevelFromOption(const char *o) return LanguageLevel::Default; } +unsigned pointerSize() +{ + return _pointerSize; +} + +void setPointerSize(unsigned ps) +{ + _pointerSize = ps; +} + +QString targetTriple() +{ + return _targetTriple; + +} +void setTargetTriple(const QString &t) +{ + _targetTriple = t; +} + +void setTargetTriple(const QStringList &clangOptions) +{ + 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()); +} + } // namespace clang diff --git a/sources/shiboken6/ApiExtractor/clangparser/compilersupport.h b/sources/shiboken6/ApiExtractor/clangparser/compilersupport.h index 1fa980998..0e12ca137 100644 --- a/sources/shiboken6/ApiExtractor/clangparser/compilersupport.h +++ b/sources/shiboken6/ApiExtractor/clangparser/compilersupport.h @@ -51,6 +51,14 @@ void setCompilerPath(const QString &name); Platform platform(); bool setPlatform(const QString &name); + +unsigned pointerSize(); // (bit) +void setPointerSize(unsigned ps); // Set by parser + +QString targetTriple(); +void setTargetTriple(const QStringList &clangOptions); // Set from cmd line before parsing +void setTargetTriple(const QString &t); // Updated by clang parser while parsing + } // namespace clang #endif // COMPILERSUPPORT_H |