Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aca7d9eb authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Have python_*{,_host} handle arch-variants" am: e9f157a0

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1830633

Change-Id: Ic31cfbbdc11cc22f2cae9617c4342f4764c0b0c5
parents 10ef62ea e9f157a0
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
@@ -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": [],
    }),
)`,
		},
	})
}
+51 −0
Original line number Diff line number Diff line
@@ -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),
		},
	})
}
+5 −7
Original line number Diff line number Diff line
@@ -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,
	}

+4 −7
Original line number Diff line number Diff line
@@ -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,
	}

+32 −0
Original line number Diff line number Diff line
@@ -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{}