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

Commit 460ee942 authored by Matthew Maurer's avatar Matthew Maurer
Browse files

Support Rust in Recovery

Bug: 178565008
Bug: 165791368
Test: Build and link a Rust library into a recovery binary
Change-Id: I1c76e6204019443c567082730a4cf680f4a2a74a
parent 0dd067d3
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ var (
	VendorSuffix        = ".vendor"
	ramdiskSuffix       = ".ramdisk"
	VendorRamdiskSuffix = ".vendor_ramdisk"
	recoverySuffix      = ".recovery"
	RecoverySuffix      = ".recovery"
	sdkSuffix           = ".sdk"
)

+2 −2
Original line number Diff line number Diff line
@@ -1672,7 +1672,7 @@ func (c *Module) setSubnameProperty(actx android.ModuleContext) {
	} else if c.InVendorRamdisk() && !c.OnlyInVendorRamdisk() {
		c.Properties.SubName += VendorRamdiskSuffix
	} else if c.InRecovery() && !c.OnlyInRecovery() {
		c.Properties.SubName += recoverySuffix
		c.Properties.SubName += RecoverySuffix
	} else if c.IsSdkVariant() && (c.Properties.SdkAndPlatformVariantVisibleToMake || c.SplitPerApiLevel()) {
		c.Properties.SubName += sdkSuffix
		if c.SplitPerApiLevel() {
@@ -3033,7 +3033,7 @@ func MakeLibName(ctx android.ModuleContext, c LinkableInterface, ccDep LinkableI
	} else if ccDep.InVendorRamdisk() && !ccDep.OnlyInVendorRamdisk() {
		return libName + VendorRamdiskSuffix
	} else if ccDep.InRecovery() && !ccDep.OnlyInRecovery() {
		return libName + recoverySuffix
		return libName + RecoverySuffix
	} else if ccDep.Target().NativeBridge == android.NativeBridgeEnabled {
		return libName + nativeBridgeSuffix
	} else {
+1 −1
Original line number Diff line number Diff line
@@ -61,7 +61,7 @@ func (recoverySnapshotImage) imageVariantName(cfg android.DeviceConfig) string {
}

func (recoverySnapshotImage) moduleNameSuffix() string {
	return recoverySuffix
	return RecoverySuffix
}

// Override existing vendor and recovery snapshot for cc module specific extra functions
+6 −7
Original line number Diff line number Diff line
@@ -50,7 +50,7 @@ func (mod *Module) AndroidModuleBase() *android.ModuleBase {
}

func (mod *Module) RecoveryAvailable() bool {
	return false
	return Bool(mod.Properties.Recovery_available)
}

func (mod *Module) ExtraVariants() []string {
@@ -72,9 +72,7 @@ func (mod *Module) SetVendorRamdiskVariantNeeded(b bool) {
}

func (mod *Module) SetRecoveryVariantNeeded(b bool) {
	if b {
		panic("Setting recovery variant needed for Rust module is unsupported: " + mod.BaseModuleName())
	}
	mod.Properties.RecoveryVariantNeeded = b
}

func (mod *Module) SetCoreVariantNeeded(b bool) {
@@ -107,7 +105,7 @@ func (mod *Module) DebugRamdiskVariantNeeded(ctx android.BaseModuleContext) bool
}

func (mod *Module) RecoveryVariantNeeded(android.BaseModuleContext) bool {
	return mod.InRecovery()
	return mod.Properties.RecoveryVariantNeeded
}

func (mod *Module) ExtraImageVariations(android.BaseModuleContext) []string {
@@ -144,8 +142,7 @@ func (ctx *moduleContext) ProductSpecific() bool {
}

func (mod *Module) InRecovery() bool {
	// TODO(b/165791368)
	return false
	return mod.ModuleBase.InRecovery() || mod.ModuleBase.InstallInRecovery()
}

func (mod *Module) InVendorRamdisk() bool {
@@ -193,6 +190,8 @@ func (mod *Module) SetImageVariation(ctx android.BaseModuleContext, variant stri
	m := module.(*Module)
	if variant == android.VendorRamdiskVariation {
		m.MakeAsPlatform()
	} else if variant == android.RecoveryVariation {
		m.MakeAsPlatform()
	} else if strings.HasPrefix(variant, cc.VendorVariationPrefix) {
		m.Properties.ImageVariationPrefix = cc.VendorVariationPrefix
		m.Properties.VndkVersion = strings.TrimPrefix(variant, cc.VendorVariationPrefix)
+7 −1
Original line number Diff line number Diff line
@@ -84,6 +84,7 @@ type BaseProperties struct {
	// Set by imageMutator
	CoreVariantNeeded          bool     `blueprint:"mutated"`
	VendorRamdiskVariantNeeded bool     `blueprint:"mutated"`
	RecoveryVariantNeeded      bool     `blueprint:"mutated"`
	ExtraVariants              []string `blueprint:"mutated"`

	// Allows this module to use non-APEX version of libraries. Useful
@@ -98,7 +99,7 @@ type BaseProperties struct {
	// On device without a dedicated recovery partition, the module is only
	// available after switching root into
	// /first_stage_ramdisk. To expose the module before switching root, install
	// the recovery variant instead (TODO(b/165791368) recovery not yet supported)
	// the recovery variant instead
	Vendor_ramdisk_available *bool

	// Normally Soong uses the directory structure to decide which modules
@@ -115,6 +116,9 @@ type BaseProperties struct {
	// framework module from the recovery snapshot.
	Exclude_from_recovery_snapshot *bool

	// Make this module available when building for recovery
	Recovery_available *bool

	// Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
	Min_sdk_version *string

@@ -807,6 +811,8 @@ func (mod *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
		mod.Properties.SubName += cc.VendorSuffix
	} else if mod.InVendorRamdisk() && !mod.OnlyInVendorRamdisk() {
		mod.Properties.SubName += cc.VendorRamdiskSuffix
	} else if mod.InRecovery() && !mod.OnlyInRecovery() {
		mod.Properties.SubName += cc.RecoverySuffix
	}

	if !toolchain.Supported() {