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;
   }