diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaActionsHelper.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaActionsHelper.java
index b617204..61a989f 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaActionsHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaActionsHelper.java
@@ -288,7 +288,7 @@
         .forEach((key, value) -> builder.put(key, ImmutableList.of(Pair.of(0L, value))));
     String inNewline =
         target.getUsualInputs().stream()
-            .map(this::getInputPathWithDepsMappingReplacement)
+            .map(PathFragment::getPathString)
             .collect(Collectors.joining("\n"));
     String out =
         target.getOutputs().stream()
@@ -320,12 +320,4 @@
         .modifyExecutionInfo(map, "NinjaRule");
     return map;
   }
-
-  private String getInputPathWithDepsMappingReplacement(PathFragment fragment) {
-    Artifact bazelArtifact = artifactsHelper.getDepsMappingArtifact(fragment);
-    if (bazelArtifact != null) {
-      return bazelArtifact.getPath().getPathString();
-    }
-    return fragment.getPathString();
-  }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaBuild.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaBuild.java
index 11cb1db..48f753d 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaBuild.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaBuild.java
@@ -27,6 +27,7 @@
 import com.google.devtools.build.lib.analysis.RuleContext;
 import com.google.devtools.build.lib.analysis.RunfilesProvider;
 import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
+import com.google.devtools.build.lib.analysis.actions.SymlinkAction;
 import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
 import com.google.devtools.build.lib.bazel.rules.ninja.file.GenericParsingException;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
@@ -63,12 +64,14 @@
         ImmutableSortedMap.naturalOrder();
     createDepsMap(
         ruleContext, graphProvider.getWorkingDirectory(), depsMapBuilder, symlinksMapBuilder);
+
+    ImmutableSortedMap<PathFragment, Artifact> depsMap = depsMapBuilder.build();
+
     NinjaGraphArtifactsHelper artifactsHelper =
         new NinjaGraphArtifactsHelper(
             ruleContext,
             graphProvider.getOutputRoot(),
             graphProvider.getWorkingDirectory(),
-            depsMapBuilder.build(),
             symlinksMapBuilder.build(),
             graphProvider.getOutputRootSymlinks());
     if (ruleContext.hasErrors()) {
@@ -76,8 +79,16 @@
     }
 
     try {
+      symlinkDepsMappings(ruleContext, artifactsHelper, depsMap);
+
       PhonyTargetArtifacts phonyTargetArtifacts =
           new PhonyTargetArtifacts(graphProvider.getPhonyTargetsMap(), artifactsHelper);
+      ImmutableSet<PathFragment> symlinks =
+          ImmutableSet.<PathFragment>builder()
+              .addAll(graphProvider.getOutputRootInputsSymlinks())
+              .addAll(depsMap.keySet())
+              .build();
+
       new NinjaActionsHelper(
               ruleContext,
               artifactsHelper,
@@ -85,7 +96,7 @@
               graphProvider.getPhonyTargetsMap(),
               phonyTargetArtifacts,
               pathsToBuild,
-              graphProvider.getOutputRootInputsSymlinks())
+              symlinks)
           .createNinjaActions();
 
       if (!checkOrphanArtifacts(ruleContext)) {
@@ -121,6 +132,28 @@
     }
   }
 
+  private static void symlinkDepsMappings(
+      RuleContext ruleContext,
+      NinjaGraphArtifactsHelper artifactsHelper,
+      ImmutableSortedMap<PathFragment, Artifact> depsMap)
+      throws GenericParsingException {
+    for (Map.Entry<PathFragment, Artifact> entry : depsMap.entrySet()) {
+      PathFragment depPath = entry.getKey();
+      Artifact destinationArtifact = entry.getValue();
+      Artifact outputArtifact = artifactsHelper.createOutputArtifact(depPath);
+
+      SymlinkAction symlinkAction =
+          SymlinkAction.toArtifact(
+              ruleContext.getActionOwner(),
+              destinationArtifact,
+              outputArtifact,
+              String.format(
+                  "Symlinking deps_mapping entry '%s' to '%s'",
+                  destinationArtifact.getExecPath(), outputArtifact.getExecPath()));
+      ruleContext.registerAction(symlinkAction);
+    }
+  }
+
   private static boolean checkOrphanArtifacts(RuleContext ruleContext) {
     ImmutableSet<Artifact> orphanArtifacts =
         ruleContext.getAnalysisEnvironment().getOrphanArtifacts();
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraph.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraph.java
index bea9f17..72e905d 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraph.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraph.java
@@ -103,7 +103,6 @@
             outputRoot,
             workingDirectory,
             ImmutableSortedMap.of(),
-            ImmutableSortedMap.of(),
             ImmutableSortedSet.of());
     if (ruleContext.hasErrors()) {
       return null;
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraphArtifactsHelper.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraphArtifactsHelper.java
index 6f2f1d5..3f581f9 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraphArtifactsHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraphArtifactsHelper.java
@@ -41,7 +41,6 @@
   private final PathFragment workingDirectory;
   private final ArtifactRoot derivedOutputRoot;
 
-  private final ImmutableSortedMap<PathFragment, Artifact> depsNameToArtifact;
   private final ImmutableSortedMap<PathFragment, Artifact> symlinkPathToArtifact;
   private final ImmutableSortedSet<PathFragment> outputRootSymlinks;
 
@@ -52,7 +51,6 @@
    * @param outputRootPath name of output directory for Ninja actions under execroot
    * @param workingDirectory relative path under execroot, the root for interpreting all paths in
    *     Ninja file
-   * @param depsNameToArtifact mapping between the path fragment in the Ninja file and prebuilt
    * @param symlinkPathToArtifact mapping of paths to artifacts for input symlinks under output_root
    * @param outputRootSymlinks list of output paths for which symlink artifacts should be created,
    *     paths are relative to the output_root.
@@ -61,13 +59,11 @@
       RuleContext ruleContext,
       PathFragment outputRootPath,
       PathFragment workingDirectory,
-      ImmutableSortedMap<PathFragment, Artifact> depsNameToArtifact,
       ImmutableSortedMap<PathFragment, Artifact> symlinkPathToArtifact,
       ImmutableSortedSet<PathFragment> outputRootSymlinks) {
     this.ruleContext = ruleContext;
     this.outputRootPath = outputRootPath;
     this.workingDirectory = workingDirectory;
-    this.depsNameToArtifact = depsNameToArtifact;
     this.symlinkPathToArtifact = symlinkPathToArtifact;
     this.outputRootSymlinks = outputRootSymlinks;
     Path execRoot =
@@ -98,10 +94,6 @@
   }
 
   Artifact getInputArtifact(PathFragment workingDirectoryPath) throws GenericParsingException {
-    if (depsNameToArtifact.containsKey(workingDirectoryPath)) {
-      return depsNameToArtifact.get(workingDirectoryPath);
-    }
-
     if (symlinkPathToArtifact.containsKey(workingDirectoryPath)) {
       return symlinkPathToArtifact.get(workingDirectoryPath);
     }
@@ -144,10 +136,6 @@
             execPath, ruleContext.getRule().getPackage().getSourceRoot());
   }
 
-  public Artifact getDepsMappingArtifact(PathFragment fragment) {
-    return depsNameToArtifact.get(fragment);
-  }
-
   public PathFragment getOutputRootPath() {
     return outputRootPath;
   }
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaBuildTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaBuildTest.java
index 4d7e5d3..58ffb23 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaBuildTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaBuildTest.java
@@ -25,6 +25,7 @@
 import com.google.devtools.build.lib.actions.CommandLines.CommandLineAndParamFileInfo;
 import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
 import com.google.devtools.build.lib.analysis.ConfiguredTarget;
+import com.google.devtools.build.lib.analysis.actions.SymlinkAction;
 import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget;
 import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
 import com.google.devtools.build.lib.bazel.rules.ninja.actions.NinjaAction;
@@ -279,17 +280,24 @@
     assertThat(configuredTarget).isInstanceOf(RuleConfiguredTarget.class);
     RuleConfiguredTarget ninjaConfiguredTarget = (RuleConfiguredTarget) configuredTarget;
     ImmutableList<ActionAnalysisMetadata> actions = ninjaConfiguredTarget.getActions();
-    assertThat(actions).hasSize(1);
+    assertThat(actions).hasSize(2);
 
-    ActionAnalysisMetadata action = Iterables.getOnlyElement(actions);
+    ActionAnalysisMetadata symlinkAction = actions.get(0);
+    assertThat(symlinkAction).isInstanceOf(SymlinkAction.class);
+    assertThat(symlinkAction.getPrimaryInput().getExecPathString()).isEqualTo("input.txt");
+    assertThat(symlinkAction.getPrimaryOutput().getExecPathString())
+        .isEqualTo("build_config/placeholder");
+
+    ActionAnalysisMetadata action = actions.get(1);
     assertThat(action).isInstanceOf(NinjaAction.class);
     NinjaAction ninjaAction = (NinjaAction) action;
     List<CommandLineAndParamFileInfo> commandLines =
         ninjaAction.getCommandLines().getCommandLines();
     assertThat(commandLines).hasSize(1);
     assertThat(commandLines.get(0).commandLine.toString())
-        .endsWith("cd build_config && echo \"Hello $(cat /workspace/input.txt)!\" > hello.txt");
-    assertThat(ninjaAction.getPrimaryInput().getExecPathString()).isEqualTo("input.txt");
+        .endsWith("cd build_config && echo \"Hello $(cat placeholder)!\" > hello.txt");
+    assertThat(ninjaAction.getPrimaryInput().getExecPathString())
+        .isEqualTo("build_config/placeholder");
     assertThat(ninjaAction.getPrimaryOutput().getExecPathString())
         .isEqualTo("build_config/hello.txt");
   }
diff --git a/src/test/java/com/google/devtools/build/lib/blackbox/tests/NinjaBlackBoxTest.java b/src/test/java/com/google/devtools/build/lib/blackbox/tests/NinjaBlackBoxTest.java
index a8a415b..791ee82 100644
--- a/src/test/java/com/google/devtools/build/lib/blackbox/tests/NinjaBlackBoxTest.java
+++ b/src/test/java/com/google/devtools/build/lib/blackbox/tests/NinjaBlackBoxTest.java
@@ -493,12 +493,14 @@
     Exception exception = assertThrows(Exception.class, () -> bazel.build("//..."));
     assertThat(exception)
         .hasMessageThat()
-        .contains("ERROR: file 'a' is generated by these conflicting actions:");
+        .contains("ERROR: file 'a.txt' is generated by these conflicting actions:");
     assertThat(exception)
         .hasMessageThat()
         .contains(
-            "for a, previous action: action 'running Ninja targets: 'a'', "
-                + "attempted action: action 'running Ninja targets: 'a''");
+            "for a.txt, previous action: action "
+                + "'Symlinking deps_mapping entry 'variant1.txt' to 'build_dir/a.txt'', "
+                + "attempted action: action "
+                + "'Symlinking deps_mapping entry 'variant2.txt' to 'build_dir/a.txt''");
   }
 
   @Test
