Start unblocking com.android.runtime deps
Adds support to warn rather than error about missing deps in order to
suport modules in build/soong with deps outside of build/sooong in
bp2build integration tests.
Test: build/bazel/ci/bp2build.sh
Change-Id: I1282bccd37a3fc9f33555d34e68d7f0873d8272c
diff --git a/android/bazel_paths.go b/android/bazel_paths.go
index 62e6156..f353a9d 100644
--- a/android/bazel_paths.go
+++ b/android/bazel_paths.go
@@ -92,6 +92,7 @@
GetDirectDep(name string) (blueprint.Module, blueprint.DependencyTag)
ModuleFromName(name string) (blueprint.Module, bool)
AddUnconvertedBp2buildDep(string)
+ AddMissingBp2buildDep(dep string)
}
// BazelLabelForModuleDeps expects a list of reference to other modules, ("<module>"
@@ -129,8 +130,10 @@
}
if m, t := SrcIsModuleWithTag(module); m != "" {
l := getOtherModuleLabel(ctx, m, t, moduleToLabelFn)
- l.OriginalModuleName = bpText
- labels.Includes = append(labels.Includes, l)
+ if l != nil {
+ l.OriginalModuleName = bpText
+ labels.Includes = append(labels.Includes, *l)
+ }
} else {
ctx.ModuleErrorf("%q, is not a module reference", module)
}
@@ -157,11 +160,17 @@
}
func BazelLabelForModuleSrcSingle(ctx BazelConversionPathContext, path string) bazel.Label {
- return BazelLabelForModuleSrcExcludes(ctx, []string{path}, []string(nil)).Includes[0]
+ 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 {
- return BazelLabelForModuleDepsExcludes(ctx, []string{path}, []string(nil)).Includes[0]
+ if srcs := BazelLabelForModuleDepsExcludes(ctx, []string{path}, []string(nil)).Includes; len(srcs) > 0 {
+ return srcs[0]
+ }
+ return bazel.Label{}
}
// BazelLabelForModuleSrc expects a list of path (relative to local module directory) and module
@@ -328,9 +337,9 @@
for _, p := range paths {
if m, tag := SrcIsModuleWithTag(p); m != "" {
l := getOtherModuleLabel(ctx, m, tag, BazelModuleLabel)
- if !InList(l.Label, expandedExcludes) {
+ if l != nil && !InList(l.Label, expandedExcludes) {
l.OriginalModuleName = fmt.Sprintf(":%s", m)
- labels.Includes = append(labels.Includes, l)
+ labels.Includes = append(labels.Includes, *l)
}
} else {
var expandedPaths []bazel.Label
@@ -354,10 +363,16 @@
// 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 {
+ labelFromModule func(BazelConversionPathContext, blueprint.Module) string) *bazel.Label {
m, _ := ctx.ModuleFromName(dep)
+ // The module was not found in an Android.bp file, this is often due to:
+ // * a limited manifest
+ // * a required module not being converted from Android.mk
if m == nil {
- panic(fmt.Errorf("No module named %q found, but was a direct dep of %q", dep, ctx.Module().Name()))
+ ctx.AddMissingBp2buildDep(dep)
+ return &bazel.Label{
+ Label: ":" + dep + "__BP2BUILD__MISSING__DEP",
+ }
}
if !convertedToBazel(ctx, m) {
ctx.AddUnconvertedBp2buildDep(dep)
@@ -371,7 +386,7 @@
otherLabel = bazelShortLabel(otherLabel)
}
- return bazel.Label{
+ return &bazel.Label{
Label: otherLabel,
}
}