Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8d52f86b authored by Jiyong Park's avatar Jiyong Park
Browse files

Fix: recovery module is disabled on 32-bit targets

Fixed a bug that recovery variant of a module is not created on 32-bit
targets. The bug was happening because the creation of the recovery
variant relied on DevicePrefer32BitExecutables() which returns false
for 32-bit only targets.

Now, recovery variant is checked against the primary architecture of the
device that is returned by DevicePrimaryArchType().

Test: m -j adbd.recovery on aosp_arm and aosp_arm64
adbd is built under recovery/root/system/bin and it is ELF32 and ELF64,
respectively for the targets.
Test: m -j libc.recovery on aosp_arm, aosp_arm64, aosp_sailfish
and the x86+arm target in mater. Only one libc.so is installed
under recovery/root/system/lib (or lib64).

Change-Id: I83a248d81f2c71dcfb0e9d887a75b71338f27b4d
parent 17bef8f0
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -576,6 +576,10 @@ func (c *config) DevicePrefer32BitExecutables() bool {
	return Bool(c.productVariables.DevicePrefer32BitExecutables)
}

func (c *config) DevicePrimaryArchType() ArchType {
	return c.Targets[Device][0].Arch.ArchType
}

func (c *config) SkipDeviceInstall() bool {
	return c.EmbeddedInMake()
}
+6 −16
Original line number Diff line number Diff line
@@ -1570,14 +1570,9 @@ func imageMutator(mctx android.BottomUpMutatorContext) {
			}

			if recoveryVariantNeeded {
				var recoveryMultilib string
				if mctx.Config().DevicePrefer32BitExecutables() {
					recoveryMultilib = "lib32"
				} else {
					recoveryMultilib = "lib64"
				}
				multilib := genrule.Target().Arch.ArchType.Multilib
				if multilib != recoveryMultilib {
				primaryArch := mctx.Config().DevicePrimaryArchType()
				moduleArch := genrule.Target().Arch.ArchType
				if moduleArch != primaryArch {
					recoveryVariantNeeded = false
				}
			}
@@ -1690,14 +1685,9 @@ func imageMutator(mctx android.BottomUpMutatorContext) {
	}

	if recoveryVariantNeeded {
		var recoveryMultilib string
		if mctx.Config().DevicePrefer32BitExecutables() {
			recoveryMultilib = "lib32"
		} else {
			recoveryMultilib = "lib64"
		}
		multilib := m.Target().Arch.ArchType.Multilib
		if multilib != recoveryMultilib {
		primaryArch := mctx.Config().DevicePrimaryArchType()
		moduleArch := m.Target().Arch.ArchType
		if moduleArch != primaryArch {
			recoveryVariantNeeded = false
		}
	}