From d1d9df60b63bda12668078ff6e019532b7b0cd02 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 9 Dec 2019 13:54:57 +0100 Subject: [PATCH] CMake: Dissolve CMakeExtraBuildInfo The information is effectively derivable from kit and build type, so do it only when needed. Change-Id: Ideb4e5106a6a0632ade98aad894d5b7aa6f83126 Reviewed-by: Christian Kandeler --- .../cmakebuildconfiguration.cpp | 65 +++++++------------ 1 file changed, 22 insertions(+), 43 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 6309904cf9f..3edd46b9dab 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -59,20 +59,6 @@ using namespace ProjectExplorer; using namespace Utils; -namespace CMakeProjectManager { - -class CMakeExtraBuildInfo -{ -public: - QString sourceDirectory; - CMakeConfig configuration; -}; - -} // namespace CMakeProjectManager - -Q_DECLARE_METATYPE(CMakeProjectManager::CMakeExtraBuildInfo) - - namespace CMakeProjectManager { namespace Internal { @@ -93,8 +79,23 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Core::Id id) buildSteps()->appendStep(Constants::CMAKE_BUILD_STEP_ID); - if (DeviceTypeKitAspect::deviceTypeId(target->kit()) - == Android::Constants::ANDROID_DEVICE_TYPE) { + CMakeConfig config; + config.append({"CMAKE_BUILD_TYPE", info.typeName.toUtf8()}); + + Kit *k = target->kit(); + const QString sysRoot = SysRootKitAspect::sysRoot(k).toString(); + if (!sysRoot.isEmpty()) { + config.append(CMakeConfigItem("CMAKE_SYSROOT", sysRoot.toUtf8())); + ToolChain *tc = ToolChainKitAspect::toolChain(k, + ProjectExplorer::Constants::CXX_LANGUAGE_ID); + if (tc) { + const QByteArray targetTriple = tc->originalTargetTriple().toUtf8(); + config.append(CMakeConfigItem("CMAKE_C_COMPILER_TARGET", targetTriple)); + config.append(CMakeConfigItem("CMAKE_CXX_COMPILER_TARGET ", targetTriple)); + } + } + + if (DeviceTypeKitAspect::deviceTypeId(k) == Android::Constants::ANDROID_DEVICE_TYPE) { buildSteps()->appendStep(Android::Constants::ANDROID_BUILD_APK_ID); const auto &bs = buildSteps()->steps().constLast(); m_initialConfiguration.prepend(CMakeProjectManager::CMakeConfigItem{"ANDROID_NATIVE_API_LEVEL", @@ -128,7 +129,7 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Core::Id id) preferredAbi.toLatin1(), androidAbis}); - QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(target->kit()); + QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(k); if (qt->qtVersion() >= QtSupport::QtVersionNumber{5, 14, 0}) { auto sdkLocation = bs->data(Android::Constants::SdkLocation).value(); m_initialConfiguration.prepend(CMakeProjectManager::CMakeConfigItem{"ANDROID_SDK", @@ -150,12 +151,12 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Core::Id id) if (info.buildDirectory.isEmpty()) { setBuildDirectory(shadowBuildDirectory(target->project()->projectFilePath(), - target->kit(), + k, info.displayName, info.buildType)); } - auto cinfo = info.extraInfo.value(); - setConfigurationForCMake(cinfo.configuration); + + setConfigurationForCMake(config); }); } @@ -461,16 +462,12 @@ QList CMakeBuildConfigurationFactory::availableBuilds(const Kit *k, } BuildInfo CMakeBuildConfigurationFactory::createBuildInfo(const Kit *k, - const QString &sourceDir, + const QString &, BuildType buildType) const { BuildInfo info(this); info.kitId = k->id(); - CMakeExtraBuildInfo extra; - extra.sourceDirectory = sourceDir; - - CMakeConfigItem buildTypeItem; switch (buildType) { case BuildTypeNone: info.typeName = "Build"; @@ -502,24 +499,6 @@ BuildInfo CMakeBuildConfigurationFactory::createBuildInfo(const Kit *k, break; } - buildTypeItem = {CMakeConfigItem("CMAKE_BUILD_TYPE", info.typeName.toUtf8())}; - - if (!buildTypeItem.isNull()) - extra.configuration.append(buildTypeItem); - - const QString sysRoot = SysRootKitAspect::sysRoot(k).toString(); - if (!sysRoot.isEmpty()) { - extra.configuration.append(CMakeConfigItem("CMAKE_SYSROOT", sysRoot.toUtf8())); - ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitAspect::toolChain( - k, ProjectExplorer::Constants::CXX_LANGUAGE_ID); - if (tc) { - const QByteArray targetTriple = tc->originalTargetTriple().toUtf8(); - extra.configuration.append(CMakeConfigItem("CMAKE_C_COMPILER_TARGET", targetTriple)); - extra.configuration.append(CMakeConfigItem("CMAKE_CXX_COMPILER_TARGET ", targetTriple)); - } - } - info.extraInfo = QVariant::fromValue(extra); - return info; }