Build linker configuration for recovery in build time am: 722dad6819 am: 4b76d66377
Change-Id: Ia74cfb235d6fca9be0fdd31863f40ca2d8c51ca5
diff --git a/Android.bp b/Android.bp
index 89b4d3b..fdf386f 100644
--- a/Android.bp
+++ b/Android.bp
@@ -146,5 +146,19 @@
"linkerconfig_modules",
"linkerconfig_contents",
],
- host_supported: true,
+}
+
+prebuilt_etc {
+ name: "ld.config.recovery.txt",
+ recovery: true,
+ filename: "ld.config.txt",
+ src: ":generate_recovery_linker_config",
+}
+
+genrule {
+ name: "generate_recovery_linker_config",
+ recovery: true,
+ out: ["ld.config.recovery.txt"],
+ tools: ["linkerconfig"],
+ cmd: "$(location linkerconfig) --recovery --target $(out)",
}
diff --git a/main.cc b/main.cc
index 28aabfa..6c799c5 100644
--- a/main.cc
+++ b/main.cc
@@ -35,6 +35,7 @@
#ifndef __ANDROID__
{"root", required_argument, 0, 'r'},
{"vndk", required_argument, 0, 'v'},
+ {"recovery", no_argument, 0, 'y'},
#endif
{"help", no_argument, 0, 'h'},
{0, 0, 0, 0}};
@@ -43,6 +44,7 @@
std::string target_file;
std::string root;
std::string vndk_version;
+ bool is_recovery;
};
[[noreturn]] void PrintUsage(int status = EXIT_SUCCESS) {
@@ -50,6 +52,7 @@
#ifndef __ANDROID__
" --root <root dir>"
" --vndk <vndk version>"
+ " --recovery"
#endif
" [--recovery]"
" [--help]"
@@ -60,7 +63,7 @@
bool ParseArgs(int argc, char* argv[], ProgramArgs* args) {
int parse_result;
while ((parse_result = getopt_long(
- argc, argv, "t:r:v:h", program_options, NULL)) != -1) {
+ argc, argv, "t:r:v:hy", program_options, NULL)) != -1) {
switch (parse_result) {
case 't':
args->target_file = optarg;
@@ -71,6 +74,9 @@
case 'v':
args->vndk_version = optarg;
break;
+ case 'y':
+ args->is_recovery = true;
+ break;
case 'h':
PrintUsage();
default:
@@ -85,11 +91,22 @@
return true;
}
-android::linkerconfig::modules::Configuration GetConfiguration() {
- if (android::linkerconfig::modules::IsRecoveryMode()) {
+android::linkerconfig::modules::Configuration GetConfiguration(ProgramArgs args) {
+ // Recovery mode does not require environmental variables.
+ if (args.is_recovery || android::linkerconfig::modules::IsRecoveryMode()) {
return android::linkerconfig::contents::CreateRecoveryConfiguration();
}
+#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);
+
if (android::linkerconfig::modules::IsLegacyDevice()) {
return android::linkerconfig::contents::CreateLegacyConfiguration();
}
@@ -121,7 +138,7 @@
#endif
);
- ProgramArgs args;
+ ProgramArgs args = {.is_recovery = false};
if (!ParseArgs(argc, argv, &args)) {
PrintUsage(EXIT_FAILURE);
@@ -139,16 +156,7 @@
out = &file_out;
}
-#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();
+ auto config = GetConfiguration(args);
android::linkerconfig::modules::ConfigWriter config_writer;
config.WriteConfig(config_writer);