Add "externalize" option.

Change-Id: I352b08ec0919c5657d0d0a78aece71fe7401a31f
diff --git a/llvm-rs-link.cpp b/llvm-rs-link.cpp
index a8ec19c..3facdd4 100644
--- a/llvm-rs-link.cpp
+++ b/llvm-rs-link.cpp
@@ -30,6 +30,10 @@
 OutputFilename("o", cl::Required, cl::desc("Override output filename"),
                cl::value_desc("<output bitcode file>"));
 
+static cl::opt<bool>
+Externalize("e", cl::Optional, cl::desc("To externalize"),
+               cl::value_desc("<externalize>"));
+
 // GetExported - ...
 static void GetExported(NamedMDNode *N, std::vector<std::string> &Names) {
   for (int i = 0, e = N->getNumOperands(); i != e; ++i) {
@@ -92,7 +96,7 @@
 int main(int argc, char **argv) {
   llvm_shutdown_obj X;
 
-  cl::ParseCommandLineOptions(argc, argv, "slang linker\n");
+  cl::ParseCommandLineOptions(argc, argv, "llvm-rs-link\n");
 
   LLVMContext &Context = getGlobalContext();
   std::auto_ptr<Module> Composite = LoadFile(argv[0], InputFilenames[0],
@@ -138,18 +142,21 @@
       Passes.add(TD);
   }
 
-  std::vector<std::string> PublicAPINames;
-  PublicAPINames.push_back("init");
-  PublicAPINames.push_back("root");
-  GetExportedGlobals(Composite.get(), PublicAPINames);
+  if (!Externalize) {
+    std::vector<std::string> PublicAPINames;
+    PublicAPINames.push_back("init");
+    PublicAPINames.push_back("root");
+    GetExportedGlobals(Composite.get(), PublicAPINames);
 
-  std::vector<const char *> PublicAPINamesCStr;
-  for (int i = 0, e = PublicAPINames.size(); i != e; ++i) {
-    // errs() << "not internalizing: " << PublicAPINames[i] << '\n';
-    PublicAPINamesCStr.push_back(PublicAPINames[i].c_str());
+    std::vector<const char *> PublicAPINamesCStr;
+    for (int i = 0, e = PublicAPINames.size(); i != e; ++i) {
+      // errs() << "not internalizing: " << PublicAPINames[i] << '\n';
+      PublicAPINamesCStr.push_back(PublicAPINames[i].c_str());
+    }
+
+    Passes.add(createInternalizePass(PublicAPINamesCStr));
   }
 
-  Passes.add(createInternalizePass(PublicAPINamesCStr));
   createStandardLTOPasses(&Passes, false, true, false);
   Passes.run(*Composite.get());