Write Rust deps even if there are only non-Rust ones When Rust target has only non-rust dependencies, currently we would avoid writing depencencies altogether which is not correct. Change-Id: I6c86de8a8a23831a4126e4c46c05fdefe7de2916 Reviewed-on: https://gn-review.googlesource.com/c/gn/+/5860 Reviewed-by: Brett Wilson <brettw@google.com> Commit-Queue: Petr Hosek <phosek@google.com>
diff --git a/tools/gn/ninja_rust_binary_target_writer.cc b/tools/gn/ninja_rust_binary_target_writer.cc index 1e4efbb..5372fec 100644 --- a/tools/gn/ninja_rust_binary_target_writer.cc +++ b/tools/gn/ninja_rust_binary_target_writer.cc
@@ -221,8 +221,9 @@ void NinjaRustBinaryTargetWriter::WriteRustdeps( const std::vector<OutputFile>& rustdeps, const std::vector<OutputFile>& nonrustdeps) { - if (rustdeps.empty()) + if (rustdeps.empty() && nonrustdeps.empty()) return; + out_ << " rustdeps ="; for (const auto& rustdep : rustdeps) { out_ << " -Ldependency=";
diff --git a/tools/gn/ninja_rust_binary_target_writer_unittest.cc b/tools/gn/ninja_rust_binary_target_writer_unittest.cc index 5749c84..90d592b 100644 --- a/tools/gn/ninja_rust_binary_target_writer_unittest.cc +++ b/tools/gn/ninja_rust_binary_target_writer_unittest.cc
@@ -277,24 +277,24 @@ staticlib.SetToolchain(setup.toolchain()); ASSERT_TRUE(staticlib.OnResolved(&err)); - Target target(setup.settings(), Label(SourceDir("//foo/"), "bar")); - target.set_output_type(Target::EXECUTABLE); - target.visibility().SetPublic(); + Target nonrust(setup.settings(), Label(SourceDir("//foo/"), "bar")); + nonrust.set_output_type(Target::EXECUTABLE); + nonrust.visibility().SetPublic(); SourceFile main("//foo/main.rs"); - target.sources().push_back(SourceFile("//foo/source.rs")); - target.sources().push_back(main); - target.source_types_used().Set(SourceFile::SOURCE_RS); - target.rust_values().set_crate_root(main); - target.rust_values().crate_name() = "foo_bar"; - target.rust_values().edition() = "2018"; - target.private_deps().push_back(LabelTargetPair(&rlib)); - target.private_deps().push_back(LabelTargetPair(&staticlib)); - target.SetToolchain(setup.toolchain()); - ASSERT_TRUE(target.OnResolved(&err)); + nonrust.sources().push_back(SourceFile("//foo/source.rs")); + nonrust.sources().push_back(main); + nonrust.source_types_used().Set(SourceFile::SOURCE_RS); + nonrust.rust_values().set_crate_root(main); + nonrust.rust_values().crate_name() = "foo_bar"; + nonrust.rust_values().edition() = "2018"; + nonrust.private_deps().push_back(LabelTargetPair(&rlib)); + nonrust.private_deps().push_back(LabelTargetPair(&staticlib)); + nonrust.SetToolchain(setup.toolchain()); + ASSERT_TRUE(nonrust.OnResolved(&err)); { std::ostringstream out; - NinjaRustBinaryTargetWriter writer(&target, out); + NinjaRustBinaryTargetWriter writer(&nonrust, out); writer.Run(); const char expected[] = @@ -316,6 +316,43 @@ std::string out_str = out.str(); EXPECT_EQ(expected, out_str) << expected << "\n" << out_str; } + + Target nonrust_only(setup.settings(), Label(SourceDir("//foo/"), "bar")); + nonrust_only.set_output_type(Target::EXECUTABLE); + nonrust_only.visibility().SetPublic(); + nonrust_only.sources().push_back(SourceFile("//foo/source.rs")); + nonrust_only.sources().push_back(main); + nonrust_only.source_types_used().Set(SourceFile::SOURCE_RS); + nonrust_only.rust_values().set_crate_root(main); + nonrust_only.rust_values().crate_name() = "foo_bar"; + nonrust_only.rust_values().edition() = "2018"; + nonrust_only.private_deps().push_back(LabelTargetPair(&staticlib)); + nonrust_only.SetToolchain(setup.toolchain()); + ASSERT_TRUE(nonrust_only.OnResolved(&err)); + + { + std::ostringstream out; + NinjaRustBinaryTargetWriter writer(&nonrust_only, out); + writer.Run(); + + const char expected[] = + "crate_name = foo_bar\n" + "crate_type = bin\n" + "output_dir = \n" + "rustc_output_extension = \n" + "rustflags =\n" + "rustenv =\n" + "root_out_dir = .\n" + "target_out_dir = obj/foo\n" + "target_output_name = bar\n" + "\n" + "build obj/foo/foo_bar: rustc ../../foo/main.rs | ../../foo/source.rs " + "../../foo/main.rs obj/foo/libstatic.a\n" + " rustdeps = -Lnative=obj/foo\n" + " edition = 2018\n"; + std::string out_str = out.str(); + EXPECT_EQ(expected, out_str) << expected << "\n" << out_str; + } } TEST_F(NinjaRustBinaryTargetWriterTest, RustOutputExtensionAndDir) {