Have python_*{,_host} handle arch-variants

Bug: 196081778
Test: TestPython*{,Host}ArchVariance
Test: go test
Test: mixed_{libc,droid}.sh
Change-Id: I89304e58f5bacd61534732bade4ad6bb5f2671c0
This commit is contained in:
Alex Márquez Pérez Muñíz Díaz Púras Thaureaux
2021-09-17 20:30:21 +00:00
parent 1b5262bd69
commit 19d399d4c5
5 changed files with 126 additions and 14 deletions

View File

@@ -63,6 +63,7 @@ func PythonBinaryBp2Build(ctx android.TopDownMutatorContext) {
}
}
}
// TODO(b/182306917): this doesn't fully handle all nested props versioned
// by the python version, which would have been handled by the version split
// mutator. This is sufficient for very simple python_binary_host modules
@@ -80,15 +81,12 @@ func PythonBinaryBp2Build(ctx android.TopDownMutatorContext) {
// do nothing, since python_version defaults to PY3.
}
srcs := android.BazelLabelForModuleSrcExcludes(ctx, m.properties.Srcs, m.properties.Exclude_srcs)
data := android.BazelLabelForModuleSrc(ctx, m.properties.Data)
deps := android.BazelLabelForModuleDeps(ctx, m.properties.Libs)
baseAttrs := m.makeArchVariantBaseAttributes(ctx)
attrs := &bazelPythonBinaryAttributes{
Main: main,
Srcs: bazel.MakeLabelListAttribute(srcs),
Data: bazel.MakeLabelListAttribute(data),
Deps: bazel.MakeLabelListAttribute(deps),
Srcs: baseAttrs.Srcs,
Data: baseAttrs.Data,
Deps: baseAttrs.Deps,
Python_version: python_version,
}

View File

@@ -88,14 +88,11 @@ func pythonLibBp2Build(ctx android.TopDownMutatorContext, modType string) {
// do nothing, since python_version defaults to PY2ANDPY3
}
srcs := android.BazelLabelForModuleSrcExcludes(ctx, m.properties.Srcs, m.properties.Exclude_srcs)
data := android.BazelLabelForModuleSrc(ctx, m.properties.Data)
deps := android.BazelLabelForModuleDeps(ctx, m.properties.Libs)
baseAttrs := m.makeArchVariantBaseAttributes(ctx)
attrs := &bazelPythonLibraryAttributes{
Srcs: bazel.MakeLabelListAttribute(srcs),
Data: bazel.MakeLabelListAttribute(data),
Deps: bazel.MakeLabelListAttribute(deps),
Srcs: baseAttrs.Srcs,
Data: baseAttrs.Data,
Deps: baseAttrs.Deps,
Srcs_version: python_version,
}

View File

@@ -22,6 +22,7 @@ import (
"regexp"
"strings"
"android/soong/bazel"
"github.com/google/blueprint"
"github.com/google/blueprint/proptools"
@@ -120,6 +121,18 @@ type BaseProperties struct {
Embedded_launcher *bool `blueprint:"mutated"`
}
type baseAttributes struct {
// TODO(b/200311466): Probably not translate b/c Bazel has no good equiv
//Pkg_path bazel.StringAttribute
// TODO: Related to Pkg_bath and similarLy gated
//Is_internal bazel.BoolAttribute
// Combines Srcs and Exclude_srcs
Srcs bazel.LabelListAttribute
Deps bazel.LabelListAttribute
// Combines Data and Java_data (invariant)
Data bazel.LabelListAttribute
}
// Used to store files of current module after expanding dependencies
type pathMapping struct {
dest string
@@ -177,6 +190,25 @@ func newModule(hod android.HostOrDeviceSupported, multilib android.Multilib) *Mo
}
}
func (m *Module) makeArchVariantBaseAttributes(ctx android.TopDownMutatorContext) baseAttributes {
var attrs baseAttributes
archVariantBaseProps := m.GetArchVariantProperties(ctx, &BaseProperties{})
for axis, configToProps := range archVariantBaseProps {
for config, props := range configToProps {
if baseProps, ok := props.(*BaseProperties); ok {
attrs.Srcs.SetSelectValue(axis, config,
android.BazelLabelForModuleSrcExcludes(ctx, baseProps.Srcs, baseProps.Exclude_srcs))
attrs.Deps.SetSelectValue(axis, config,
android.BazelLabelForModuleDeps(ctx, baseProps.Libs))
data := android.BazelLabelForModuleSrc(ctx, baseProps.Data)
data.Append(android.BazelLabelForModuleSrc(ctx, baseProps.Java_data))
attrs.Data.SetSelectValue(axis, config, data)
}
}
}
return attrs
}
// bootstrapper interface should be implemented for runnable modules, e.g. binary and test
type bootstrapper interface {
bootstrapperProps() []interface{}