Avoid duplicating -Lnative rustc arguments.
Change-Id: I4d7326328944c2c1417915487883949cdebabc8f
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/8180
Reviewed-by: Petr Hosek <phosek@google.com>
Commit-Queue: Petr Hosek <phosek@google.com>
diff --git a/src/gn/ninja_rust_binary_target_writer.cc b/src/gn/ninja_rust_binary_target_writer.cc
index c8f8e43..8a907bb 100644
--- a/src/gn/ninja_rust_binary_target_writer.cc
+++ b/src/gn/ninja_rust_binary_target_writer.cc
@@ -265,11 +265,18 @@
const std::string_view lib_prefix("lib");
// Non-Rust native dependencies.
+ UniqueVector<SourceDir> nonrustdep_dirs;
for (const auto& nonrustdep : nonrustdeps) {
+ nonrustdep_dirs.push_back(
+ nonrustdep.AsSourceFile(settings_->build_settings()).GetDir());
+ }
+ // First -Lnative to specify search directories
+ for (const auto& nonrustdep_dir : nonrustdep_dirs) {
out_ << " -Lnative=";
- path_output_.WriteDir(
- out_, nonrustdep.AsSourceFile(settings_->build_settings()).GetDir(),
- PathOutput::DIR_NO_LAST_SLASH);
+ path_output_.WriteDir(out_, nonrustdep_dir, PathOutput::DIR_NO_LAST_SLASH);
+ }
+ // Now the dependencies themselves.
+ for (const auto& nonrustdep : nonrustdeps) {
std::string_view file = FindFilenameNoExtension(&nonrustdep.value());
if (!file.compare(0, lib_prefix.size(), lib_prefix)) {
out_ << " -l";
diff --git a/src/gn/ninja_rust_binary_target_writer_unittest.cc b/src/gn/ninja_rust_binary_target_writer_unittest.cc
index 4d7d114..ded290a 100644
--- a/src/gn/ninja_rust_binary_target_writer_unittest.cc
+++ b/src/gn/ninja_rust_binary_target_writer_unittest.cc
@@ -448,8 +448,8 @@
"../../foo/main.rs obj/bar/libmylib.rlib obj/foo/libstatic.a "
"./libshared.so ./libshared_with_toc.so.TOC\n"
" externs = --extern mylib=obj/bar/libmylib.rlib\n"
- " rustdeps = -Ldependency=obj/bar -Lnative=obj/foo -lstatic "
- "-Lnative=. -lshared -Lnative=. -lshared_with_toc\n";
+ " rustdeps = -Ldependency=obj/bar -Lnative=obj/foo -Lnative=. "
+ "-lstatic -lshared -lshared_with_toc\n";
std::string out_str = out.str();
EXPECT_EQ(expected, out_str) << expected << "\n" << out_str;
}