Merge "Support customizing behavior around sourceOrOutputDependencyTag"
This commit is contained in:
commit
e1ef4763b4
4 changed files with 51 additions and 5 deletions
|
@ -344,8 +344,18 @@ type ModuleContext interface {
|
|||
// Deprecated: use ModuleContext.Build instead.
|
||||
ModuleBuild(pctx PackageContext, params ModuleBuildParams)
|
||||
|
||||
// Returns a list of paths expanded from globs and modules referenced using ":module" syntax. The property must
|
||||
// be tagged with `android:"path" to support automatic source module dependency resolution.
|
||||
//
|
||||
// Deprecated: use PathsForModuleSrc or PathsForModuleSrcExcludes instead.
|
||||
ExpandSources(srcFiles, excludes []string) Paths
|
||||
|
||||
// Returns a single path expanded from globs and modules referenced using ":module" syntax. The property must
|
||||
// be tagged with `android:"path" to support automatic source module dependency resolution.
|
||||
//
|
||||
// Deprecated: use PathForModuleSrc instead.
|
||||
ExpandSource(srcFile, prop string) Path
|
||||
|
||||
ExpandOptionalSource(srcFile *string, prop string) OptionalPath
|
||||
|
||||
// InstallExecutable creates a rule to copy srcPath to name in the installPath directory,
|
||||
|
@ -2832,8 +2842,26 @@ func sourceOrOutputDepTag(tag string) blueprint.DependencyTag {
|
|||
return sourceOrOutputDependencyTag{tag: tag}
|
||||
}
|
||||
|
||||
// Deprecated, use IsSourceDepTagWithOutputTag(tag, "") instead.
|
||||
var SourceDepTag = sourceOrOutputDepTag("")
|
||||
|
||||
// IsSourceDepTag returns true if the supplied blueprint.DependencyTag is one that was used to add
|
||||
// dependencies by either ExtractSourceDeps, ExtractSourcesDeps or automatically for properties
|
||||
// tagged with `android:"path"`.
|
||||
func IsSourceDepTag(depTag blueprint.DependencyTag) bool {
|
||||
_, ok := depTag.(sourceOrOutputDependencyTag)
|
||||
return ok
|
||||
}
|
||||
|
||||
// IsSourceDepTagWithOutputTag returns true if the supplied blueprint.DependencyTag is one that was
|
||||
// used to add dependencies by either ExtractSourceDeps, ExtractSourcesDeps or automatically for
|
||||
// properties tagged with `android:"path"` AND it was added using a module reference of
|
||||
// :moduleName{outputTag}.
|
||||
func IsSourceDepTagWithOutputTag(depTag blueprint.DependencyTag, outputTag string) bool {
|
||||
t, ok := depTag.(sourceOrOutputDependencyTag)
|
||||
return ok && t.tag == outputTag
|
||||
}
|
||||
|
||||
// Adds necessary dependencies to satisfy filegroup or generated sources modules listed in srcFiles
|
||||
// using ":module" syntax, if any.
|
||||
//
|
||||
|
|
|
@ -63,7 +63,8 @@ func (p *pathDepsMutatorTestModule) GenerateAndroidBuildActions(ctx ModuleContex
|
|||
|
||||
if p.props.Foo != "" {
|
||||
// Make sure there is only one dependency on a module listed in a property present in multiple property structs
|
||||
if ctx.GetDirectDepWithTag(SrcIsModule(p.props.Foo), sourceOrOutputDepTag("")) == nil {
|
||||
m := SrcIsModule(p.props.Foo)
|
||||
if GetModuleFromPathDep(ctx, m, "") == nil {
|
||||
ctx.ModuleErrorf("GetDirectDepWithTag failed")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -446,7 +446,7 @@ func (p OutputPaths) Strings() []string {
|
|||
// If the dependency is not found, a missingErrorDependency is returned.
|
||||
// If the module dependency is not a SourceFileProducer or OutputFileProducer, appropriate errors will be returned.
|
||||
func getPathsFromModuleDep(ctx ModuleWithDepsPathContext, path, moduleName, tag string) (Paths, error) {
|
||||
module := ctx.GetDirectDepWithTag(moduleName, sourceOrOutputDepTag(tag))
|
||||
module := GetModuleFromPathDep(ctx, moduleName, tag)
|
||||
if module == nil {
|
||||
return nil, missingDependencyError{[]string{moduleName}}
|
||||
}
|
||||
|
@ -474,6 +474,22 @@ func getPathsFromModuleDep(ctx ModuleWithDepsPathContext, path, moduleName, tag
|
|||
}
|
||||
}
|
||||
|
||||
// GetModuleFromPathDep will return the module that was added as a dependency automatically for
|
||||
// properties tagged with `android:"path"` or manually using ExtractSourceDeps or
|
||||
// ExtractSourcesDeps.
|
||||
//
|
||||
// The moduleName and tag supplied to this should be the values returned from SrcIsModuleWithTag.
|
||||
// Or, if no tag is expected then the moduleName should be the value returned by SrcIsModule and
|
||||
// the tag must be "".
|
||||
//
|
||||
// If tag is "" then the returned module will be the dependency that was added for ":moduleName".
|
||||
// Otherwise, it is the dependency that was added for ":moduleName{tag}".
|
||||
//
|
||||
// TODO(b/193228441) Make this handle fully qualified names, e.g. //namespace:moduleName.
|
||||
func GetModuleFromPathDep(ctx ModuleWithDepsPathContext, moduleName, tag string) blueprint.Module {
|
||||
return ctx.GetDirectDepWithTag(moduleName, sourceOrOutputDepTag(tag))
|
||||
}
|
||||
|
||||
// PathsAndMissingDepsForModuleSrcExcludes returns a Paths{} containing the resolved references in
|
||||
// paths, minus those listed in excludes. Elements of paths and excludes are resolved as:
|
||||
// * filepath, relative to local module directory, resolves as a filepath relative to the local
|
||||
|
|
|
@ -990,7 +990,9 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
|
|||
case procMacroDepTag:
|
||||
directProcMacroDeps = append(directProcMacroDeps, rustDep)
|
||||
mod.Properties.AndroidMkProcMacroLibs = append(mod.Properties.AndroidMkProcMacroLibs, makeLibName)
|
||||
case android.SourceDepTag:
|
||||
}
|
||||
|
||||
if android.IsSourceDepTagWithOutputTag(depTag, "") {
|
||||
// Since these deps are added in path_properties.go via AddDependencies, we need to ensure the correct
|
||||
// OS/Arch variant is used.
|
||||
var helper string
|
||||
|
@ -1120,8 +1122,7 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
|
|||
}
|
||||
|
||||
if srcDep, ok := dep.(android.SourceFileProducer); ok {
|
||||
switch depTag {
|
||||
case android.SourceDepTag:
|
||||
if android.IsSourceDepTagWithOutputTag(depTag, "") {
|
||||
// These are usually genrules which don't have per-target variants.
|
||||
directSrcDeps = append(directSrcDeps, srcDep)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue