forked from qt-creator/qt-creator
CMake/qmake: Fix target triple for iOS targets
Neither cmake nor qmake know the full iOS compiler command line, so we have to construct the target triple for the code model ourselves. Fixes: QTCREATORBUG-28278 Change-Id: I6cac06f340e9388de5c86509a8df4ac00eef87cd Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -607,24 +607,24 @@ void CMakeBuildSystem::updateProjectData()
|
|||||||
setError(errorMessage);
|
setError(errorMessage);
|
||||||
qCDebug(cmakeBuildSystemLog) << "Raw project parts created." << errorMessage;
|
qCDebug(cmakeBuildSystemLog) << "Raw project parts created." << errorMessage;
|
||||||
|
|
||||||
{
|
for (RawProjectPart &rpp : rpps) {
|
||||||
for (RawProjectPart &rpp : rpps) {
|
rpp.setQtVersion(
|
||||||
rpp.setQtVersion(
|
kitInfo.projectPartQtVersion); // TODO: Check if project actually uses Qt.
|
||||||
kitInfo.projectPartQtVersion); // TODO: Check if project actually uses Qt.
|
const QString includeFileBaseDir = buildConfiguration()->buildDirectory().toString();
|
||||||
const QString includeFileBaseDir = buildConfiguration()->buildDirectory().toString();
|
QStringList cxxFlags = rpp.flagsForCxx.commandLineFlags;
|
||||||
if (kitInfo.cxxToolChain) {
|
QStringList cFlags = rpp.flagsForC.commandLineFlags;
|
||||||
rpp.setFlagsForCxx({kitInfo.cxxToolChain, rpp.flagsForCxx.commandLineFlags,
|
addTargetFlagForIos(cxxFlags, cFlags, this, [this] {
|
||||||
includeFileBaseDir});
|
return m_configurationFromCMake.stringValueOf("CMAKE_OSX_DEPLOYMENT_TARGET");
|
||||||
}
|
});
|
||||||
if (kitInfo.cToolChain) {
|
if (kitInfo.cxxToolChain)
|
||||||
rpp.setFlagsForC({kitInfo.cToolChain, rpp.flagsForC.commandLineFlags,
|
rpp.setFlagsForCxx({kitInfo.cxxToolChain, cxxFlags, includeFileBaseDir});
|
||||||
includeFileBaseDir});
|
if (kitInfo.cToolChain)
|
||||||
}
|
rpp.setFlagsForC({kitInfo.cToolChain, cFlags, includeFileBaseDir});
|
||||||
}
|
|
||||||
|
|
||||||
m_cppCodeModelUpdater->update({p, kitInfo, buildConfiguration()->environment(), rpps},
|
|
||||||
m_extraCompilers);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_cppCodeModelUpdater->update({p, kitInfo, buildConfiguration()->environment(), rpps},
|
||||||
|
m_extraCompilers);
|
||||||
|
|
||||||
{
|
{
|
||||||
const bool mergedHeaderPathsAndQmlImportPaths = kit()->value(
|
const bool mergedHeaderPathsAndQmlImportPaths = kit()->value(
|
||||||
QtSupport::KitHasMergedHeaderPathsWithQmlImportPaths::id(), false).toBool();
|
QtSupport::KitHasMergedHeaderPathsWithQmlImportPaths::id(), false).toBool();
|
||||||
|
@@ -5,10 +5,12 @@
|
|||||||
|
|
||||||
#include "abi.h"
|
#include "abi.h"
|
||||||
#include "buildconfiguration.h"
|
#include "buildconfiguration.h"
|
||||||
|
#include "buildsystem.h"
|
||||||
#include "kitinformation.h"
|
#include "kitinformation.h"
|
||||||
#include "project.h"
|
#include "project.h"
|
||||||
#include "target.h"
|
#include "target.h"
|
||||||
|
|
||||||
|
#include <ios/iosconstants.h>
|
||||||
#include <utils/algorithm.h>
|
#include <utils/algorithm.h>
|
||||||
|
|
||||||
namespace ProjectExplorer {
|
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
|
} // namespace ProjectExplorer
|
||||||
|
@@ -21,9 +21,17 @@
|
|||||||
|
|
||||||
namespace ProjectExplorer {
|
namespace ProjectExplorer {
|
||||||
|
|
||||||
|
class BuildSystem;
|
||||||
class Kit;
|
class Kit;
|
||||||
class Project;
|
class Project;
|
||||||
|
|
||||||
|
void PROJECTEXPLORER_EXPORT addTargetFlagForIos(
|
||||||
|
QStringList &cFlags,
|
||||||
|
QStringList &cxxFlags,
|
||||||
|
const BuildSystem *bs,
|
||||||
|
const std::function<QString()> &getDeploymentTarget
|
||||||
|
);
|
||||||
|
|
||||||
class PROJECTEXPLORER_EXPORT RawProjectPartFlags
|
class PROJECTEXPLORER_EXPORT RawProjectPartFlags
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@@ -1557,6 +1557,7 @@ QmakeEvalResultPtr QmakeProFile::evaluate(const QmakeEvalInput &input)
|
|||||||
result->newVarValues[Variable::AndroidAbis] = exactReader->values(QLatin1String(Android::Constants::ANDROID_ABIS));
|
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::AndroidApplicationArgs] = exactReader->values(QLatin1String(Android::Constants::ANDROID_APPLICATION_ARGUMENTS));
|
||||||
result->newVarValues[Variable::AndroidExtraLibs] = exactReader->values(QLatin1String(Android::Constants::ANDROID_EXTRA_LIBS));
|
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::AppmanPackageDir] = exactReader->values(QLatin1String("AM_PACKAGE_DIR"));
|
||||||
result->newVarValues[Variable::AppmanManifest] = exactReader->values(QLatin1String("AM_MANIFEST"));
|
result->newVarValues[Variable::AppmanManifest] = exactReader->values(QLatin1String("AM_MANIFEST"));
|
||||||
result->newVarValues[Variable::IsoIcons] = exactReader->values(QLatin1String("ISO_ICONS"));
|
result->newVarValues[Variable::IsoIcons] = exactReader->values(QLatin1String("ISO_ICONS"));
|
||||||
|
@@ -80,6 +80,7 @@ enum class Variable {
|
|||||||
AndroidPackageSourceDir,
|
AndroidPackageSourceDir,
|
||||||
AndroidExtraLibs,
|
AndroidExtraLibs,
|
||||||
AndroidApplicationArgs,
|
AndroidApplicationArgs,
|
||||||
|
IosDeploymentTarget,
|
||||||
AppmanPackageDir,
|
AppmanPackageDir,
|
||||||
AppmanManifest,
|
AppmanManifest,
|
||||||
IsoIcons,
|
IsoIcons,
|
||||||
|
@@ -350,10 +350,15 @@ void QmakeBuildSystem::updateCppCodeModel()
|
|||||||
};
|
};
|
||||||
|
|
||||||
const QStringList extraCxxArgs = getExtraFlagsFromCompilerVar(Variable::QmakeCxx);
|
const QStringList extraCxxArgs = getExtraFlagsFromCompilerVar(Variable::QmakeCxx);
|
||||||
|
cxxArgs << extraCxxArgs;
|
||||||
const QStringList extraCArgs = getExtraFlagsFromCompilerVar(Variable::QmakeCc);
|
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.setFlagsForCxx({kitInfo.cxxToolChain, cxxArgs, includeFileBaseDir});
|
||||||
rpp.setFlagsForC({kitInfo.cToolChain, cArgs << extraCArgs, includeFileBaseDir});
|
rpp.setFlagsForC({kitInfo.cToolChain, cArgs, includeFileBaseDir});
|
||||||
rpp.setMacros(ProjectExplorer::Macro::toMacros(pro->cxxDefines()));
|
rpp.setMacros(ProjectExplorer::Macro::toMacros(pro->cxxDefines()));
|
||||||
rpp.setPreCompiledHeaders(pro->variableValue(Variable::PrecompiledHeader));
|
rpp.setPreCompiledHeaders(pro->variableValue(Variable::PrecompiledHeader));
|
||||||
rpp.setSelectedForBuilding(pro->includedInExactParse());
|
rpp.setSelectedForBuilding(pro->includedInExactParse());
|
||||||
|
Reference in New Issue
Block a user