Merge "Add abstraction for tracking compile multilib usages"
This commit is contained in:
@@ -144,8 +144,7 @@ func (s *sdk) organizeMembers(ctx android.ModuleContext, memberRefs []sdkMemberR
|
|||||||
byType := make(map[android.SdkMemberType][]*sdkMember)
|
byType := make(map[android.SdkMemberType][]*sdkMember)
|
||||||
byName := make(map[string]*sdkMember)
|
byName := make(map[string]*sdkMember)
|
||||||
|
|
||||||
lib32 := false // True if any of the members have 32 bit version.
|
multilib := multilibNone
|
||||||
lib64 := false // True if any of the members have 64 bit version.
|
|
||||||
|
|
||||||
for _, memberRef := range memberRefs {
|
for _, memberRef := range memberRefs {
|
||||||
memberType := memberRef.memberType
|
memberType := memberRef.memberType
|
||||||
@@ -159,12 +158,7 @@ func (s *sdk) organizeMembers(ctx android.ModuleContext, memberRefs []sdkMemberR
|
|||||||
byType[memberType] = append(byType[memberType], member)
|
byType[memberType] = append(byType[memberType], member)
|
||||||
}
|
}
|
||||||
|
|
||||||
multilib := variant.Target().Arch.ArchType.Multilib
|
multilib = multilib.addArchType(variant.Target().Arch.ArchType)
|
||||||
if multilib == "lib32" {
|
|
||||||
lib32 = true
|
|
||||||
} else if multilib == "lib64" {
|
|
||||||
lib64 = true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only append new variants to the list. This is needed because a member can be both
|
// 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.
|
// 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...)
|
members = append(members, membersOfType...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compute the setting of multilib.
|
return members, multilib.String()
|
||||||
var multilib string
|
|
||||||
if lib32 && lib64 {
|
|
||||||
multilib = "both"
|
|
||||||
} else if lib32 {
|
|
||||||
multilib = "32"
|
|
||||||
} else if lib64 {
|
|
||||||
multilib = "64"
|
|
||||||
}
|
|
||||||
|
|
||||||
return members, multilib
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendUniqueVariants(variants []android.SdkAware, newVariant android.SdkAware) []android.SdkAware {
|
func appendUniqueVariants(variants []android.SdkAware, newVariant android.SdkAware) []android.SdkAware {
|
||||||
@@ -787,6 +771,47 @@ func (m *sdkMember) Variants() []android.SdkAware {
|
|||||||
return m.variants
|
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 {
|
type baseInfo struct {
|
||||||
Properties android.SdkMemberProperties
|
Properties android.SdkMemberProperties
|
||||||
}
|
}
|
||||||
@@ -865,8 +890,11 @@ func (osInfo *osTypeSpecificInfo) optimizeProperties(commonValueExtractor *commo
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
multilib := multilibNone
|
||||||
var archPropertiesList []android.SdkMemberProperties
|
var archPropertiesList []android.SdkMemberProperties
|
||||||
for _, archInfo := range osInfo.archInfos {
|
for _, archInfo := range osInfo.archInfos {
|
||||||
|
multilib = multilib.addArchType(archInfo.archType)
|
||||||
|
|
||||||
// Optimize the arch properties first.
|
// Optimize the arch properties first.
|
||||||
archInfo.optimizeProperties(commonValueExtractor)
|
archInfo.optimizeProperties(commonValueExtractor)
|
||||||
|
|
||||||
@@ -876,19 +904,7 @@ func (osInfo *osTypeSpecificInfo) optimizeProperties(commonValueExtractor *commo
|
|||||||
commonValueExtractor.extractCommonProperties(osInfo.Properties, archPropertiesList)
|
commonValueExtractor.extractCommonProperties(osInfo.Properties, archPropertiesList)
|
||||||
|
|
||||||
// Choose setting for compile_multilib that is appropriate for the arch variants supplied.
|
// Choose setting for compile_multilib that is appropriate for the arch variants supplied.
|
||||||
var multilib string
|
osInfo.Properties.Base().Compile_multilib = 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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the properties for an os to a property set.
|
// Add the properties for an os to a property set.
|
||||||
|
Reference in New Issue
Block a user