aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp34
-rw-r--r--src/plugins/projectexplorer/rawprojectpart.cpp26
-rw-r--r--src/plugins/projectexplorer/rawprojectpart.h8
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp1
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeparsernodes.h1
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeproject.cpp9
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());