diff options
Diffstat (limited to 'python/python.go')
| -rw-r--r-- | python/python.go | 57 |
1 files changed, 46 insertions, 11 deletions
diff --git a/python/python.go b/python/python.go index 0f5b7880e..401d91fe3 100644 --- a/python/python.go +++ b/python/python.go @@ -22,6 +22,7 @@ import ( "regexp" "strings" + "android/soong/bazel" "github.com/google/blueprint" "github.com/google/blueprint/proptools" @@ -45,7 +46,7 @@ func RegisterPythonPreDepsMutators(ctx android.RegisterMutatorsContext) { type VersionProperties struct { // whether the module is required to be built with this version. // Defaults to true for Python 3, and false otherwise. - Enabled *bool `android:"arch_variant"` + Enabled *bool // list of source files specific to this Python version. // Using the syntax ":module", srcs may reference the outputs of other modules that produce source files, @@ -60,7 +61,7 @@ type VersionProperties struct { Libs []string `android:"arch_variant"` // whether the binary is required to be built with embedded launcher for this version, defaults to false. - Embedded_launcher *bool `android:"arch_variant"` // TODO(b/174041232): Remove this property + Embedded_launcher *bool // TODO(b/174041232): Remove this property } // properties that apply to all python modules @@ -70,10 +71,10 @@ type BaseProperties struct { // eg. Pkg_path = "a/b/c"; Other packages can reference this module by using // (from a.b.c import ...) statement. // if left unspecified, all the source/data files path is unchanged within zip file. - Pkg_path *string `android:"arch_variant"` + Pkg_path *string // true, if the Python module is used internally, eg, Python std libs. - Is_internal *bool `android:"arch_variant"` + Is_internal *bool // list of source (.py) files compatible both with Python2 and Python3 used to compile the // Python module. @@ -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{} @@ -310,13 +342,16 @@ func versionSplitMutator() func(android.BottomUpMutatorContext) { // HostToolPath returns a path if appropriate such that this module can be used as a host tool, // fulfilling HostToolProvider interface. func (p *Module) HostToolPath() android.OptionalPath { - if p.installer == nil { - // python_library is just meta module, and doesn't have any installer. - return android.OptionalPath{} + if p.installer != nil { + if bin, ok := p.installer.(*binaryDecorator); ok { + // TODO: This should only be set when building host binaries -- tests built for device would be + // setting this incorrectly. + return android.OptionalPathForPath(bin.path) + } } - // TODO: This should only be set when building host binaries -- tests built for device would be - // setting this incorrectly. - return android.OptionalPathForPath(p.installer.(*binaryDecorator).path) + + return android.OptionalPath{} + } // OutputFiles returns output files based on given tag, returns an error if tag is unsupported. @@ -675,7 +710,7 @@ func (p *Module) collectPathsFromTransitiveDeps(ctx android.ModuleContext) { if !isPythonLibModule(child) { ctx.PropertyErrorf("libs", "the dependency %q of module %q is not Python library!", - ctx.ModuleName(), ctx.OtherModuleName(child)) + ctx.OtherModuleName(child), ctx.ModuleName()) } // collect source and data paths, checking that there are no duplicate output file conflicts if dep, ok := child.(pythonDependency); ok { |