diff options
-rw-r--r-- | src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp | 34 | ||||
-rw-r--r-- | src/plugins/projectexplorer/rawprojectpart.cpp | 26 | ||||
-rw-r--r-- | src/plugins/projectexplorer/rawprojectpart.h | 8 | ||||
-rw-r--r-- | src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp | 1 | ||||
-rw-r--r-- | src/plugins/qmakeprojectmanager/qmakeparsernodes.h | 1 | ||||
-rw-r--r-- | src/plugins/qmakeprojectmanager/qmakeproject.cpp | 9 |
6 files changed, 60 insertions, 19 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp index 4b089dff6fc..d2239ccaa9e 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp @@ -607,24 +607,24 @@ void CMakeBuildSystem::updateProjectData() setError(errorMessage); qCDebug(cmakeBuildSystemLog) << "Raw project parts created." << errorMessage; - { - for (RawProjectPart &rpp : rpps) { - rpp.setQtVersion( - kitInfo.projectPartQtVersion); // TODO: Check if project actually uses Qt. - const QString includeFileBaseDir = buildConfiguration()->buildDirectory().toString(); - if (kitInfo.cxxToolChain) { - rpp.setFlagsForCxx({kitInfo.cxxToolChain, rpp.flagsForCxx.commandLineFlags, - includeFileBaseDir}); - } - if (kitInfo.cToolChain) { - rpp.setFlagsForC({kitInfo.cToolChain, rpp.flagsForC.commandLineFlags, - includeFileBaseDir}); - } - } - - m_cppCodeModelUpdater->update({p, kitInfo, buildConfiguration()->environment(), rpps}, - m_extraCompilers); + for (RawProjectPart &rpp : rpps) { + rpp.setQtVersion( + kitInfo.projectPartQtVersion); // TODO: Check if project actually uses Qt. + const QString includeFileBaseDir = buildConfiguration()->buildDirectory().toString(); + QStringList cxxFlags = rpp.flagsForCxx.commandLineFlags; + QStringList cFlags = rpp.flagsForC.commandLineFlags; + addTargetFlagForIos(cxxFlags, cFlags, this, [this] { + return m_configurationFromCMake.stringValueOf("CMAKE_OSX_DEPLOYMENT_TARGET"); + }); + if (kitInfo.cxxToolChain) + rpp.setFlagsForCxx({kitInfo.cxxToolChain, cxxFlags, includeFileBaseDir}); + if (kitInfo.cToolChain) + rpp.setFlagsForC({kitInfo.cToolChain, cFlags, includeFileBaseDir}); } + + m_cppCodeModelUpdater->update({p, kitInfo, buildConfiguration()->environment(), rpps}, + m_extraCompilers); + { const bool mergedHeaderPathsAndQmlImportPaths = kit()->value( QtSupport::KitHasMergedHeaderPathsWithQmlImportPaths::id(), false).toBool(); diff --git a/src/plugins/projectexplorer/rawprojectpart.cpp b/src/plugins/projectexplorer/rawprojectpart.cpp index 35962516171..1f7cea32c96 100644 --- a/src/plugins/projectexplorer/rawprojectpart.cpp +++ b/src/plugins/projectexplorer/rawprojectpart.cpp @@ -5,10 +5,12 @@ #include "abi.h" #include "buildconfiguration.h" +#include "buildsystem.h" #include "kitinformation.h" #include "project.h" #include "target.h" +#include <ios/iosconstants.h> #include <utils/algorithm.h> namespace ProjectExplorer { @@ -191,4 +193,28 @@ ProjectUpdateInfo::ProjectUpdateInfo(Project *project, } } +// We do not get the -target flag from qmake or cmake on macOS; see QTCREATORBUG-28278. +void addTargetFlagForIos(QStringList &cFlags, QStringList &cxxFlags, const BuildSystem *bs, + const std::function<QString ()> &getDeploymentTarget) +{ + const Utils::Id deviceType = DeviceTypeKitAspect::deviceTypeId(bs->target()->kit()); + if (deviceType != Ios::Constants::IOS_DEVICE_TYPE + && deviceType != Ios::Constants::IOS_SIMULATOR_TYPE) { + return; + } + const bool isSim = deviceType == Ios::Constants::IOS_SIMULATOR_TYPE; + QString targetTriple(QLatin1String(isSim ? "x86_64" : "arm64")); + targetTriple.append("-apple-ios").append(getDeploymentTarget()); + if (isSim) + targetTriple.append("-simulator"); + const auto addTargetFlag = [&targetTriple](QStringList &flags) { + if (!flags.contains("-target") && !Utils::contains(flags, + [](const QString &flag) { return flag.startsWith("--target="); })) { + flags << "-target" << targetTriple; + } + }; + addTargetFlag(cxxFlags); + addTargetFlag(cFlags); +} + } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/rawprojectpart.h b/src/plugins/projectexplorer/rawprojectpart.h index fa36dc6c4a8..e1895869294 100644 --- a/src/plugins/projectexplorer/rawprojectpart.h +++ b/src/plugins/projectexplorer/rawprojectpart.h @@ -21,9 +21,17 @@ namespace ProjectExplorer { +class BuildSystem; class Kit; class Project; +void PROJECTEXPLORER_EXPORT addTargetFlagForIos( + QStringList &cFlags, + QStringList &cxxFlags, + const BuildSystem *bs, + const std::function<QString()> &getDeploymentTarget + ); + class PROJECTEXPLORER_EXPORT RawProjectPartFlags { public: diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp index 6df3ff16fe7..8467b62bd6b 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp @@ -1557,6 +1557,7 @@ QmakeEvalResultPtr QmakeProFile::evaluate(const QmakeEvalInput &input) result->newVarValues[Variable::AndroidAbis] = exactReader->values(QLatin1String(Android::Constants::ANDROID_ABIS)); result->newVarValues[Variable::AndroidApplicationArgs] = exactReader->values(QLatin1String(Android::Constants::ANDROID_APPLICATION_ARGUMENTS)); result->newVarValues[Variable::AndroidExtraLibs] = exactReader->values(QLatin1String(Android::Constants::ANDROID_EXTRA_LIBS)); + result->newVarValues[Variable::IosDeploymentTarget] = exactReader->values("QMAKE_IOS_DEPLOYMENT_TARGET"); result->newVarValues[Variable::AppmanPackageDir] = exactReader->values(QLatin1String("AM_PACKAGE_DIR")); result->newVarValues[Variable::AppmanManifest] = exactReader->values(QLatin1String("AM_MANIFEST")); result->newVarValues[Variable::IsoIcons] = exactReader->values(QLatin1String("ISO_ICONS")); diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h index d481dda64ce..e0e6cdd1331 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h @@ -80,6 +80,7 @@ enum class Variable { AndroidPackageSourceDir, AndroidExtraLibs, AndroidApplicationArgs, + IosDeploymentTarget, AppmanPackageDir, AppmanManifest, IsoIcons, diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index 605c4c19bb2..47adf657e9a 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -350,10 +350,15 @@ void QmakeBuildSystem::updateCppCodeModel() }; const QStringList extraCxxArgs = getExtraFlagsFromCompilerVar(Variable::QmakeCxx); + cxxArgs << extraCxxArgs; const QStringList extraCArgs = getExtraFlagsFromCompilerVar(Variable::QmakeCc); + cArgs << extraCArgs; + addTargetFlagForIos(cArgs, cxxArgs, this, [pro] { + return pro->variableValue(Variable::IosDeploymentTarget).join(QString()); + }); - rpp.setFlagsForCxx({kitInfo.cxxToolChain, cxxArgs << extraCxxArgs, includeFileBaseDir}); - rpp.setFlagsForC({kitInfo.cToolChain, cArgs << extraCArgs, includeFileBaseDir}); + rpp.setFlagsForCxx({kitInfo.cxxToolChain, cxxArgs, includeFileBaseDir}); + rpp.setFlagsForC({kitInfo.cToolChain, cArgs, includeFileBaseDir}); rpp.setMacros(ProjectExplorer::Macro::toMacros(pro->cxxDefines())); rpp.setPreCompiledHeaders(pro->variableValue(Variable::PrecompiledHeader)); rpp.setSelectedForBuilding(pro->includedInExactParse()); |