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;