support PRODUCT_SOURCE_ROOT_DIRS product variable
Soong analyzes the entire source tree even though not every lunch target
needs to know about every module. For example, OEM sources can be
ignored for cuttlefish products. This functionality allows blueprint to
ignore a list of undesired directories.
Bug: 269457150
Change-Id: I1eec5d7b6a268cae4c633d8d89ed485598ebca45
diff --git a/android/config.go b/android/config.go
index e0b661b..9d53091 100644
--- a/android/config.go
+++ b/android/config.go
@@ -1179,6 +1179,10 @@
return append([]string(nil), c.productVariables.NamespacesToExport...)
}
+func (c *config) SourceRootDirs() []string {
+ return c.productVariables.SourceRootDirs
+}
+
func (c *config) IncludeTags() []string {
return c.productVariables.IncludeTags
}
diff --git a/android/namespace.go b/android/namespace.go
index b43ffdf..f357ca7 100644
--- a/android/namespace.go
+++ b/android/namespace.go
@@ -225,6 +225,10 @@
return ns, nil
}
+func (r *NameResolver) NewSkippedModule(ctx blueprint.NamespaceContext, name string, skipInfo blueprint.SkippedModuleInfo) {
+ r.rootNamespace.moduleContainer.NewSkippedModule(ctx, name, skipInfo)
+}
+
func (r *NameResolver) AllModules() []blueprint.ModuleGroup {
childLists := [][]blueprint.ModuleGroup{}
totalCount := 0
@@ -300,7 +304,7 @@
for _, name := range namespace.importedNamespaceNames {
imp, ok := r.namespaceAt(name)
if !ok {
- return fmt.Errorf("namespace %v does not exist", name)
+ return fmt.Errorf("namespace %v does not exist; Some necessary modules may have been skipped by Soong. Check if PRODUCT_SOURCE_ROOT_DIRS is pruning necessary Android.bp files.", name)
}
namespace.visibleNamespaces = append(namespace.visibleNamespaces, imp)
}
diff --git a/android/register.go b/android/register.go
index 9a3d3aa..1a3db9d 100644
--- a/android/register.go
+++ b/android/register.go
@@ -162,6 +162,7 @@
ctx := &Context{blueprint.NewContext(), config}
ctx.SetSrcDir(absSrcDir)
ctx.AddIncludeTags(config.IncludeTags()...)
+ ctx.AddSourceRootDirs(config.SourceRootDirs()...)
return ctx
}
diff --git a/android/variable.go b/android/variable.go
index 8c5c0bc..04cc205 100644
--- a/android/variable.go
+++ b/android/variable.go
@@ -461,7 +461,8 @@
IgnorePrefer32OnDevice bool `json:",omitempty"`
- IncludeTags []string `json:",omitempty"`
+ IncludeTags []string `json:",omitempty"`
+ SourceRootDirs []string `json:",omitempty"`
}
func boolPtr(v bool) *bool {
diff --git a/cmd/soong_build/main.go b/cmd/soong_build/main.go
index 3a4d71a..8a42aa6 100644
--- a/cmd/soong_build/main.go
+++ b/cmd/soong_build/main.go
@@ -104,6 +104,7 @@
ctx.SetNameInterface(newNameResolver(configuration))
ctx.SetAllowMissingDependencies(configuration.AllowMissingDependencies())
ctx.AddIncludeTags(configuration.IncludeTags()...)
+ ctx.AddSourceRootDirs(configuration.SourceRootDirs()...)
return ctx
}
diff --git a/ui/build/config.go b/ui/build/config.go
index 20cc9fb..9e02cd6 100644
--- a/ui/build/config.go
+++ b/ui/build/config.go
@@ -117,7 +117,8 @@
bazelForceEnabledModules string
- includeTags []string
+ includeTags []string
+ sourceRootDirs []string
// Data source to write ninja weight list
ninjaWeightListSource NinjaWeightListSource
@@ -1185,6 +1186,14 @@
return c.parallel
}
+func (c *configImpl) GetSourceRootDirs() []string {
+ return c.sourceRootDirs
+}
+
+func (c *configImpl) SetSourceRootDirs(i []string) {
+ c.sourceRootDirs = i
+}
+
func (c *configImpl) GetIncludeTags() []string {
return c.includeTags
}
diff --git a/ui/build/dumpvars.go b/ui/build/dumpvars.go
index a9c298f..efe7478 100644
--- a/ui/build/dumpvars.go
+++ b/ui/build/dumpvars.go
@@ -148,6 +148,7 @@
"PLATFORM_VERSION_CODENAME",
"PLATFORM_VERSION",
"PRODUCT_INCLUDE_TAGS",
+ "PRODUCT_SOURCE_ROOT_DIRS",
"TARGET_PRODUCT",
"TARGET_BUILD_VARIANT",
"TARGET_BUILD_APPS",
@@ -299,4 +300,5 @@
config.SetBuildBrokenUsesNetwork(makeVars["BUILD_BROKEN_USES_NETWORK"] == "true")
config.SetBuildBrokenNinjaUsesEnvVars(strings.Fields(makeVars["BUILD_BROKEN_NINJA_USES_ENV_VARS"]))
config.SetIncludeTags(strings.Fields(makeVars["PRODUCT_INCLUDE_TAGS"]))
+ config.SetSourceRootDirs(strings.Fields(makeVars["PRODUCT_SOURCE_ROOT_DIRS"]))
}
diff --git a/ui/build/soong.go b/ui/build/soong.go
index 871e637..c4c984f 100644
--- a/ui/build/soong.go
+++ b/ui/build/soong.go
@@ -410,6 +410,7 @@
blueprintCtx := blueprint.NewContext()
blueprintCtx.AddIncludeTags(config.GetIncludeTags()...)
+ blueprintCtx.AddSourceRootDirs(config.GetSourceRootDirs()...)
blueprintCtx.SetIgnoreUnknownModuleTypes(true)
blueprintConfig := BlueprintConfig{
soongOutDir: config.SoongOutDir(),