Make linkerconfig support host

By supplying two additional args for host running
--root <root dir>
--vndk <vndk version>
one can run linkerconfig and see the resulting ld.config.txt

Some input files are found under <root>/system/etc with <vndk version>.
For example, out/target/vsoc_x86/system/etc/llndk.libraries.29.txt

Bug: 141660636
Test: m linkerconfig
Test: linkerconfig --root $OUT --vndk 29
Change-Id: I4aeab731a17764d7aa7e508842eae620f55f781e
diff --git a/main.cc b/main.cc
index 5362175..a7dc090 100644
--- a/main.cc
+++ b/main.cc
@@ -23,31 +23,49 @@
 #include "linkerconfig/baseconfig.h"
 #include "linkerconfig/log.h"
 #include "linkerconfig/variableloader.h"
+#include "linkerconfig/variables.h"
 
 namespace {
 const static struct option program_options[] = {
     {"target", required_argument, 0, 't'},
+#ifndef __ANROID__
+    {"root", required_argument, 0, 'r'},
+    {"vndk", required_argument, 0, 'v'},
+#endif
     {"help", no_argument, 0, 'h'},
     {0, 0, 0, 0}};
 
 struct ProgramArgs {
   std::string target_file;
+  std::string root;
+  std::string vndk_version;
 };
 
 [[noreturn]] void PrintUsage(int status = EXIT_SUCCESS) {
-  std::cerr << "Usage : linkerconfig [--target <target_file>] [--help]"
+  std::cerr << "Usage : linkerconfig [--target <target_file>]"
+#ifndef __ANDROID__
+               " --root <root dir>"
+               " --vndk <vndk version>"
+#endif
+               " [--help]"
             << std::endl;
   exit(status);
 }
 
 bool ParseArgs(int argc, char* argv[], ProgramArgs* args) {
   int parse_result;
-  while ((parse_result =
-              getopt_long(argc, argv, "th:", program_options, NULL)) != -1) {
+  while ((parse_result = getopt_long(
+              argc, argv, "t:r:v:h", program_options, NULL)) != -1) {
     switch (parse_result) {
       case 't':
         args->target_file = optarg;
         break;
+      case 'r':
+        args->root = optarg;
+        break;
+      case 'v':
+        args->vndk_version = optarg;
+        break;
       case 'h':
         PrintUsage();
       default:
@@ -73,6 +91,7 @@
   return android::linkerconfig::contents::CreateBaseConfiguration();
 }
 
+#ifdef __ANDROID__
 struct CombinedLogger {
   android::base::LogdLogger logd;
 
@@ -83,11 +102,17 @@
     KernelLogger(id, severity, tag, file, line, message);
   }
 };
+#endif
 
 }  // namespace
 
 int main(int argc, char* argv[]) {
-  android::base::InitLogging(argv, CombinedLogger());
+  android::base::InitLogging(argv
+#ifdef __ANDROID__
+                             ,
+                             CombinedLogger()
+#endif
+  );
 
   ProgramArgs args;
 
@@ -107,7 +132,15 @@
     out = &file_out;
   }
 
-  android::linkerconfig::generator::LoadVariables();
+#ifndef __ANDROID__
+  if (args.root == "" || args.vndk_version == "") {
+    PrintUsage();
+  }
+  android::linkerconfig::modules::Variables::AddValue("ro.vndk.version",
+                                                      args.vndk_version);
+#endif
+
+  android::linkerconfig::generator::LoadVariables(args.root);
   auto config = GetConfiguration();
   android::linkerconfig::modules::ConfigWriter config_writer;