summaryrefslogtreecommitdiffstats
path: root/jack
diff options
context:
space:
mode:
Diffstat (limited to 'jack')
-rw-r--r--jack/src/com/android/jack/Options.java20
-rw-r--r--jack/src/com/android/jack/experimental/incremental/CompilerState.java21
-rw-r--r--jack/src/com/android/jack/experimental/incremental/JackIncremental.java37
-rw-r--r--jack/tests/com/android/jack/experimental/incremental/DependenciesTest009.java2
-rw-r--r--jack/tests/com/android/jack/experimental/incremental/IncrementalTestingEnvironment.java22
5 files changed, 54 insertions, 48 deletions
diff --git a/jack/src/com/android/jack/Options.java b/jack/src/com/android/jack/Options.java
index 5dd65259..b4ae1360 100644
--- a/jack/src/com/android/jack/Options.java
+++ b/jack/src/com/android/jack/Options.java
@@ -19,6 +19,7 @@ package com.android.jack;
import com.android.jack.backend.dex.FieldInitializerRemover;
import com.android.jack.backend.dex.rop.CodeItemBuilder;
import com.android.jack.config.id.JavaVersionPropertyId;
+import com.android.jack.experimental.incremental.JackIncremental;
import com.android.jack.ir.ast.JMethod;
import com.android.jack.shrob.obfuscation.MappingPrinter;
import com.android.jack.shrob.obfuscation.NameProviderFactory;
@@ -190,6 +191,10 @@ public class Options {
metaVar = "[error | warning | info | debug | trace]")
protected VerbosityLevel verbose = VerbosityLevel.WARNING;
+ @Option(name = "--incremental-folder",
+ usage = "Folder used for incremental data", metaVar = "FILE")
+ protected File incrementalFolder = null;
+
@Option(name = "-o", aliases = "--output",
usage = "output to this dex file (default: ./classes.dex)", metaVar = "FILE")
protected File out = new File("./classes.dex");
@@ -581,6 +586,12 @@ public class Options {
configBuilder.set(
FieldInitializerRemover.STRING_AS_INITIALVALUE_OF_OBJECT, !runtimeLegacy);
+ if (incrementalFolder != null) {
+ configBuilder.set(JackIncremental.GENERATE_COMPILER_STATE, true);
+ configBuilder.setString(JackIncremental.COMPILER_STATE_OUTPUT_DIR,
+ incrementalFolder.getAbsolutePath());
+ }
+
if (tracerDir != null) {
configBuilder.setString(TracerFactory.TRACER, "html");
configBuilder.setString(StatsTracerFtl.TRACER_DIR, tracerDir.getAbsolutePath());
@@ -760,4 +771,13 @@ public class Options {
public List<File> getJayceImport() {
return jayceImport;
}
+
+ @CheckForNull
+ public File getIncrementalFolder() {
+ return incrementalFolder;
+ }
+
+ public void setIncrementalFolder(@Nonnull File incrementalFolder) {
+ this.incrementalFolder = incrementalFolder;
+ }
}
diff --git a/jack/src/com/android/jack/experimental/incremental/CompilerState.java b/jack/src/com/android/jack/experimental/incremental/CompilerState.java
index 225560ff..f2229f81 100644
--- a/jack/src/com/android/jack/experimental/incremental/CompilerState.java
+++ b/jack/src/com/android/jack/experimental/incremental/CompilerState.java
@@ -21,7 +21,9 @@ import com.android.jack.util.TextUtils;
import com.android.sched.item.Description;
import com.android.sched.item.Name;
import com.android.sched.item.Tag;
-import com.android.sched.util.file.Directory;
+import com.android.sched.vfs.OutputVDir;
+import com.android.sched.vfs.OutputVFile;
+import com.android.sched.vfs.VPath;
import java.io.BufferedReader;
import java.io.File;
@@ -72,8 +74,8 @@ public final class CompilerState {
@Nonnull
private final File compilerStateFile;
- public CompilerState(@Nonnull Directory directory) {
- compilerStateFile = new File(directory.getFile(), COMPILER_STATE_FILENAME);
+ public CompilerState(@Nonnull File incrementalFolder) {
+ compilerStateFile = new File(incrementalFolder, COMPILER_STATE_FILENAME);
}
@Nonnull
@@ -125,11 +127,12 @@ public final class CompilerState {
return compilerStateFile.exists();
}
- public void write(@Nonnull Directory directory) throws JackIOException {
- File compilerStateFile = new File(directory.getFile(), COMPILER_STATE_FILENAME);
+ public void write(@Nonnull OutputVDir outputVDir) throws JackIOException {
PrintStream ps = null;
try {
+ OutputVFile compilerStateFile =
+ outputVDir.createOutputVFile(new VPath(COMPILER_STATE_FILENAME, '/'));
StringBuffer sb = new StringBuffer();
writeMap(sb, javaFileToTypeNamePath);
@@ -137,12 +140,14 @@ public final class CompilerState {
writeMap(sb, cstFileToUsedFiles);
writeMap(sb, structFileToUsedFiles);
- ps = new PrintStream(compilerStateFile);
+ ps = new PrintStream(compilerStateFile.openWrite());
ps.print(sb.toString());
-
} catch (FileNotFoundException e) {
throw new JackIOException("Could not write compiler state file to output '"
- + compilerStateFile.getAbsolutePath() + "'", e);
+ + compilerStateFile + "'", e);
+ } catch (IOException e) {
+ throw new JackIOException("Could not write compiler state file to output '"
+ + compilerStateFile + "'", e);
} finally {
if (ps != null) {
ps.close();
diff --git a/jack/src/com/android/jack/experimental/incremental/JackIncremental.java b/jack/src/com/android/jack/experimental/incremental/JackIncremental.java
index 157863db..e13e35e6 100644
--- a/jack/src/com/android/jack/experimental/incremental/JackIncremental.java
+++ b/jack/src/com/android/jack/experimental/incremental/JackIncremental.java
@@ -31,19 +31,17 @@ import com.android.jack.ir.formatter.BinaryQualifiedNameFormatter;
import com.android.jack.ir.formatter.TypeFormatter;
import com.android.jack.load.JackLoadingException;
import com.android.jack.util.TextUtils;
-import com.android.sched.util.RunnableHooks;
import com.android.sched.util.UnrecoverableException;
-import com.android.sched.util.codec.DirectoryCodec;
+import com.android.sched.util.codec.OutputVDirCodec;
import com.android.sched.util.config.ChainedException;
import com.android.sched.util.config.ConfigurationException;
import com.android.sched.util.config.HasKeyId;
-import com.android.sched.util.config.ThreadConfig;
import com.android.sched.util.config.id.BooleanPropertyId;
import com.android.sched.util.config.id.PropertyId;
-import com.android.sched.util.file.Directory;
import com.android.sched.util.file.FileOrDirectory.Existence;
-import com.android.sched.util.file.FileOrDirectory.Permission;
import com.android.sched.util.log.LoggerFactory;
+import com.android.sched.vfs.Container;
+import com.android.sched.vfs.OutputVDir;
import com.android.sched.vfs.VPath;
import java.io.File;
@@ -73,10 +71,10 @@ public class JackIncremental extends CommandLine {
Boolean.FALSE);
@Nonnull
- public static final PropertyId<Directory> COMPILER_STATE_OUTPUT_DIR = PropertyId.create(
+ public static final PropertyId<OutputVDir> COMPILER_STATE_OUTPUT_DIR = PropertyId.create(
"jack.experimental.compilerstate.output.dir", "Compiler state output folder",
- new DirectoryCodec(Existence.MUST_EXIST, Permission.READ | Permission.WRITE))
- .requiredIf(GENERATE_COMPILER_STATE.getValue().isTrue());
+ new OutputVDirCodec(Existence.MAY_EXIST, Container.DIR)).requiredIf(
+ GENERATE_COMPILER_STATE.getValue().isTrue());
@CheckForNull
private static CompilerState compilerState = null;
@@ -161,19 +159,12 @@ public class JackIncremental extends CommandLine {
public static void run(@Nonnull Options options) throws ConfigurationException,
IllegalOptionsException, NothingToDoException, JackUserException {
- RunnableHooks hooks = new RunnableHooks();
- List<String> ecjArgsSave = new ArrayList<String>(options.getEcjArguments());
- options.checkValidity(hooks);
- if (!ecjArgsSave.isEmpty()) {
- options.setEcjArguments(ecjArgsSave);
- }
- ThreadConfig.setConfig(options.getConfig());
+ File incrementalFolder = options.getIncrementalFolder();
+ assert incrementalFolder != null;
- dexFilesFolder = new File(ThreadConfig.get(
- JackIncremental.COMPILER_STATE_OUTPUT_DIR).getFile(), "dexFiles");
+ dexFilesFolder = new File(incrementalFolder, "dexFiles");
- jackFilesFolder = new File(ThreadConfig.get(
- JackIncremental.COMPILER_STATE_OUTPUT_DIR).getFile(), "jackFiles");
+ jackFilesFolder = new File(incrementalFolder, "jackFiles");
// Add options to control incremental support
options.addProperty(Options.GENERATE_ONE_DEX_PER_TYPE.getName(), "true");
@@ -184,7 +175,7 @@ public class JackIncremental extends CommandLine {
assert jackFilesFolder != null;
options.addProperty(Options.JACK_FILE_OUTPUT_DIR.getName(), jackFilesFolder.getAbsolutePath());
- compilerState = new CompilerState(ThreadConfig.get(JackIncremental.COMPILER_STATE_OUTPUT_DIR));
+ compilerState = new CompilerState(incrementalFolder);
if (isIncrementalCompilation(options)) {
logger.log(Level.INFO, "Incremental compilation");
@@ -203,14 +194,12 @@ public class JackIncremental extends CommandLine {
if (!filesToRecompile.isEmpty()) {
logger.log(Level.INFO, "{0} Files to recompile {1}",
new Object[] {Integer.valueOf(filesToRecompile.size()), filesToRecompile});
-
updateOptions(options, filesToRecompile);
- logger.log(Level.INFO, "Update compiler state");
getCompilerState().updateCompilerState(filesToRecompile);
- logger.log(Level.INFO, "Generate {0}", options.getOutputFile());
logger.log(Level.INFO, "Ecj options {0}", options.getEcjArguments());
+
Jack.run(options);
} else {
logger.log(Level.INFO, "No files to recompile");
@@ -441,8 +430,6 @@ public class JackIncremental extends CommandLine {
private static boolean isIncrementalCompilation(@Nonnull Options options) {
if (!options.getEcjArguments().isEmpty()
- && ThreadConfig.get(Options.GENERATE_DEX_FILE).booleanValue()
- && ThreadConfig.get(JackIncremental.GENERATE_COMPILER_STATE).booleanValue()
&& getCompilerState().exists()) {
return true;
}
diff --git a/jack/tests/com/android/jack/experimental/incremental/DependenciesTest009.java b/jack/tests/com/android/jack/experimental/incremental/DependenciesTest009.java
index aec446f5..a736e419 100644
--- a/jack/tests/com/android/jack/experimental/incremental/DependenciesTest009.java
+++ b/jack/tests/com/android/jack/experimental/incremental/DependenciesTest009.java
@@ -57,7 +57,7 @@ public class DependenciesTest009 {
ite.incrementalBuildFromFolder();
- CompilerState csm = new CompilerState(ite.getCompilerStateDirectory());
+ CompilerState csm = new CompilerState(ite.getCompilerStateFolder());
csm.read();
Map<String, Set<String>> dependencies1 = csm.computeDependencies();
diff --git a/jack/tests/com/android/jack/experimental/incremental/IncrementalTestingEnvironment.java b/jack/tests/com/android/jack/experimental/incremental/IncrementalTestingEnvironment.java
index b344bc16..808307b4 100644
--- a/jack/tests/com/android/jack/experimental/incremental/IncrementalTestingEnvironment.java
+++ b/jack/tests/com/android/jack/experimental/incremental/IncrementalTestingEnvironment.java
@@ -21,10 +21,6 @@ import com.android.jack.TestTools;
import com.android.jack.backend.jayce.JayceFileImporter;
import com.android.jack.util.ExecuteFile;
import com.android.jack.util.NamingTools;
-import com.android.sched.util.file.Directory;
-import com.android.sched.util.file.FileOrDirectory.ChangePermission;
-import com.android.sched.util.file.FileOrDirectory.Existence;
-import com.android.sched.util.file.FileOrDirectory.Permission;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -57,7 +53,7 @@ public class IncrementalTestingEnvironment extends TestTools {
PrintStream outRedirectStream = null;
@Nonnull
- private final Directory compilerStateDir;
+ private final File compilerStateDir;
@Nonnull
private final File testingFolder;
@@ -83,11 +79,11 @@ public class IncrementalTestingEnvironment extends TestTools {
throw new IOException("Failed to create folder " + this.sourceFolder.getAbsolutePath());
}
dexFile = new File(testingFolder, "result.dex");
- compilerStateDir =
- new Directory(testingFolder.getAbsolutePath() + File.separatorChar + "compilerState",
- null, Existence.MAY_EXIST, Permission.READ | Permission.WRITE,
- ChangePermission.NOCHANGE);
- jackFolder = new File(compilerStateDir.getFile(), "jackFiles");
+ compilerStateDir = new File(testingFolder, "compileState");
+ if (!compilerStateDir.exists() && !compilerStateDir.mkdir()) {
+ throw new IOException("Failed to create folder " + compilerStateDir.getAbsolutePath());
+ }
+ jackFolder = new File(compilerStateDir, "jackFiles");
}
public void addJavaFile(@Nonnull String packageName, @Nonnull String fileName,
@@ -126,7 +122,7 @@ public class IncrementalTestingEnvironment extends TestTools {
}
@Nonnull
- public Directory getCompilerStateDirectory() {
+ public File getCompilerStateFolder() {
return compilerStateDir;
}
@@ -135,9 +131,7 @@ public class IncrementalTestingEnvironment extends TestTools {
startErrRedirection();
Options options = TestTools.buildCommandLineArgs(testingFolder);
- options.addProperty(JackIncremental.GENERATE_COMPILER_STATE.getName(), "true");
- options.addProperty(JackIncremental.COMPILER_STATE_OUTPUT_DIR.getName(), getCompilerStateDirectory()
- .getFile().getAbsolutePath());
+ options.setIncrementalFolder(getCompilerStateFolder());
compileSourceToDex(options, sourceFolder,
TestTools.getClasspathAsString(TestTools.getDefaultBootclasspath()), dexFile);