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:
parent
1b5262bd69
commit
19d399d4c5
@@ -116,3 +116,37 @@ func TestPythonBinaryHostPy3(t *testing.T) {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPythonBinaryHostArchVariance(t *testing.T) {
|
||||||
|
runBp2BuildTestCaseSimple(t, bp2buildTestCase{
|
||||||
|
description: "test arch variants",
|
||||||
|
moduleTypeUnderTest: "python_binary_host",
|
||||||
|
moduleTypeUnderTestFactory: python.PythonBinaryHostFactory,
|
||||||
|
moduleTypeUnderTestBp2BuildMutator: python.PythonBinaryBp2Build,
|
||||||
|
filesystem: map[string]string{
|
||||||
|
"dir/arm.py": "",
|
||||||
|
"dir/x86.py": "",
|
||||||
|
},
|
||||||
|
blueprint: `python_binary_host {
|
||||||
|
name: "foo-arm",
|
||||||
|
arch: {
|
||||||
|
arm: {
|
||||||
|
srcs: ["arm.py"],
|
||||||
|
},
|
||||||
|
x86: {
|
||||||
|
srcs: ["x86.py"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}`,
|
||||||
|
expectedBazelTargets: []string{
|
||||||
|
`py_binary(
|
||||||
|
name = "foo-arm",
|
||||||
|
srcs = select({
|
||||||
|
"//build/bazel/platforms/arch:arm": ["arm.py"],
|
||||||
|
"//build/bazel/platforms/arch:x86": ["x86.py"],
|
||||||
|
"//conditions:default": [],
|
||||||
|
}),
|
||||||
|
)`,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@@ -154,3 +154,54 @@ func testPythonLib(t *testing.T, modType string,
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPythonLibraryArchVariance(t *testing.T) {
|
||||||
|
testPythonArchVariance(t, "python_library", "py_library",
|
||||||
|
python.PythonLibraryFactory, python.PythonLibraryBp2Build,
|
||||||
|
func(ctx android.RegistrationContext) {})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPythonLibraryHostArchVariance(t *testing.T) {
|
||||||
|
testPythonArchVariance(t, "python_library_host", "py_library",
|
||||||
|
python.PythonLibraryHostFactory, python.PythonLibraryHostBp2Build,
|
||||||
|
func(ctx android.RegistrationContext) {})
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: refactor python_binary_conversion_test to use this
|
||||||
|
func testPythonArchVariance(t *testing.T, modType, bazelTarget string,
|
||||||
|
factory android.ModuleFactory, mutator PythonLibBp2Build,
|
||||||
|
registration func(ctx android.RegistrationContext)) {
|
||||||
|
t.Helper()
|
||||||
|
runBp2BuildTestCase(t, registration, bp2buildTestCase{
|
||||||
|
description: fmt.Sprintf("test %s arch variants", modType),
|
||||||
|
moduleTypeUnderTest: modType,
|
||||||
|
moduleTypeUnderTestFactory: factory,
|
||||||
|
moduleTypeUnderTestBp2BuildMutator: mutator,
|
||||||
|
filesystem: map[string]string{
|
||||||
|
"dir/arm.py": "",
|
||||||
|
"dir/x86.py": "",
|
||||||
|
},
|
||||||
|
blueprint: fmt.Sprintf(`%s {
|
||||||
|
name: "foo",
|
||||||
|
arch: {
|
||||||
|
arm: {
|
||||||
|
srcs: ["arm.py"],
|
||||||
|
},
|
||||||
|
x86: {
|
||||||
|
srcs: ["x86.py"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}`, modType),
|
||||||
|
expectedBazelTargets: []string{
|
||||||
|
fmt.Sprintf(`%s(
|
||||||
|
name = "foo",
|
||||||
|
srcs = select({
|
||||||
|
"//build/bazel/platforms/arch:arm": ["arm.py"],
|
||||||
|
"//build/bazel/platforms/arch:x86": ["x86.py"],
|
||||||
|
"//conditions:default": [],
|
||||||
|
}),
|
||||||
|
srcs_version = "PY3",
|
||||||
|
)`, bazelTarget),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@@ -63,6 +63,7 @@ func PythonBinaryBp2Build(ctx android.TopDownMutatorContext) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(b/182306917): this doesn't fully handle all nested props versioned
|
// 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
|
// by the python version, which would have been handled by the version split
|
||||||
// mutator. This is sufficient for very simple python_binary_host modules
|
// 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.
|
// do nothing, since python_version defaults to PY3.
|
||||||
}
|
}
|
||||||
|
|
||||||
srcs := android.BazelLabelForModuleSrcExcludes(ctx, m.properties.Srcs, m.properties.Exclude_srcs)
|
baseAttrs := m.makeArchVariantBaseAttributes(ctx)
|
||||||
data := android.BazelLabelForModuleSrc(ctx, m.properties.Data)
|
|
||||||
deps := android.BazelLabelForModuleDeps(ctx, m.properties.Libs)
|
|
||||||
|
|
||||||
attrs := &bazelPythonBinaryAttributes{
|
attrs := &bazelPythonBinaryAttributes{
|
||||||
Main: main,
|
Main: main,
|
||||||
Srcs: bazel.MakeLabelListAttribute(srcs),
|
Srcs: baseAttrs.Srcs,
|
||||||
Data: bazel.MakeLabelListAttribute(data),
|
Data: baseAttrs.Data,
|
||||||
Deps: bazel.MakeLabelListAttribute(deps),
|
Deps: baseAttrs.Deps,
|
||||||
Python_version: python_version,
|
Python_version: python_version,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -88,14 +88,11 @@ func pythonLibBp2Build(ctx android.TopDownMutatorContext, modType string) {
|
|||||||
// do nothing, since python_version defaults to PY2ANDPY3
|
// do nothing, since python_version defaults to PY2ANDPY3
|
||||||
}
|
}
|
||||||
|
|
||||||
srcs := android.BazelLabelForModuleSrcExcludes(ctx, m.properties.Srcs, m.properties.Exclude_srcs)
|
baseAttrs := m.makeArchVariantBaseAttributes(ctx)
|
||||||
data := android.BazelLabelForModuleSrc(ctx, m.properties.Data)
|
|
||||||
deps := android.BazelLabelForModuleDeps(ctx, m.properties.Libs)
|
|
||||||
|
|
||||||
attrs := &bazelPythonLibraryAttributes{
|
attrs := &bazelPythonLibraryAttributes{
|
||||||
Srcs: bazel.MakeLabelListAttribute(srcs),
|
Srcs: baseAttrs.Srcs,
|
||||||
Data: bazel.MakeLabelListAttribute(data),
|
Data: baseAttrs.Data,
|
||||||
Deps: bazel.MakeLabelListAttribute(deps),
|
Deps: baseAttrs.Deps,
|
||||||
Srcs_version: python_version,
|
Srcs_version: python_version,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -22,6 +22,7 @@ import (
|
|||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"android/soong/bazel"
|
||||||
"github.com/google/blueprint"
|
"github.com/google/blueprint"
|
||||||
"github.com/google/blueprint/proptools"
|
"github.com/google/blueprint/proptools"
|
||||||
|
|
||||||
@@ -120,6 +121,18 @@ type BaseProperties struct {
|
|||||||
Embedded_launcher *bool `blueprint:"mutated"`
|
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
|
// Used to store files of current module after expanding dependencies
|
||||||
type pathMapping struct {
|
type pathMapping struct {
|
||||||
dest string
|
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
|
// bootstrapper interface should be implemented for runnable modules, e.g. binary and test
|
||||||
type bootstrapper interface {
|
type bootstrapper interface {
|
||||||
bootstrapperProps() []interface{}
|
bootstrapperProps() []interface{}
|
||||||
|
Reference in New Issue
Block a user