From 851f3995bcc032b4266bf7514448194d9df23cc0 Mon Sep 17 00:00:00 2001 From: Paul Duffin Date: Wed, 13 Jan 2021 17:03:51 +0000 Subject: [PATCH] Extract ApexFileProperties from apex PrebuiltProperties The properties and logic to select the appropriate arch specific src property will need to be shared between the 'prebuilt_apex' module type and an upcoming 'deapexer' module type to which the `prebuilt_apex` will delegate responsibility for exporting the '.apex' file's contents. This refactoring extracts them into the new ApexFileProperties struct for reuse. Bug: 171061220 Test: m nothing Change-Id: Iac321a28afc469e885ee5b19ad33fecd94117236 --- apex/prebuilt.go | 59 ++++++++++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/apex/prebuilt.go b/apex/prebuilt.go index 7931e9e25..50e892e8b 100644 --- a/apex/prebuilt.go +++ b/apex/prebuilt.go @@ -107,7 +107,7 @@ type Prebuilt struct { compatSymlinks []string } -type PrebuiltProperties struct { +type ApexFileProperties struct { // the path to the prebuilt .apex file to import. Source string `blueprint:"mutated"` @@ -126,6 +126,38 @@ type PrebuiltProperties struct { Src *string } } +} + +func (p *ApexFileProperties) selectSource(ctx android.BottomUpMutatorContext) error { + // This is called before prebuilt_select and prebuilt_postdeps mutators + // The mutators requires that src to be set correctly for each arch so that + // arch variants are disabled when src is not provided for the arch. + if len(ctx.MultiTargets()) != 1 { + return fmt.Errorf("compile_multilib shouldn't be \"both\" for prebuilt_apex") + } + var src string + switch ctx.MultiTargets()[0].Arch.ArchType { + case android.Arm: + src = String(p.Arch.Arm.Src) + case android.Arm64: + src = String(p.Arch.Arm64.Src) + case android.X86: + src = String(p.Arch.X86.Src) + case android.X86_64: + src = String(p.Arch.X86_64.Src) + default: + return fmt.Errorf("prebuilt_apex does not support %q", ctx.MultiTargets()[0].Arch.String()) + } + if src == "" { + src = String(p.Src) + } + p.Source = src + + return nil +} + +type PrebuiltProperties struct { + ApexFileProperties Installable *bool // Optional name for the installed apex. If unspecified, name of the @@ -175,31 +207,10 @@ func PrebuiltFactory() android.Module { } func (p *Prebuilt) DepsMutator(ctx android.BottomUpMutatorContext) { - // This is called before prebuilt_select and prebuilt_postdeps mutators - // The mutators requires that src to be set correctly for each arch so that - // arch variants are disabled when src is not provided for the arch. - if len(ctx.MultiTargets()) != 1 { - ctx.ModuleErrorf("compile_multilib shouldn't be \"both\" for prebuilt_apex") + if err := p.properties.selectSource(ctx); err != nil { + ctx.ModuleErrorf("%s", err) return } - var src string - switch ctx.MultiTargets()[0].Arch.ArchType { - case android.Arm: - src = String(p.properties.Arch.Arm.Src) - case android.Arm64: - src = String(p.properties.Arch.Arm64.Src) - case android.X86: - src = String(p.properties.Arch.X86.Src) - case android.X86_64: - src = String(p.properties.Arch.X86_64.Src) - default: - ctx.ModuleErrorf("prebuilt_apex does not support %q", ctx.MultiTargets()[0].Arch.String()) - return - } - if src == "" { - src = String(p.properties.Src) - } - p.properties.Source = src } func (p *Prebuilt) GenerateAndroidBuildActions(ctx android.ModuleContext) {