Pass the classpath to dex2oat.

This makes it possible to run applications that have multiple
dex files on the classpath.

Change-Id: I15264a001a46ddb253e87f2739e6b9644348f1be
diff --git a/src/compiler.cc b/src/compiler.cc
index 0a4117d..fabd8fd 100644
--- a/src/compiler.cc
+++ b/src/compiler.cc
@@ -82,13 +82,24 @@
   }
 }
 
-void Compiler::CompileAll(const ClassLoader* class_loader) {
+void Compiler::CompileAll(const ClassLoader* class_loader,
+    const std::vector<const DexFile*>& dex_files) {
   DCHECK(!Runtime::Current()->IsStarted());
-  Resolve(class_loader);
-  Verify(class_loader);
-  InitializeClassesWithoutClinit(class_loader);
-  Compile(class_loader);
-  SetCodeAndDirectMethods(class_loader);
+  for (size_t i = 0; i != dex_files.size(); ++i) {
+    ResolveDexFile(class_loader, *dex_files[i]);
+  }
+  for (size_t i = 0; i != dex_files.size(); ++i) {
+    VerifyDexFile(class_loader, *dex_files[i]);
+  }
+  for (size_t i = 0; i != dex_files.size(); ++i) {
+    InitializeClassesWithoutClinit(class_loader, *dex_files[i]);
+  }
+  for (size_t i = 0; i != dex_files.size(); ++i) {
+    CompileDexFile(class_loader, *dex_files[i]);
+  }
+  for (size_t i = 0; i != dex_files.size(); ++i) {
+    SetCodeAndDirectMethodsDexFile(*dex_files[i]);
+  }
 }
 
 void Compiler::CompileOne(const Method* method) {