Add argfile to d8/r8 command syntax description
Bug: 149635074
Change-Id: I63b97f93e6a67b83db7156869e2dc29194737fba
diff --git a/src/main/java/com/android/tools/r8/D8CommandParser.java b/src/main/java/com/android/tools/r8/D8CommandParser.java
index fda08a6..f66fff8 100644
--- a/src/main/java/com/android/tools/r8/D8CommandParser.java
+++ b/src/main/java/com/android/tools/r8/D8CommandParser.java
@@ -111,8 +111,9 @@
"\n",
Iterables.concat(
Arrays.asList(
- "Usage: d8 [options] <input-files>",
+ "Usage: d8 [options] [@<argfile>] <input-files>",
" where <input-files> are any combination of dex, class, zip, jar, or apk files",
+ " and each <argfile> is a file containing additional arguments (one per line)",
" and options are:",
" --debug # Compile with debugging information (default).",
" --release # Compile without debugging information.",
@@ -258,6 +259,8 @@
builder.error(new StringDiagnostic("Unknown option: " + arg, origin));
continue;
}
+ } else if (arg.startsWith("@")) {
+ builder.error(new StringDiagnostic("Recursive @argfiles are not supported: ", origin));
} else {
builder.addProgramFiles(Paths.get(arg));
}
diff --git a/src/main/java/com/android/tools/r8/R8CommandParser.java b/src/main/java/com/android/tools/r8/R8CommandParser.java
index f1541bd..22ebb5e 100644
--- a/src/main/java/com/android/tools/r8/R8CommandParser.java
+++ b/src/main/java/com/android/tools/r8/R8CommandParser.java
@@ -52,8 +52,9 @@
"\n",
Iterables.concat(
Arrays.asList(
- "Usage: r8 [options] <input-files>",
+ "Usage: r8 [options] [@<argfile>] <input-files>",
" where <input-files> are any combination of dex, class, zip, jar, or apk files",
+ " and each <argfile> is a file containing additional arguments (one per line)",
" and options are:",
" --release # Compile without debugging information (default).",
" --debug # Compile with debugging information.",
@@ -223,6 +224,8 @@
builder.error(new StringDiagnostic("Unknown option: " + arg, argsOrigin));
continue;
}
+ } else if (arg.startsWith("@")) {
+ builder.error(new StringDiagnostic("Recursive @argfiles are not supported: ", argsOrigin));
} else {
builder.addProgramFiles(Paths.get(arg));
}
diff --git a/src/test/java/com/android/tools/r8/D8CommandTest.java b/src/test/java/com/android/tools/r8/D8CommandTest.java
index fbacef6..14d460e 100644
--- a/src/test/java/com/android/tools/r8/D8CommandTest.java
+++ b/src/test/java/com/android/tools/r8/D8CommandTest.java
@@ -142,6 +142,24 @@
handler).build()));
}
+ @Test(expected = CompilationFailedException.class)
+ public void recursiveFlagsFile() throws Throwable {
+ Path working = temp.getRoot().toPath();
+ Path flagsFile = working.resolve("flags.txt");
+ Path recursiveFlagsFile = working.resolve("recursive_flags.txt");
+ Path input = Paths.get(EXAMPLES_BUILD_DIR + "/arithmetic.jar").toAbsolutePath();
+ FileUtils.writeTextFile(recursiveFlagsFile, "--output", "output.zip");
+ FileUtils.writeTextFile(
+ flagsFile, "--min-api", "24", input.toString(), "@" + recursiveFlagsFile);
+ DiagnosticsChecker.checkErrorsContains(
+ "Recursive @argfiles are not supported",
+ handler ->
+ D8.run(
+ D8Command.parse(
+ new String[] {"@" + flagsFile.toString()}, EmbeddedOrigin.INSTANCE, handler)
+ .build()));
+ }
+
@Test
public void printsHelpOnNoInput() throws Throwable {
ProcessResult result = ToolHelper.forkD8(temp.getRoot().toPath());
diff --git a/src/test/java/com/android/tools/r8/R8CommandTest.java b/src/test/java/com/android/tools/r8/R8CommandTest.java
index cc92bf3..4a703d7 100644
--- a/src/test/java/com/android/tools/r8/R8CommandTest.java
+++ b/src/test/java/com/android/tools/r8/R8CommandTest.java
@@ -143,7 +143,6 @@
assertEquals(Tool.R8, marker.getTool());
}
-
@Test(expected=CompilationFailedException.class)
public void nonExistingFlagsFile() throws Throwable {
Path working = temp.getRoot().toPath();
@@ -157,6 +156,24 @@
handler).build()));
}
+ @Test(expected = CompilationFailedException.class)
+ public void recursiveFlagsFile() throws Throwable {
+ Path working = temp.getRoot().toPath();
+ Path flagsFile = working.resolve("flags.txt");
+ Path recursiveFlagsFile = working.resolve("recursive_flags.txt");
+ Path input = Paths.get(EXAMPLES_BUILD_DIR + "/arithmetic.jar").toAbsolutePath();
+ FileUtils.writeTextFile(recursiveFlagsFile, "--output", "output.zip");
+ FileUtils.writeTextFile(
+ flagsFile, "--min-api", "24", input.toString(), "@" + recursiveFlagsFile);
+ DiagnosticsChecker.checkErrorsContains(
+ "Recursive @argfiles are not supported",
+ handler ->
+ R8.run(
+ R8Command.parse(
+ new String[] {"@" + flagsFile.toString()}, EmbeddedOrigin.INSTANCE, handler)
+ .build()));
+ }
+
@Test
public void printsHelpOnNoInput() throws Throwable {
ProcessResult result = ToolHelper.forkR8(temp.getRoot().toPath());