Loading bp2build/python_binary_conversion_test.go +34 −0 Original line number Diff line number Diff line Loading @@ -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": [], }), )`, }, }) } bp2build/python_library_conversion_test.go +51 −0 Original line number Diff line number Diff line Loading @@ -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), }, }) } python/binary.go +5 −7 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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, } Loading python/library.go +4 −7 Original line number Diff line number Diff line Loading @@ -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, } Loading python/python.go +32 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import ( "regexp" "strings" "android/soong/bazel" "github.com/google/blueprint" "github.com/google/blueprint/proptools" Loading Loading @@ -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 Loading Loading @@ -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{} Loading Loading
bp2build/python_binary_conversion_test.go +34 −0 Original line number Diff line number Diff line Loading @@ -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": [], }), )`, }, }) }
bp2build/python_library_conversion_test.go +51 −0 Original line number Diff line number Diff line Loading @@ -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), }, }) }
python/binary.go +5 −7 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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, } Loading
python/library.go +4 −7 Original line number Diff line number Diff line Loading @@ -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, } Loading
python/python.go +32 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import ( "regexp" "strings" "android/soong/bazel" "github.com/google/blueprint" "github.com/google/blueprint/proptools" Loading Loading @@ -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 Loading Loading @@ -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{} Loading