summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2023-02-21 13:46:51 (GMT)
committerKitware Robot <kwrobot@kitware.com>2023-02-21 13:47:00 (GMT)
commitad8ada1bee0bb0d58e893979229f4966baf35b39 (patch)
treea90f817ecd475b5db7733f85292754dbd764b55c
parentc2897eb72551e766c300c84a5a51b5a8cf97b81b (diff)
parent2b713b0f9590831e24c8771768ffd0710c7198ce (diff)
downloadCMake-ad8ada1bee0bb0d58e893979229f4966baf35b39.zip
CMake-ad8ada1bee0bb0d58e893979229f4966baf35b39.tar.gz
CMake-ad8ada1bee0bb0d58e893979229f4966baf35b39.tar.bz2
Merge topic 'KateNinjaImprovements'
2b713b0f95 Kate: mention Ninja Multiconfig in the docs f6f8f89e6c Kate: support for the targets of multi config ninja 0429a37e48 Kate: enable the ninja multiconfig generator for kate Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Merge-request: !8226
-rw-r--r--Help/generator/Kate.rst3
-rw-r--r--Source/cmExtraKateGenerator.cxx67
-rw-r--r--Source/cmExtraKateGenerator.h2
3 files changed, 45 insertions, 27 deletions
diff --git a/Help/generator/Kate.rst b/Help/generator/Kate.rst
index d12723b..11354f2 100644
--- a/Help/generator/Kate.rst
+++ b/Help/generator/Kate.rst
@@ -28,5 +28,8 @@ This "extra" generator may be specified as:
``Kate - Ninja``
Generate with :generator:`Ninja`.
+``Kate - Ninja Multi-Config``
+ Generate with :generator:`Ninja Multi-Config`.
+
``Kate - Unix Makefiles``
Generate with :generator:`Unix Makefiles`.
diff --git a/Source/cmExtraKateGenerator.cxx b/Source/cmExtraKateGenerator.cxx
index a128a8b..6e6d009 100644
--- a/Source/cmExtraKateGenerator.cxx
+++ b/Source/cmExtraKateGenerator.cxx
@@ -35,6 +35,7 @@ cmExternalMakefileProjectGeneratorFactory* cmExtraKateGenerator::GetFactory()
// factory.AddSupportedGlobalGenerator("MSYS Makefiles");
#endif
factory.AddSupportedGlobalGenerator("Ninja");
+ factory.AddSupportedGlobalGenerator("Ninja Multi-Config");
factory.AddSupportedGlobalGenerator("Unix Makefiles");
}
@@ -48,7 +49,9 @@ void cmExtraKateGenerator::Generate()
this->ProjectName = this->GenerateProjectName(
lg->GetProjectName(), mf->GetSafeDefinition("CMAKE_BUILD_TYPE"),
this->GetPathBasename(lg->GetBinaryDirectory()));
- this->UseNinja = (this->GlobalGenerator->GetName() == "Ninja");
+ this->UseNinja =
+ ((this->GlobalGenerator->GetName() == "Ninja") ||
+ (this->GlobalGenerator->GetName() == "Ninja Multi-Config"));
this->CreateKateProjectFile(*lg);
this->CreateDummyKateProjectFile(*lg);
@@ -82,6 +85,7 @@ void cmExtraKateGenerator::WriteTargets(const cmLocalGenerator& lg,
const std::string& makeArgs =
mf->GetSafeDefinition("CMAKE_KATE_MAKE_ARGUMENTS");
std::string const& homeOutputDir = lg.GetBinaryDirectory();
+ const auto configs = mf->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig);
/* clang-format off */
fout <<
@@ -105,16 +109,16 @@ void cmExtraKateGenerator::WriteTargets(const cmLocalGenerator& lg,
// this is for kate >= 4.13:
fout << "\t\t\"targets\":[\n";
- this->AppendTarget(fout, "all", make, makeArgs, homeOutputDir,
+ this->AppendTarget(fout, "all", configs, make, makeArgs, homeOutputDir,
homeOutputDir);
- this->AppendTarget(fout, "clean", make, makeArgs, homeOutputDir,
+ this->AppendTarget(fout, "clean", configs, make, makeArgs, homeOutputDir,
homeOutputDir);
// add all executable and library targets and some of the GLOBAL
// and UTILITY targets
for (const auto& localGen : this->GlobalGenerator->GetLocalGenerators()) {
const auto& targets = localGen->GetGeneratorTargets();
- std::string currentDir = localGen->GetCurrentBinaryDirectory();
+ const std::string currentDir = localGen->GetCurrentBinaryDirectory();
bool topLevel = (currentDir == localGen->GetBinaryDirectory());
for (const auto& target : targets) {
@@ -138,8 +142,8 @@ void cmExtraKateGenerator::WriteTargets(const cmLocalGenerator& lg,
}
}
if (insertTarget) {
- this->AppendTarget(fout, targetName, make, makeArgs, currentDir,
- homeOutputDir);
+ this->AppendTarget(fout, targetName, configs, make, makeArgs,
+ currentDir, homeOutputDir);
}
} break;
case cmStateEnums::UTILITY:
@@ -154,19 +158,21 @@ void cmExtraKateGenerator::WriteTargets(const cmLocalGenerator& lg,
break;
}
- this->AppendTarget(fout, targetName, make, makeArgs, currentDir,
- homeOutputDir);
+ this->AppendTarget(fout, targetName, configs, make, makeArgs,
+ currentDir, homeOutputDir);
break;
case cmStateEnums::EXECUTABLE:
case cmStateEnums::STATIC_LIBRARY:
case cmStateEnums::SHARED_LIBRARY:
case cmStateEnums::MODULE_LIBRARY:
case cmStateEnums::OBJECT_LIBRARY: {
- this->AppendTarget(fout, targetName, make, makeArgs, currentDir,
- homeOutputDir);
- std::string fastTarget = cmStrCat(targetName, "/fast");
- this->AppendTarget(fout, fastTarget, make, makeArgs, currentDir,
- homeOutputDir);
+ this->AppendTarget(fout, targetName, configs, make, makeArgs,
+ currentDir, homeOutputDir);
+ if (!this->UseNinja) {
+ std::string fastTarget = cmStrCat(targetName, "/fast");
+ this->AppendTarget(fout, fastTarget, configs, make, makeArgs,
+ currentDir, homeOutputDir);
+ }
} break;
default:
@@ -179,29 +185,36 @@ void cmExtraKateGenerator::WriteTargets(const cmLocalGenerator& lg,
std::vector<std::string> objectFileTargets;
localGen->GetIndividualFileTargets(objectFileTargets);
for (std::string const& f : objectFileTargets) {
- this->AppendTarget(fout, f, make, makeArgs, currentDir, homeOutputDir);
+ this->AppendTarget(fout, f, configs, make, makeArgs, currentDir,
+ homeOutputDir);
}
}
fout << "\t] }\n";
}
-void cmExtraKateGenerator::AppendTarget(cmGeneratedFileStream& fout,
- const std::string& target,
- const std::string& make,
- const std::string& makeArgs,
- const std::string& path,
- const std::string& homeOutputDir) const
+void cmExtraKateGenerator::AppendTarget(
+ cmGeneratedFileStream& fout, const std::string& target,
+ const std::vector<std::string>& configs, const std::string& make,
+ const std::string& makeArgs, const std::string& path,
+ const std::string& homeOutputDir) const
{
static char JsonSep = ' ';
- fout << "\t\t\t" << JsonSep << R"({"name":")" << target
- << "\", "
- "\"build_cmd\":\""
- << make << " -C \\\"" << (this->UseNinja ? homeOutputDir : path)
- << "\\\" " << makeArgs << " " << target << "\"}\n";
-
- JsonSep = ',';
+ for (const std::string& conf : configs) {
+ fout << "\t\t\t" << JsonSep << R"({"name":")" << target
+ << ((configs.size() > 1) ? (std::string(":") + conf) : std::string())
+ << "\", "
+ "\"build_cmd\":\""
+ << make << " -C \\\"" << (this->UseNinja ? homeOutputDir : path)
+ << "\\\" "
+ << ((this->UseNinja && configs.size() > 1)
+ ? std::string(" -f build-") + conf + ".ninja"
+ : std::string())
+ << makeArgs << " " << target << "\"}\n";
+
+ JsonSep = ',';
+ }
}
void cmExtraKateGenerator::CreateDummyKateProjectFile(
diff --git a/Source/cmExtraKateGenerator.h b/Source/cmExtraKateGenerator.h
index c66ddbf..203fa2f 100644
--- a/Source/cmExtraKateGenerator.h
+++ b/Source/cmExtraKateGenerator.h
@@ -5,6 +5,7 @@
#include "cmConfigure.h" // IWYU pragma: keep
#include <string>
+#include <vector>
#include "cmExternalMakefileProjectGenerator.h"
@@ -29,6 +30,7 @@ private:
void WriteTargets(const cmLocalGenerator& lg,
cmGeneratedFileStream& fout) const;
void AppendTarget(cmGeneratedFileStream& fout, const std::string& target,
+ const std::vector<std::string>& configs,
const std::string& make, const std::string& makeArgs,
const std::string& path,
const std::string& homeOutputDir) const;