Add -v and -save-temps

Change-Id: I4bb6d41f6ac45880e09e76398bff8deaf7b6a280
diff --git a/tests/abcc/jni/Abcc.cpp b/tests/abcc/jni/Abcc.cpp
index ed2df3c..7285be8 100644
--- a/tests/abcc/jni/Abcc.cpp
+++ b/tests/abcc/jni/Abcc.cpp
@@ -134,8 +134,8 @@
 }
 
 
-BitcodeCompiler::BitcodeCompiler(const std::string &abi, const std::string &sysroot, const std::string &working_dir)
-  : mAbi(abi), mSysroot(sysroot), mWorkingDir(working_dir), mRet(RET_OK) {
+BitcodeCompiler::BitcodeCompiler(const std::string &abi, const std::string &sysroot, const std::string &working_dir, const bool savetemps)
+  : mAbi(abi), mSysroot(sysroot), mWorkingDir(working_dir), mRet(RET_OK), mSaveTemps(savetemps) {
   // CFlags
   mGlobalCFlags = kGlobalTargetAttrs[mAbi].mBaseCFlags;
   mGlobalCFlags += std::string(" -mtriple=") + kGlobalTargetAttrs[mAbi].mTriple;
@@ -173,8 +173,8 @@
       mRet = RET_FAIL_TRANSLATE;
       return;
     }
-
-    removeIntermediateFile(bc.mBCPath);
+    if (!mSaveTemps)
+      removeIntermediateFile(bc.mBCPath);
   }
 }
 
@@ -197,8 +197,8 @@
       mRet = RET_FAIL_COMPILE;
       return;
     }
-
-    removeIntermediateFile(bc.mTargetBCPath);
+    if (!mSaveTemps)
+      removeIntermediateFile(bc.mTargetBCPath);
   }
 }
 
@@ -237,7 +237,8 @@
           return;
 
         copyRuntime(bc);
-        removeIntermediateFile(bc.mObjPath);
+        if (!mSaveTemps)
+          removeIntermediateFile(bc.mObjPath);
 
         mSonameMap.erase(i);
         BitcodeInfo::dropExternalLDLibs(mSonameMap);
diff --git a/tests/abcc/jni/Abcc.h b/tests/abcc/jni/Abcc.h
index 0d9655a..8f9e779 100644
--- a/tests/abcc/jni/Abcc.h
+++ b/tests/abcc/jni/Abcc.h
@@ -137,7 +137,7 @@
   std::string mExecutableToolsPath[(unsigned)CMD_LINK_RUNTIME+1];
 
 public:
-  BitcodeCompiler(const std::string &abi, const std::string &sysroot, const std::string &working_dir);
+  BitcodeCompiler(const std::string &abi, const std::string &sysroot, const std::string &working_dir, const bool savetemps);
   const ReturnCode returnCode() const { return mRet; }
   virtual void cleanupPre() {}
   virtual void cleanupPost() {}
@@ -165,6 +165,8 @@
   }
 
 private:
+  bool mSaveTemps;
+
   void prepareBitcodes();
   void createSONameMapping();
   virtual void getBitcodeFiles() = 0;
diff --git a/tests/abcc/jni/device/Abcc_device.cpp b/tests/abcc/jni/device/Abcc_device.cpp
index ea1f972..493dc47 100644
--- a/tests/abcc/jni/device/Abcc_device.cpp
+++ b/tests/abcc/jni/device/Abcc_device.cpp
@@ -39,7 +39,7 @@
 
 
 DeviceBitcodeCompiler::DeviceBitcodeCompiler(const std::string &working_dir, const std::string &sysroot)
-  : BitcodeCompiler(CURRENT_ABI, sysroot, working_dir) {}
+  : BitcodeCompiler(CURRENT_ABI, sysroot, working_dir, false/*!savetemps*/) {}
 
 void DeviceBitcodeCompiler::cleanupPost() {
   ReturnCode ret = mRet;
diff --git a/tests/abcc/jni/host/Abcc_host.cpp b/tests/abcc/jni/host/Abcc_host.cpp
index 9fb9084..ecbc0c9 100644
--- a/tests/abcc/jni/host/Abcc_host.cpp
+++ b/tests/abcc/jni/host/Abcc_host.cpp
@@ -22,16 +22,16 @@
 
 HostBitcodeCompiler::HostBitcodeCompiler(const std::string &abi, const std::string &sysroot,
                                          const std::string &input, const std::string &output, const std::string &working_dir,
-                                         const std::string &platform)
-  : BitcodeCompiler(abi, sysroot, working_dir), mIn(input), mOut(output),
+                                         const std::string &platform, const bool savetemps)
+  : BitcodeCompiler(abi, sysroot, working_dir, savetemps), mIn(input), mOut(output),
     mNDKDir(""), mPlatform(platform) {
   initRuntimePath();
 }
 
 HostBitcodeCompiler::HostBitcodeCompiler(const std::string &abi, const std::string &sysroot, const std::string &ndk_dir, const std::string &toolchain_bin,
                                          const std::string &input, const std::string &output, const std::string &working_dir,
-                                         const std::string &platform)
-  : BitcodeCompiler(abi, sysroot, working_dir), mIn(input), mOut(output),
+                                         const std::string &platform, const bool savetemps)
+  : BitcodeCompiler(abi, sysroot, working_dir, savetemps), mIn(input), mOut(output),
     mNDKDir(ndk_dir), mPlatform(platform), mToolchainBinPath(toolchain_bin) {
   initRuntimePath();
 }
diff --git a/tests/abcc/jni/host/Abcc_host.h b/tests/abcc/jni/host/Abcc_host.h
index 0cac7c9..8d8e1c6 100644
--- a/tests/abcc/jni/host/Abcc_host.h
+++ b/tests/abcc/jni/host/Abcc_host.h
@@ -44,10 +44,10 @@
 public:
   HostBitcodeCompiler(const std::string &abi, const std::string &sysroot,
                       const std::string &input, const std::string &output, const std::string &working_dir,
-                      const std::string &platform);
+                      const std::string &platform, const bool savetemps);
   HostBitcodeCompiler(const std::string &abi, const std::string &sysroot, const std::string &ndk_dir, const std::string &toolchain_bin,
                       const std::string &input, const std::string &output, const std::string &working_dir,
-                      const std::string &platform);
+                      const std::string &platform, const bool savetemps);
 
 public:
   virtual int parseLDFlags(BitcodeInfo &info, const std::string &str);
diff --git a/tests/abcc/jni/host/main.cpp b/tests/abcc/jni/host/main.cpp
index 95a07c8..f9c2486 100644
--- a/tests/abcc/jni/host/main.cpp
+++ b/tests/abcc/jni/host/main.cpp
@@ -21,8 +21,9 @@
 
 static int parseArguments(char **argv,
                            std::string &abi, std::string &ndk_dir, std::string &sysroot,
-                           std::string &input, std::string &output, std::string &platform) {
+                           std::string &input, std::string &output, std::string &platform, bool &savetemps) {
   unsigned idx = 1;
+  savetemps = false;
   while (argv[idx] != 0) {
     std::string arg = argv[idx++];
     if (arg.find("--abi=") != std::string::npos) {
@@ -46,11 +47,16 @@
       output = argv[idx++];
       continue;
     }
-    if (arg == "--verbose") {
+    if (arg == "--verbose" || arg == "-v") {
       kVerbose = true;
       continue;
     }
 
+    if (arg == "-save-temps") {
+      savetemps = true;
+      continue;
+    }
+
     LOGE("Unsupport argument: %s", arg.c_str());
     return -1;
   }
@@ -75,9 +81,10 @@
   std::string platform;
   std::string working_dir;
   std::string toolchain_bin;
+  bool savetemps;
 
   if (parseArguments(argv,
-                     abi, ndk_dir, sysroot, input, output, platform) != 0)
+                     abi, ndk_dir, sysroot, input, output, platform, savetemps) != 0)
     return -1;
 
   // Make sure they are absolute path
@@ -113,11 +120,11 @@
   if (ndk_dir.empty())
     compiler.reset(new HostBitcodeCompiler(abi, sysroot,
                                            input, output,
-                                           working_dir, platform));
+                                           working_dir, platform, savetemps));
   else
     compiler.reset(new HostBitcodeCompiler(abi, sysroot, ndk_dir, toolchain_bin,
                                            input, output,
-                                           working_dir, platform));
+                                           working_dir, platform, savetemps));
 
   compiler->prepare();
   if (compiler->returnCode() != RET_OK) {