Merge "create, but dont register, bp2build_deps mutator" into main
This commit is contained in:
@@ -102,8 +102,8 @@ type BazelConversionPathContext interface {
|
||||
// BazelLabelForModuleDeps expects a list of reference to other modules, ("<module>"
|
||||
// or ":<module>") and returns a Bazel-compatible label which corresponds to dependencies on the
|
||||
// module within the given ctx.
|
||||
func BazelLabelForModuleDeps(ctx BazelConversionPathContext, modules []string) bazel.LabelList {
|
||||
return BazelLabelForModuleDepsWithFn(ctx, modules, BazelModuleLabel)
|
||||
func BazelLabelForModuleDeps(ctx Bp2buildMutatorContext, modules []string) bazel.LabelList {
|
||||
return BazelLabelForModuleDepsWithFn(ctx, modules, BazelModuleLabel, true)
|
||||
}
|
||||
|
||||
// BazelLabelForModuleWholeDepsExcludes expects two lists: modules (containing modules to include in
|
||||
@@ -112,15 +112,16 @@ func BazelLabelForModuleDeps(ctx BazelConversionPathContext, modules []string) b
|
||||
// list which corresponds to dependencies on the module within the given ctx, and the excluded
|
||||
// dependencies. Prebuilt dependencies will be appended with _alwayslink so they can be handled as
|
||||
// whole static libraries.
|
||||
func BazelLabelForModuleDepsExcludes(ctx BazelConversionPathContext, modules, excludes []string) bazel.LabelList {
|
||||
func BazelLabelForModuleDepsExcludes(ctx Bp2buildMutatorContext, modules, excludes []string) bazel.LabelList {
|
||||
return BazelLabelForModuleDepsExcludesWithFn(ctx, modules, excludes, BazelModuleLabel)
|
||||
}
|
||||
|
||||
// BazelLabelForModuleDepsWithFn expects a list of reference to other modules, ("<module>"
|
||||
// or ":<module>") and applies moduleToLabelFn to determine and return a Bazel-compatible label
|
||||
// which corresponds to dependencies on the module within the given ctx.
|
||||
func BazelLabelForModuleDepsWithFn(ctx BazelConversionPathContext, modules []string,
|
||||
moduleToLabelFn func(BazelConversionPathContext, blueprint.Module) string) bazel.LabelList {
|
||||
func BazelLabelForModuleDepsWithFn(ctx Bp2buildMutatorContext, modules []string,
|
||||
moduleToLabelFn func(BazelConversionPathContext, blueprint.Module) string,
|
||||
markAsDeps bool) bazel.LabelList {
|
||||
var labels bazel.LabelList
|
||||
// In some cases, a nil string list is different than an explicitly empty list.
|
||||
if len(modules) == 0 && modules != nil {
|
||||
@@ -134,7 +135,7 @@ func BazelLabelForModuleDepsWithFn(ctx BazelConversionPathContext, modules []str
|
||||
module = ":" + module
|
||||
}
|
||||
if m, t := SrcIsModuleWithTag(module); m != "" {
|
||||
l := getOtherModuleLabel(ctx, m, t, moduleToLabelFn)
|
||||
l := getOtherModuleLabel(ctx, m, t, moduleToLabelFn, markAsDeps)
|
||||
if l != nil {
|
||||
l.OriginalModuleName = bpText
|
||||
labels.Includes = append(labels.Includes, *l)
|
||||
@@ -151,27 +152,27 @@ func BazelLabelForModuleDepsWithFn(ctx BazelConversionPathContext, modules []str
|
||||
// to other modules, ("<module>" or ":<module>"). It applies moduleToLabelFn to determine and return a
|
||||
// Bazel-compatible label list which corresponds to dependencies on the module within the given ctx, and
|
||||
// the excluded dependencies.
|
||||
func BazelLabelForModuleDepsExcludesWithFn(ctx BazelConversionPathContext, modules, excludes []string,
|
||||
func BazelLabelForModuleDepsExcludesWithFn(ctx Bp2buildMutatorContext, modules, excludes []string,
|
||||
moduleToLabelFn func(BazelConversionPathContext, blueprint.Module) string) bazel.LabelList {
|
||||
moduleLabels := BazelLabelForModuleDepsWithFn(ctx, RemoveListFromList(modules, excludes), moduleToLabelFn)
|
||||
moduleLabels := BazelLabelForModuleDepsWithFn(ctx, RemoveListFromList(modules, excludes), moduleToLabelFn, true)
|
||||
if len(excludes) == 0 {
|
||||
return moduleLabels
|
||||
}
|
||||
excludeLabels := BazelLabelForModuleDepsWithFn(ctx, excludes, moduleToLabelFn)
|
||||
excludeLabels := BazelLabelForModuleDepsWithFn(ctx, excludes, moduleToLabelFn, false)
|
||||
return bazel.LabelList{
|
||||
Includes: moduleLabels.Includes,
|
||||
Excludes: excludeLabels.Includes,
|
||||
}
|
||||
}
|
||||
|
||||
func BazelLabelForModuleSrcSingle(ctx BazelConversionPathContext, path string) bazel.Label {
|
||||
func BazelLabelForModuleSrcSingle(ctx Bp2buildMutatorContext, path string) bazel.Label {
|
||||
if srcs := BazelLabelForModuleSrcExcludes(ctx, []string{path}, []string(nil)).Includes; len(srcs) > 0 {
|
||||
return srcs[0]
|
||||
}
|
||||
return bazel.Label{}
|
||||
}
|
||||
|
||||
func BazelLabelForModuleDepSingle(ctx BazelConversionPathContext, path string) bazel.Label {
|
||||
func BazelLabelForModuleDepSingle(ctx Bp2buildMutatorContext, path string) bazel.Label {
|
||||
if srcs := BazelLabelForModuleDepsExcludes(ctx, []string{path}, []string(nil)).Includes; len(srcs) > 0 {
|
||||
return srcs[0]
|
||||
}
|
||||
@@ -184,7 +185,7 @@ func BazelLabelForModuleDepSingle(ctx BazelConversionPathContext, path string) b
|
||||
// relative if within the same package).
|
||||
// Properties must have been annotated with struct tag `android:"path"` so that dependencies modules
|
||||
// will have already been handled by the pathdeps mutator.
|
||||
func BazelLabelForModuleSrc(ctx BazelConversionPathContext, paths []string) bazel.LabelList {
|
||||
func BazelLabelForModuleSrc(ctx Bp2buildMutatorContext, paths []string) bazel.LabelList {
|
||||
return BazelLabelForModuleSrcExcludes(ctx, paths, []string(nil))
|
||||
}
|
||||
|
||||
@@ -194,13 +195,13 @@ func BazelLabelForModuleSrc(ctx BazelConversionPathContext, paths []string) baze
|
||||
// (absolute if in a different package or relative if within the same package).
|
||||
// Properties must have been annotated with struct tag `android:"path"` so that dependencies modules
|
||||
// will have already been handled by the pathdeps mutator.
|
||||
func BazelLabelForModuleSrcExcludes(ctx BazelConversionPathContext, paths, excludes []string) bazel.LabelList {
|
||||
excludeLabels := expandSrcsForBazel(ctx, excludes, []string(nil))
|
||||
func BazelLabelForModuleSrcExcludes(ctx Bp2buildMutatorContext, paths, excludes []string) bazel.LabelList {
|
||||
excludeLabels := expandSrcsForBazel(ctx, excludes, []string(nil), false)
|
||||
excluded := make([]string, 0, len(excludeLabels.Includes))
|
||||
for _, e := range excludeLabels.Includes {
|
||||
excluded = append(excluded, e.Label)
|
||||
}
|
||||
labels := expandSrcsForBazel(ctx, paths, excluded)
|
||||
labels := expandSrcsForBazel(ctx, paths, excluded, true)
|
||||
labels.Excludes = excludeLabels.Includes
|
||||
labels = TransformSubpackagePaths(ctx.Config(), ctx.ModuleDir(), labels)
|
||||
return labels
|
||||
@@ -361,6 +362,12 @@ func RootToModuleRelativePaths(ctx BazelConversionPathContext, paths Paths) []ba
|
||||
return newPaths
|
||||
}
|
||||
|
||||
var Bp2buildDepTag bp2buildDepTag
|
||||
|
||||
type bp2buildDepTag struct {
|
||||
blueprint.BaseDependencyTag
|
||||
}
|
||||
|
||||
// expandSrcsForBazel returns bazel.LabelList with paths rooted from the module's local source
|
||||
// directory and Bazel target labels, excluding those included in the excludes argument (which
|
||||
// should already be expanded to resolve references to Soong-modules). Valid elements of paths
|
||||
@@ -383,7 +390,7 @@ func RootToModuleRelativePaths(ctx BazelConversionPathContext, paths Paths) []ba
|
||||
// Properties passed as the paths or excludes argument must have been annotated with struct tag
|
||||
// `android:"path"` so that dependencies on other modules will have already been handled by the
|
||||
// pathdeps mutator.
|
||||
func expandSrcsForBazel(ctx BazelConversionPathContext, paths, expandedExcludes []string) bazel.LabelList {
|
||||
func expandSrcsForBazel(ctx Bp2buildMutatorContext, paths, expandedExcludes []string, markAsDeps bool) bazel.LabelList {
|
||||
if paths == nil {
|
||||
return bazel.LabelList{}
|
||||
}
|
||||
@@ -400,7 +407,7 @@ func expandSrcsForBazel(ctx BazelConversionPathContext, paths, expandedExcludes
|
||||
|
||||
for _, p := range paths {
|
||||
if m, tag := SrcIsModuleWithTag(p); m != "" {
|
||||
l := getOtherModuleLabel(ctx, m, tag, BazelModuleLabel)
|
||||
l := getOtherModuleLabel(ctx, m, tag, BazelModuleLabel, markAsDeps)
|
||||
if l != nil && !InList(l.Label, expandedExcludes) {
|
||||
if strings.HasPrefix(m, "//") {
|
||||
// this is a module in a soong namespace
|
||||
@@ -432,8 +439,9 @@ func expandSrcsForBazel(ctx BazelConversionPathContext, paths, expandedExcludes
|
||||
// getOtherModuleLabel returns a bazel.Label for the given dependency/tag combination for the
|
||||
// module. The label will be relative to the current directory if appropriate. The dependency must
|
||||
// already be resolved by either deps mutator or path deps mutator.
|
||||
func getOtherModuleLabel(ctx BazelConversionPathContext, dep, tag string,
|
||||
labelFromModule func(BazelConversionPathContext, blueprint.Module) string) *bazel.Label {
|
||||
func getOtherModuleLabel(ctx Bp2buildMutatorContext, dep, tag string,
|
||||
labelFromModule func(BazelConversionPathContext, blueprint.Module) string,
|
||||
markAsDep bool) *bazel.Label {
|
||||
m, _ := ctx.ModuleFromName(dep)
|
||||
// The module was not found in an Android.bp file, this is often due to:
|
||||
// * a limited manifest
|
||||
@@ -444,6 +452,13 @@ func getOtherModuleLabel(ctx BazelConversionPathContext, dep, tag string,
|
||||
Label: ":" + dep + "__BP2BUILD__MISSING__DEP",
|
||||
}
|
||||
}
|
||||
if markAsDep {
|
||||
// Don't count dependencies of "libc". This is a hack to circumvent the
|
||||
// fact that, in a variantless build graph, "libc" has a dependency on itself.
|
||||
if ctx.ModuleName() != "libc" {
|
||||
ctx.AddDependency(ctx.Module(), Bp2buildDepTag, dep)
|
||||
}
|
||||
}
|
||||
if !convertedToBazel(ctx, m) {
|
||||
ctx.AddUnconvertedBp2buildDep(dep)
|
||||
}
|
||||
|
Reference in New Issue
Block a user