diff --git a/implementations/Crafter.Build-External.cpp b/implementations/Crafter.Build-External.cpp index e2a6e74..9fb1903 100644 --- a/implementations/Crafter.Build-External.cpp +++ b/implementations/Crafter.Build-External.cpp @@ -210,7 +210,13 @@ std::string ConfigureCMake(const fs::path& cloneDir, const fs::path& cmakeBuildD } std::string BuildCMake(const fs::path& cmakeBuildDir) { - std::string cmd = std::format("cmake --build {}", ShellQuote(fs::absolute(cmakeBuildDir).string())); + // Without --parallel, the Unix Makefiles generator builds one translation + // unit at a time, leaving every core but one idle. Pass an explicit job + // count (a bare --parallel maps to an unbounded `make -j` fork bomb on the + // Makefiles generator) so deps like DPP/msquic/glslang compile ~NĂ— faster. + unsigned jobs = std::max(1u, std::thread::hardware_concurrency()); + std::string cmd = std::format("cmake --build {} --parallel {}", + ShellQuote(fs::absolute(cmakeBuildDir).string()), jobs); CommandResult r = RunCommandChecked(cmd); if (r.exitCode != 0) { return std::format("cmake --build failed (exit {}): {}", r.exitCode, r.output);