summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Zinkevich <ivan.zinkevich@gmail.com>2023-01-19 17:46:53 (GMT)
committerBrad King <brad.king@kitware.com>2023-01-23 15:38:07 (GMT)
commit33c15ae2b9bf62f7d0870b7ec01b297a29879513 (patch)
tree7ca2cb26e0c011c93a47513f0e867e6406983247
parente107fd0713c93f8b7d5be54552b51b1632b34f8c (diff)
downloadCMake-33c15ae2b9bf62f7d0870b7ec01b297a29879513.zip
CMake-33c15ae2b9bf62f7d0870b7ec01b297a29879513.tar.gz
CMake-33c15ae2b9bf62f7d0870b7ec01b297a29879513.tar.bz2
VS: Build custom commands concurrently when possible
Enable the `BuildInParallel` setting in VS project files when supported. Fixes: #18405
-rw-r--r--Source/cmGlobalVisualStudio10Generator.cxx11
-rw-r--r--Source/cmGlobalVisualStudio10Generator.h1
-rw-r--r--Source/cmVisualStudio10TargetGenerator.cxx8
-rw-r--r--Source/cmVisualStudio10TargetGenerator.h3
4 files changed, 20 insertions, 3 deletions
diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx
index a7a47ef..1e01dd6 100644
--- a/Source/cmGlobalVisualStudio10Generator.cxx
+++ b/Source/cmGlobalVisualStudio10Generator.cxx
@@ -1498,6 +1498,17 @@ bool cmGlobalVisualStudio10Generator::IsMsBuildRestoreSupported() const
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 const& toolset = this->GetPlatformToolsetString();
diff --git a/Source/cmGlobalVisualStudio10Generator.h b/Source/cmGlobalVisualStudio10Generator.h
index 63c21c5..deed206 100644
--- a/Source/cmGlobalVisualStudio10Generator.h
+++ b/Source/cmGlobalVisualStudio10Generator.h
@@ -168,6 +168,7 @@ public:
cmIDEFlagTable const* GetNasmFlagTable() const;
bool IsMsBuildRestoreSupported() const;
+ bool IsBuildInParallelSupported() const;
protected:
cmGlobalVisualStudio10Generator(cmake* cm, const std::string& name,
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx
index ce9a842..5065876 100644
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -1807,7 +1807,8 @@ void cmVisualStudio10TargetGenerator::WriteCustomRule(
outputs.str(), comment, ccg);
} else {
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,
std::string const& additional_inputs, std::string const& outputs,
std::string const& comment, cmCustomCommandGenerator const& ccg,
- bool symbolic)
+ bool symbolic, bool uses_terminal)
{
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("Command", cond, script);
e2.WritePlatformConfigTag("AdditionalInputs", cond, additional_inputs);
diff --git a/Source/cmVisualStudio10TargetGenerator.h b/Source/cmVisualStudio10TargetGenerator.h
index 166cdf7..194fbaa 100644
--- a/Source/cmVisualStudio10TargetGenerator.h
+++ b/Source/cmVisualStudio10TargetGenerator.h
@@ -157,7 +157,8 @@ private:
std::string const& additional_inputs,
std::string const& outputs,
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,
std::string const& commandName,
std::string const& script,