Add backend to dumps
Fixes: b/231424162
Change-Id: Ifd4d7676f104a4ca1f160522cb2840aefefba06b
diff --git a/src/main/java/com/android/tools/r8/BaseCompilerCommand.java b/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
index a233e49..4d1269c 100644
--- a/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
+++ b/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
@@ -21,6 +21,7 @@
import com.android.tools.r8.utils.DumpInputFlags;
import com.android.tools.r8.utils.FileUtils;
import com.android.tools.r8.utils.InternalOptions.DesugarState;
+import com.android.tools.r8.utils.ProgramConsumerUtils;
import com.android.tools.r8.utils.Reporter;
import com.android.tools.r8.utils.ThreadUtils;
import java.nio.file.Path;
@@ -147,6 +148,7 @@
void dumpBaseCommandOptions(DumpOptions.Builder builder) {
builder
+ .setBackend(ProgramConsumerUtils.getBackend(programConsumer))
.setCompilationMode(getMode())
.setMinApi(getMinApiLevel())
.setOptimizeMultidexForLinearAlloc(isOptimizeMultidexForLinearAlloc())
diff --git a/src/main/java/com/android/tools/r8/dump/DumpOptions.java b/src/main/java/com/android/tools/r8/dump/DumpOptions.java
index ef3a443..c8787e5 100644
--- a/src/main/java/com/android/tools/r8/dump/DumpOptions.java
+++ b/src/main/java/com/android/tools/r8/dump/DumpOptions.java
@@ -5,6 +5,7 @@
package com.android.tools.r8.dump;
import com.android.tools.r8.CompilationMode;
+import com.android.tools.r8.dex.Marker.Backend;
import com.android.tools.r8.dex.Marker.Tool;
import com.android.tools.r8.features.FeatureSplitConfiguration;
import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecification;
@@ -28,6 +29,7 @@
// The following keys and values should not be changed to keep the dump utility backward
// compatible with previous versions. They are also used by the python script compileDump and
// the corresponding CompileDumpCompatR8 java class.
+ private static final String BACKEND_KEY = "backend";
private static final String TOOL_KEY = "tool";
private static final String MODE_KEY = "mode";
private static final String DEBUG_MODE_VALUE = "debug";
@@ -48,6 +50,7 @@
private static final String ANDROID_PLATFORM_BUILD = "android-platform-build";
private static final String TRACE_REFERENCES_CONSUMER = "trace_references_consumer";
+ private final Backend backend;
private final Tool tool;
private final CompilationMode compilationMode;
private final int minApi;
@@ -78,6 +81,7 @@
private final boolean dumpInputToFile;
private DumpOptions(
+ Backend backend,
Tool tool,
CompilationMode compilationMode,
int minAPI,
@@ -99,6 +103,7 @@
Map<String, String> systemProperties,
boolean dumpInputToFile,
String traceReferencesConsumer) {
+ this.backend = backend;
this.tool = tool;
this.compilationMode = compilationMode;
this.minApi = minAPI;
@@ -137,6 +142,7 @@
}
if (tool != Tool.TraceReferences) {
// We keep the following values for backward compatibility.
+ addDumpEntry(buildProperties, BACKEND_KEY, backend.name());
addDumpEntry(
buildProperties,
MODE_KEY,
@@ -183,6 +189,9 @@
private static void parseKeyValue(Builder builder, String key, String value) {
switch (key) {
+ case BACKEND_KEY:
+ builder.setBackend(Backend.valueOf(value));
+ return;
case TOOL_KEY:
builder.setTool(Tool.valueOf(value));
return;
@@ -303,6 +312,7 @@
}
public static class Builder {
+ private Backend backend;
private Tool tool;
private CompilationMode compilationMode;
private int minApi;
@@ -333,6 +343,11 @@
public Builder() {}
+ public Builder setBackend(Backend backend) {
+ this.backend = backend;
+ return this;
+ }
+
public Builder setTool(Tool tool) {
this.tool = tool;
return this;
@@ -456,7 +471,9 @@
public DumpOptions build() {
assert tool != null;
+ assert tool == Tool.TraceReferences || backend != null;
return new DumpOptions(
+ backend,
tool,
compilationMode,
minApi,
diff --git a/src/main/java/com/android/tools/r8/utils/ProgramConsumerUtils.java b/src/main/java/com/android/tools/r8/utils/ProgramConsumerUtils.java
new file mode 100644
index 0000000..e33f72e
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/utils/ProgramConsumerUtils.java
@@ -0,0 +1,32 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.utils;
+
+import com.android.tools.r8.ClassFileConsumer;
+import com.android.tools.r8.DexFilePerClassFileConsumer;
+import com.android.tools.r8.DexIndexedConsumer;
+import com.android.tools.r8.ProgramConsumer;
+import com.android.tools.r8.dex.Marker.Backend;
+
+public class ProgramConsumerUtils {
+
+ public static Backend getBackend(ProgramConsumer programConsumer) {
+ if (isGeneratingClassFiles(programConsumer)) {
+ return Backend.CF;
+ } else {
+ assert isGeneratingDex(programConsumer);
+ return Backend.DEX;
+ }
+ }
+
+ public static boolean isGeneratingClassFiles(ProgramConsumer programConsumer) {
+ return programConsumer instanceof ClassFileConsumer;
+ }
+
+ public static boolean isGeneratingDex(ProgramConsumer programConsumer) {
+ return programConsumer instanceof DexIndexedConsumer
+ || programConsumer instanceof DexFilePerClassFileConsumer;
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/AndroidAppDumpsTest.java b/src/test/java/com/android/tools/r8/AndroidAppDumpsTest.java
index 4fda093..88e998c 100644
--- a/src/test/java/com/android/tools/r8/AndroidAppDumpsTest.java
+++ b/src/test/java/com/android/tools/r8/AndroidAppDumpsTest.java
@@ -8,6 +8,7 @@
import com.android.tools.r8.DataResourceProvider.Visitor;
import com.android.tools.r8.ProgramResource.Kind;
+import com.android.tools.r8.dex.Marker;
import com.android.tools.r8.dex.Marker.Tool;
import com.android.tools.r8.dump.DumpOptions;
import com.android.tools.r8.origin.Origin;
@@ -42,7 +43,7 @@
@Test
public void test() throws Exception {
InternalOptions options = new InternalOptions();
- options.dumpOptions = DumpOptions.builder(Tool.D8).build();
+ options.dumpOptions = DumpOptions.builder(Tool.D8).setBackend(Marker.Backend.DEX).build();
String dataResourceName = "my-resource.bin";
byte[] dataResourceData = new byte[] {1, 2, 3};
diff --git a/tools/compiledump.py b/tools/compiledump.py
index 691bdeb..52805f9 100755
--- a/tools/compiledump.py
+++ b/tools/compiledump.py
@@ -289,11 +289,8 @@
return dump.program_jar()
def determine_class_file(args, build_properties):
- if args.classfile:
- return args.classfile
- if 'classfile' in build_properties:
- return True
- return None
+ return args.classfile \
+ or build_properties.get('backend', 'dex').lower() == 'cf'
def determine_android_platform_build(args, build_properties):
if args.android_platform_build: