Vendor ramdisk modules install to correct location

Install to recovery/root/first_stage_ramdisk if
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT,
otherwise vendor-ramdisk. In addition, append /system
if not InstallInRoot().

On devices with dedicated recovery partition,
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT is not set,
and this installs to the correct place (under $OUT/vendor-ramdisk).

On devices without a dedicated recovery partition:
- To install a module available before switching root
  to /first_stage_ramdisk, e.g. a binary under /system/bin,
  use recovery{_available} and install the recovery variant
  of the module.
- To install a module available after switching root
  to /first_stage_ramdisk, e.g. a binary under
  /first_stage_ramdisk/system/bin,
  use vendor_ramdisk{_available} and install the vendor_ramdisk
  variant of the module.

Test: pass
Bug: 156098440

Change-Id: I1af3f8889891a3e58263cda36f0680ce2b480499
diff --git a/android/config.go b/android/config.go
index cf6d596..004b743 100644
--- a/android/config.go
+++ b/android/config.go
@@ -1312,6 +1312,10 @@
 	return c.config.productVariables.BoardKernelModuleInterfaceVersions
 }
 
+func (c *deviceConfig) BoardMoveRecoveryResourcesToVendorBoot() bool {
+	return Bool(c.config.productVariables.BoardMoveRecoveryResourcesToVendorBoot)
+}
+
 // The ConfiguredJarList struct provides methods for handling a list of (apex, jar) pairs.
 // Such lists are used in the build system for things like bootclasspath jars or system server jars.
 // The apex part is either an apex name, or a special names "platform" or "system_ext". Jar is a
diff --git a/android/paths.go b/android/paths.go
index 8fd2e88..4eb9d20 100644
--- a/android/paths.go
+++ b/android/paths.go
@@ -1378,8 +1378,14 @@
 				partition += "/system"
 			}
 		} else if ctx.InstallInVendorRamdisk() {
-			// TODO(elsk): Should be conditional on move_recovery_res_to_vendor_boot
-			partition = "vendor-ramdisk"
+			if ctx.DeviceConfig().BoardMoveRecoveryResourcesToVendorBoot() {
+				partition = "recovery/root/first_stage_ramdisk"
+			} else {
+				partition = "vendor-ramdisk"
+			}
+			if !ctx.InstallInRoot() {
+				partition += "/system"
+			}
 		} else if ctx.InstallInRecovery() {
 			if ctx.InstallInRoot() {
 				partition = "recovery/root"
diff --git a/android/variable.go b/android/variable.go
index 73062ed..23fc6c2 100644
--- a/android/variable.go
+++ b/android/variable.go
@@ -352,6 +352,8 @@
 
 	BoardKernelBinaries                []string `json:",omitempty"`
 	BoardKernelModuleInterfaceVersions []string `json:",omitempty"`
+
+	BoardMoveRecoveryResourcesToVendorBoot *bool `json:",omitempty"`
 }
 
 func boolPtr(v bool) *bool {