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 48b3915..3eae54d 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
@@ -90,10 +90,17 @@
       return;
     }
     for (String input : this.outputRootInputs) {
-      PathFragment inputPathFragment = PathFragment.create(input);
-      DerivedArtifact derivedArtifact = artifactsHelper.createOutputArtifact(inputPathFragment);
+      // output_root_inputs are relative to the output_root directory, and we should
+      // pass inside createOutputArtifact() paths, relative to working directory.
+      DerivedArtifact derivedArtifact =
+          artifactsHelper.createOutputArtifact(
+              artifactsHelper
+                  .getOutputRootPath()
+                  .getRelative(input)
+                  .relativeTo(artifactsHelper.getWorkingDirectory()));
+      // This method already expects the path relative to output_root.
       PathFragment absolutePath =
-          artifactsHelper.createAbsolutePathUnderOutputRoot(inputPathFragment);
+          artifactsHelper.createAbsolutePathUnderOutputRoot(PathFragment.create(input));
       SymlinkAction symlinkAction =
           SymlinkAction.toAbsolutePath(
               ruleContext.getActionOwner(),
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaGraphTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaGraphTest.java
index 09703f4..6563072 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaGraphTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaGraphTest.java
@@ -66,14 +66,14 @@
         "build_config/build.ninja",
         "rule echo",
         "  command = echo \"Hello $$(cat ${in})!\" > ${out}",
-        "build hello.txt: echo input.txt");
+        "build build_config/hello.txt: echo build_config/input.txt");
 
+    // Working directory is workspace root.
     ConfiguredTarget configuredTarget =
         scratchConfiguredTarget(
             "",
             "graph",
             "ninja_graph(name = 'graph', output_root = 'build_config',",
-            " working_directory = 'build_config',",
             " main = 'build_config/build.ninja',",
             " output_root_inputs = ['input.txt'])");
     assertThat(configuredTarget).isInstanceOf(RuleConfiguredTarget.class);
@@ -90,7 +90,7 @@
             ninjaAction.getCommandLines().getCommandLines();
         assertThat(commandLines).hasSize(1);
         assertThat(commandLines.get(0).commandLine.toString())
-            .endsWith("cd build_config && echo \"Hello $(cat input.txt)!\" > hello.txt");
+            .endsWith("echo \"Hello $(cat build_config/input.txt)!\" > build_config/hello.txt");
         assertThat(ninjaAction.getPrimaryInput().getExecPathString())
             .isEqualTo("build_config/input.txt");
         assertThat(ninjaAction.getPrimaryOutput().getExecPathString())
