diff options
author | Paul Duffin <paulduffin@google.com> | 2020-03-16 19:52:08 +0000 |
---|---|---|
committer | Paul Duffin <paulduffin@google.com> | 2020-04-22 12:51:43 +0100 |
commit | 5e2e0fd19161befebd328709722a7211c7f4037f (patch) | |
tree | 997a14e9c7475f1b870b4ca49018129b63477a4c /sdk | |
parent | 6cb8f172b8102d02adac20b4ee18fd795b319675 (diff) | |
download | build_soong-5e2e0fd19161befebd328709722a7211c7f4037f.tar.gz build_soong-5e2e0fd19161befebd328709722a7211c7f4037f.tar.bz2 build_soong-5e2e0fd19161befebd328709722a7211c7f4037f.zip |
Add abstraction for tracking compile multilib usages
Ensures consistent tracking of multilib usages.
Bug: 142935992
Bug: 153306490
Test: m nothing
Merged-In: I82ba4a53a21a0823503cb98f7edfde449b48b440
Change-Id: I82ba4a53a21a0823503cb98f7edfde449b48b440
Diffstat (limited to 'sdk')
-rw-r--r-- | sdk/update.go | 80 |
1 files changed, 48 insertions, 32 deletions
diff --git a/sdk/update.go b/sdk/update.go index ce25fc40..c706d1c1 100644 --- a/sdk/update.go +++ b/sdk/update.go @@ -144,8 +144,7 @@ func (s *sdk) organizeMembers(ctx android.ModuleContext, memberRefs []sdkMemberR byType := make(map[android.SdkMemberType][]*sdkMember) byName := make(map[string]*sdkMember) - lib32 := false // True if any of the members have 32 bit version. - lib64 := false // True if any of the members have 64 bit version. + multilib := multilibNone for _, memberRef := range memberRefs { memberType := memberRef.memberType @@ -159,12 +158,7 @@ func (s *sdk) organizeMembers(ctx android.ModuleContext, memberRefs []sdkMemberR byType[memberType] = append(byType[memberType], member) } - multilib := variant.Target().Arch.ArchType.Multilib - if multilib == "lib32" { - lib32 = true - } else if multilib == "lib64" { - lib64 = true - } + multilib = multilib.addArchType(variant.Target().Arch.ArchType) // Only append new variants to the list. This is needed because a member can be both // exported by the sdk and also be a transitive sdk member. @@ -177,17 +171,7 @@ func (s *sdk) organizeMembers(ctx android.ModuleContext, memberRefs []sdkMemberR members = append(members, membersOfType...) } - // Compute the setting of multilib. - var multilib string - if lib32 && lib64 { - multilib = "both" - } else if lib32 { - multilib = "32" - } else if lib64 { - multilib = "64" - } - - return members, multilib + return members, multilib.String() } func appendUniqueVariants(variants []android.SdkAware, newVariant android.SdkAware) []android.SdkAware { @@ -787,6 +771,47 @@ func (m *sdkMember) Variants() []android.SdkAware { return m.variants } +// Track usages of multilib variants. +type multilibUsage int + +const ( + multilibNone multilibUsage = 0 + multilib32 multilibUsage = 1 + multilib64 multilibUsage = 2 + multilibBoth = multilib32 | multilib64 +) + +// Add the multilib that is used in the arch type. +func (m multilibUsage) addArchType(archType android.ArchType) multilibUsage { + multilib := archType.Multilib + switch multilib { + case "": + return m + case "lib32": + return m | multilib32 + case "lib64": + return m | multilib64 + default: + panic(fmt.Errorf("Unknown Multilib field in ArchType, expected 'lib32' or 'lib64', found %q", multilib)) + } +} + +func (m multilibUsage) String() string { + switch m { + case multilibNone: + return "" + case multilib32: + return "32" + case multilib64: + return "64" + case multilibBoth: + return "both" + default: + panic(fmt.Errorf("Unknown multilib value, found %b, expected one of %b, %b, %b or %b", + m, multilibNone, multilib32, multilib64, multilibBoth)) + } +} + type baseInfo struct { Properties android.SdkMemberProperties } @@ -865,8 +890,11 @@ func (osInfo *osTypeSpecificInfo) optimizeProperties(commonValueExtractor *commo return } + multilib := multilibNone var archPropertiesList []android.SdkMemberProperties for _, archInfo := range osInfo.archInfos { + multilib = multilib.addArchType(archInfo.archType) + // Optimize the arch properties first. archInfo.optimizeProperties(commonValueExtractor) @@ -876,19 +904,7 @@ func (osInfo *osTypeSpecificInfo) optimizeProperties(commonValueExtractor *commo commonValueExtractor.extractCommonProperties(osInfo.Properties, archPropertiesList) // Choose setting for compile_multilib that is appropriate for the arch variants supplied. - var multilib string - archVariantCount := len(osInfo.archInfos) - if archVariantCount == 2 { - multilib = "both" - } else if archVariantCount == 1 { - if strings.HasSuffix(osInfo.archInfos[0].archType.Name, "64") { - multilib = "64" - } else { - multilib = "32" - } - } - - osInfo.Properties.Base().Compile_multilib = multilib + osInfo.Properties.Base().Compile_multilib = multilib.String() } // Add the properties for an os to a property set. |