Allow WriteCompilerBuildLine to take multiple source files Some compilers (notably swiftc) need to be passed the full list of source files in a single invocation, thus needs to be passed a list of files. Since the generated ninja output is similar in both case, change WriteCompilerBuildLine to take a std::vector<> of SourceFile instead of a single instance. Bug: 121 Change-Id: I4df2976aa82b57ba5a23ad05be52bce1321100ce Reviewed-on: https://gn-review.googlesource.com/c/gn/+/9460 Commit-Queue: Brett Wilson <brettw@chromium.org> Reviewed-by: Brett Wilson <brettw@chromium.org>
diff --git a/src/gn/ninja_binary_target_writer.cc b/src/gn/ninja_binary_target_writer.cc index 4379ca0..da7733b 100644 --- a/src/gn/ninja_binary_target_writer.cc +++ b/src/gn/ninja_binary_target_writer.cc
@@ -255,7 +255,7 @@ } void NinjaBinaryTargetWriter::WriteCompilerBuildLine( - const SourceFile& source, + const std::vector<SourceFile>& sources, const std::vector<OutputFile>& extra_deps, const std::vector<OutputFile>& order_only_deps, const char* tool_name, @@ -264,8 +264,7 @@ path_output_.WriteFiles(out_, outputs); out_ << ": " << rule_prefix_ << tool_name; - out_ << " "; - path_output_.WriteFile(out_, source); + path_output_.WriteFiles(out_, sources); if (!extra_deps.empty()) { out_ << " |";
diff --git a/src/gn/ninja_binary_target_writer.h b/src/gn/ninja_binary_target_writer.h index 50d1151..a9d10d5 100644 --- a/src/gn/ninja_binary_target_writer.h +++ b/src/gn/ninja_binary_target_writer.h
@@ -57,7 +57,7 @@ OutputFile WriteStampAndGetDep(const UniqueVector<const SourceFile*>& files, const std::string& stamp_ext) const; - void WriteCompilerBuildLine(const SourceFile& source, + void WriteCompilerBuildLine(const std::vector<SourceFile>& sources, const std::vector<OutputFile>& extra_deps, const std::vector<OutputFile>& order_only_deps, const char* tool_name,
diff --git a/src/gn/ninja_c_binary_target_writer.cc b/src/gn/ninja_c_binary_target_writer.cc index 2773577..721b67c 100644 --- a/src/gn/ninja_c_binary_target_writer.cc +++ b/src/gn/ninja_c_binary_target_writer.cc
@@ -312,7 +312,7 @@ std::back_inserter(extra_deps)); // Build line to compile the file. - WriteCompilerBuildLine(target_->config_values().precompiled_source(), + WriteCompilerBuildLine({target_->config_values().precompiled_source()}, extra_deps, order_only_deps, tool_name, outputs); // This build line needs a custom language-specific flags value. Rule-specific @@ -364,7 +364,7 @@ std::back_inserter(extra_deps)); // Build line to compile the file. - WriteCompilerBuildLine(target_->config_values().precompiled_source(), + WriteCompilerBuildLine({target_->config_values().precompiled_source()}, extra_deps, order_only_deps, tool_name, outputs); // This build line needs a custom language-specific flags value. Rule-specific @@ -433,7 +433,7 @@ } } } - WriteCompilerBuildLine(source, deps, order_only_deps, tool_name, + WriteCompilerBuildLine({source}, deps, order_only_deps, tool_name, tool_outputs); }
diff --git a/src/gn/ninja_rust_binary_target_writer.cc b/src/gn/ninja_rust_binary_target_writer.cc index 74371e0..70b0f1d 100644 --- a/src/gn/ninja_rust_binary_target_writer.cc +++ b/src/gn/ninja_rust_binary_target_writer.cc
@@ -188,7 +188,7 @@ std::vector<OutputFile> tool_outputs; SubstitutionWriter::ApplyListToLinkerAsOutputFile( target_, tool_, tool_->outputs(), &tool_outputs); - WriteCompilerBuildLine(target_->rust_values().crate_root(), + WriteCompilerBuildLine({target_->rust_values().crate_root()}, implicit_deps.vector(), order_only_deps, tool_->name(), tool_outputs);
diff --git a/src/gn/path_output.cc b/src/gn/path_output.cc index ff9a5bc..c89e061 100644 --- a/src/gn/path_output.cc +++ b/src/gn/path_output.cc
@@ -75,6 +75,14 @@ } void PathOutput::WriteFiles(std::ostream& out, + const std::vector<SourceFile>& files) const { + for (const auto& file : files) { + out << " "; + WriteFile(out, file); + } +} + +void PathOutput::WriteFiles(std::ostream& out, const std::vector<OutputFile>& files) const { for (const auto& file : files) { out << " ";
diff --git a/src/gn/path_output.h b/src/gn/path_output.h index a815308..729ba98 100644 --- a/src/gn/path_output.h +++ b/src/gn/path_output.h
@@ -53,8 +53,9 @@ void WriteFile(std::ostream& out, const OutputFile& file) const; void WriteFile(std::ostream& out, const base::FilePath& file) const; - // Writes the given OutputFiles with spaces separating them. This will also - // write an initial space before the first item. + // Writes the given SourceFiles/OutputFiles with spaces separating them. This + // will also write an initial space before the first item. + void WriteFiles(std::ostream& out, const std::vector<SourceFile>& file) const; void WriteFiles(std::ostream& out, const std::vector<OutputFile>& files) const; void WriteFiles(std::ostream& out,