Merge "Extend multilib" am: 1e8ed27de3

am: 5b25ba18ec

Change-Id: Id962c422b58605ff885c0cf41185a6206d746cd3
This commit is contained in:
Colin Cross
2016-09-07 00:36:45 +00:00
committed by android-build-merger
3 changed files with 43 additions and 14 deletions

View File

@@ -197,7 +197,6 @@ func translateAndroidMkModule(ctx blueprint.SingletonContext, w io.Writer, mod b
fmt.Fprintln(w, "LOCAL_PATH :=", filepath.Dir(ctx.BlueprintFile(mod)))
fmt.Fprintln(w, "LOCAL_MODULE :=", name)
fmt.Fprintln(w, "LOCAL_MODULE_CLASS :=", data.Class)
fmt.Fprintln(w, "LOCAL_MULTILIB :=", amod.commonProperties.Compile_multilib)
fmt.Fprintln(w, "LOCAL_PREBUILT_MODULE_FILE :=", data.OutputFile.String())
if len(amod.commonProperties.Required) > 0 {

View File

@@ -420,7 +420,19 @@ func ArchMutator(mctx BottomUpMutatorContext) {
if len(targets) == 0 {
continue
}
multilib := module.base().commonProperties.Compile_multilib
var multilib string
switch class {
case Device:
multilib = module.base().commonProperties.Target.Android.Compile_multilib
case Host, HostCross:
multilib = module.base().commonProperties.Target.Host.Compile_multilib
}
if multilib == "" {
multilib = module.base().commonProperties.Compile_multilib
}
if multilib == "" {
multilib = module.base().commonProperties.Default_multilib
}
targets, err := decodeMultilib(multilib, targets)
if err != nil {
mctx.ModuleErrorf("%s", err.Error())
@@ -903,6 +915,16 @@ func decodeArch(arch string, archVariant, cpuVariant *string, abi *[]string) (Ar
return a, nil
}
func filterMultilibTargets(targets []Target, multilib string) []Target {
var ret []Target
for _, t := range targets {
if t.Arch.ArchType.Multilib == multilib {
ret = append(ret, t)
}
}
return ret
}
// Use the module multilib setting to select one or more targets from a target list
func decodeMultilib(multilib string, targets []Target) ([]Target, error) {
buildTargets := []Target{}
@@ -914,19 +936,16 @@ func decodeMultilib(multilib string, targets []Target) ([]Target, error) {
case "first":
buildTargets = append(buildTargets, targets[0])
case "32":
for _, t := range targets {
if t.Arch.ArchType.Multilib == "lib32" {
buildTargets = append(buildTargets, t)
}
}
buildTargets = filterMultilibTargets(targets, "lib32")
case "64":
for _, t := range targets {
if t.Arch.ArchType.Multilib == "lib64" {
buildTargets = append(buildTargets, t)
}
buildTargets = filterMultilibTargets(targets, "lib64")
case "prefer32":
buildTargets = filterMultilibTargets(targets, "lib32")
if len(buildTargets) == 0 {
buildTargets = filterMultilibTargets(targets, "lib64")
}
default:
return nil, fmt.Errorf(`compile_multilib must be "both", "first", "32", or "64", found %q`,
return nil, fmt.Errorf(`compile_multilib must be "both", "first", "32", "64", or "prefer32" found %q`,
multilib)
}

View File

@@ -118,7 +118,18 @@ type commonProperties struct {
// are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
// architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
// platform
Compile_multilib string
Compile_multilib string `android:"arch_variant"`
Target struct {
Host struct {
Compile_multilib string
}
Android struct {
Compile_multilib string
}
}
Default_multilib string `blueprint:"mutated"`
// whether this is a proprietary vendor module, and should be installed into /vendor
Proprietary bool
@@ -182,7 +193,7 @@ func InitAndroidArchModule(m Module, hod HostOrDeviceSupported, defaultMultilib
base := m.base()
base.commonProperties.HostOrDeviceSupported = hod
base.commonProperties.Compile_multilib = string(defaultMultilib)
base.commonProperties.Default_multilib = string(defaultMultilib)
switch hod {
case HostAndDeviceSupported: