1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-16 22:37:30 +08:00

VS: Build custom commands concurrently when possible

Enable the `BuildInParallel` setting in VS project files when supported.

Fixes: #18405
This commit is contained in:
Ivan Zinkevich
2023-01-19 21:46:53 +04:00
committed by Brad King
parent e107fd0713
commit 33c15ae2b9
4 changed files with 20 additions and 3 deletions

View File

@@ -1498,6 +1498,17 @@ bool cmGlobalVisualStudio10Generator::IsMsBuildRestoreSupported() const
cmSystemTools::VersionCompareGreaterEq(*vsVer, vsVer15_7_5)); cmSystemTools::VersionCompareGreaterEq(*vsVer, vsVer15_7_5));
} }
bool cmGlobalVisualStudio10Generator::IsBuildInParallelSupported() const
{
if (this->Version >= VSVersion::VS16) {
return true;
}
static std::string const vsVer15_8_0 = "15.8.27705.0";
cm::optional<std::string> vsVer = this->GetVSInstanceVersion();
return (vsVer &&
cmSystemTools::VersionCompareGreaterEq(*vsVer, vsVer15_8_0));
}
std::string cmGlobalVisualStudio10Generator::GetClFlagTableName() const std::string cmGlobalVisualStudio10Generator::GetClFlagTableName() const
{ {
std::string const& toolset = this->GetPlatformToolsetString(); std::string const& toolset = this->GetPlatformToolsetString();

View File

@@ -168,6 +168,7 @@ public:
cmIDEFlagTable const* GetNasmFlagTable() const; cmIDEFlagTable const* GetNasmFlagTable() const;
bool IsMsBuildRestoreSupported() const; bool IsMsBuildRestoreSupported() const;
bool IsBuildInParallelSupported() const;
protected: protected:
cmGlobalVisualStudio10Generator(cmake* cm, const std::string& name, cmGlobalVisualStudio10Generator(cmake* cm, const std::string& name,

View File

@@ -1807,7 +1807,8 @@ void cmVisualStudio10TargetGenerator::WriteCustomRule(
outputs.str(), comment, ccg); outputs.str(), comment, ccg);
} else { } else {
this->WriteCustomRuleCpp(*spe2, c, script, additional_inputs.str(), this->WriteCustomRuleCpp(*spe2, c, script, additional_inputs.str(),
outputs.str(), comment, ccg, symbolic); outputs.str(), comment, ccg, symbolic,
command.GetUsesTerminal());
} }
} }
} }
@@ -1816,9 +1817,12 @@ void cmVisualStudio10TargetGenerator::WriteCustomRuleCpp(
Elem& e2, std::string const& config, std::string const& script, Elem& e2, std::string const& config, std::string const& script,
std::string const& additional_inputs, std::string const& outputs, std::string const& additional_inputs, std::string const& outputs,
std::string const& comment, cmCustomCommandGenerator const& ccg, std::string const& comment, cmCustomCommandGenerator const& ccg,
bool symbolic) bool symbolic, bool uses_terminal)
{ {
const std::string cond = this->CalcCondition(config); const std::string cond = this->CalcCondition(config);
if (this->GlobalGenerator->IsBuildInParallelSupported() && !uses_terminal) {
e2.WritePlatformConfigTag("BuildInParallel", cond, "true");
}
e2.WritePlatformConfigTag("Message", cond, comment); e2.WritePlatformConfigTag("Message", cond, comment);
e2.WritePlatformConfigTag("Command", cond, script); e2.WritePlatformConfigTag("Command", cond, script);
e2.WritePlatformConfigTag("AdditionalInputs", cond, additional_inputs); e2.WritePlatformConfigTag("AdditionalInputs", cond, additional_inputs);

View File

@@ -157,7 +157,8 @@ private:
std::string const& additional_inputs, std::string const& additional_inputs,
std::string const& outputs, std::string const& outputs,
std::string const& comment, std::string const& comment,
cmCustomCommandGenerator const& ccg, bool symbolic); cmCustomCommandGenerator const& ccg, bool symbolic,
bool uses_terminal);
void WriteCustomRuleCSharp(Elem& e0, std::string const& config, void WriteCustomRuleCSharp(Elem& e0, std::string const& config,
std::string const& commandName, std::string const& commandName,
std::string const& script, std::string const& script,