mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-11 16:32:14 -06:00
Swift/Ninja: Include sources in response file
Unlike C/C++, Swift compiles all sources in a module at once. This can quickly overwhelm the commandline length limit on Windows, so it is useful to place the source files in the response file. Issue: #25572
This commit is contained in:
@@ -848,6 +848,14 @@ void cmNinjaTargetGenerator::WriteCompileRule(const std::string& lang,
|
||||
flags = cmStrCat(responseFlag, rule.RspFile);
|
||||
vars.Defines = "";
|
||||
vars.Includes = "";
|
||||
|
||||
// Swift consumes all source files in a module at once, which reaches
|
||||
// command line length limits pretty quickly. Inject source files into the
|
||||
// response file in this case as well.
|
||||
if (lang == "Swift") {
|
||||
rule.RspContent = cmStrCat(rule.RspContent, ' ', vars.Source);
|
||||
vars.Source = "";
|
||||
}
|
||||
}
|
||||
|
||||
// Tell ninja dependency format so all deps can be loaded into a database
|
||||
@@ -1925,8 +1933,6 @@ void cmNinjaTargetGenerator::WriteSwiftObjectBuildStatement(
|
||||
// For that, we need the "NEW" behavior for CMP0157. Otherwise, we have to
|
||||
// fall back on the old "linker" build. Otherwise, this should be
|
||||
// indistinguishable from the old behavior.
|
||||
//
|
||||
// FIXME(#25490): Add response file support to Swift object build step
|
||||
|
||||
if (sources.empty()) {
|
||||
return;
|
||||
|
||||
@@ -48,6 +48,10 @@ std::string& cmPlaceholderExpander::ExpandVariables(std::string& s)
|
||||
}
|
||||
// add the rest of the input
|
||||
expandedInput += s.substr(pos, s.size() - pos);
|
||||
// remove trailing whitespace
|
||||
if (!expandedInput.empty() && expandedInput.back() == ' ') {
|
||||
expandedInput.pop_back();
|
||||
}
|
||||
s = expandedInput;
|
||||
|
||||
return s;
|
||||
|
||||
@@ -1,4 +1,2 @@
|
||||
swiftc [^
|
||||
]* -c @CMakeFiles/L.dir/L.o.swift.rsp [^
|
||||
]*
|
||||
.*swiftc -emit-library -static -o libL.a @CMakeFiles/L.rsp.*
|
||||
swiftc -j [0-9]+ -num-threads [0-9]+ -c @CMakeFiles/L.dir/L.o.swift.rsp
|
||||
.*swiftc -emit-library -static -o libL.a @CMakeFiles/L.rsp
|
||||
|
||||
Reference in New Issue
Block a user