Support setting R8 dump directory with environment variable

This will allow developers to easily create dumps of R8 compilations (input classfiles, proguard rules, flags, resources...)

Example usage:
$ mkdir /tmp/dumps
$ R8_DUMP_DIRECTORY=/tmp/dumps m -j77 Traceur
This will put the dump for Traceur into the /tmp/dumps directory

If your target has several R8 invocations then dumps for all of these will be generated into the dump directory

Bug: 369931283
Test: R8_DUMP_DIRECTORY=/tmp/dumps m -j77 Traceur
Change-Id: I69be3190c61a98402931767e42184cc01ef25804
diff --git a/java/config/config.go b/java/config/config.go
index 4c1c723..87703d8 100644
--- a/java/config/config.go
+++ b/java/config/config.go
@@ -97,11 +97,19 @@
 		"-JDcom.android.tools.r8.emitRecordAnnotationsInDex",
 		"-JDcom.android.tools.r8.emitPermittedSubclassesAnnotationsInDex",
 	}, dexerJavaVmFlagsList...), " "))
-	pctx.StaticVariable("R8Flags", strings.Join(append([]string{
-		"-JXmx4096M",
-		"-JDcom.android.tools.r8.emitRecordAnnotationsInDex",
-		"-JDcom.android.tools.r8.emitPermittedSubclassesAnnotationsInDex",
-	}, dexerJavaVmFlagsList...), " "))
+
+	pctx.VariableFunc("R8Flags", func(ctx android.PackageVarContext) string {
+		r8flags := append([]string{
+			"-JXmx4096M",
+			"-JDcom.android.tools.r8.emitRecordAnnotationsInDex",
+			"-JDcom.android.tools.r8.emitPermittedSubclassesAnnotationsInDex",
+		}, dexerJavaVmFlagsList...)
+		if r8DumpDir := ctx.Config().Getenv("R8_DUMP_DIRECTORY"); r8DumpDir != "" {
+			r8flags = append(r8flags, "-JDcom.android.tools.r8.dumpinputtodirectory="+r8DumpDir)
+		}
+		return strings.Join(r8flags, " ")
+
+	})
 
 	pctx.StaticVariable("CommonJdkFlags", strings.Join([]string{
 		`-Xmaxerrs 9999999`,