summaryrefslogtreecommitdiff
path: root/java/platform_bootclasspath.go
diff options
context:
space:
mode:
authorPaul Duffin <paulduffin@google.com>2021-04-30 14:16:32 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2021-04-30 14:16:32 +0000
commitfdf40504405287492783eb50a500b70277518d0b (patch)
treec60d971f62b7f63f53126fc0dedb875433eef730 /java/platform_bootclasspath.go
parentbb546aaea06291bbec0560f85af4868610a4a73a (diff)
parentd504c3ac8361c4f1e7edc4f1483d8a1d94690720 (diff)
Merge "Fix build failure when building unbundled apps (second try)"
Diffstat (limited to 'java/platform_bootclasspath.go')
-rw-r--r--java/platform_bootclasspath.go73
1 files changed, 56 insertions, 17 deletions
diff --git a/java/platform_bootclasspath.go b/java/platform_bootclasspath.go
index f88823fd0..4cb02e3c6 100644
--- a/java/platform_bootclasspath.go
+++ b/java/platform_bootclasspath.go
@@ -239,6 +239,17 @@ func (b *platformBootclasspathModule) getImageConfig(ctx android.EarlyModuleCont
return defaultBootImageConfig(ctx)
}
+// hiddenAPISupportingModule encapsulates the information provided by any module that contributes to
+// the hidden API processing.
+type hiddenAPISupportingModule struct {
+ module android.Module
+
+ bootDexJar android.Path
+ flagsCSV android.Path
+ indexCSV android.Path
+ metadataCSV android.Path
+}
+
// generateHiddenAPIBuildActions generates all the hidden API related build rules.
func (b *platformBootclasspathModule) generateHiddenAPIBuildActions(ctx android.ModuleContext, modules []android.Module, fragments []android.Module) {
@@ -261,27 +272,55 @@ func (b *platformBootclasspathModule) generateHiddenAPIBuildActions(ctx android.
return
}
- hiddenAPISupportingModules := []hiddenAPISupportingModule{}
- for _, module := range modules {
- if h, ok := module.(hiddenAPISupportingModule); ok {
- if h.bootDexJar() == nil {
- ctx.ModuleErrorf("module %s does not provide a bootDexJar file", module)
- }
- if h.flagsCSV() == nil {
- ctx.ModuleErrorf("module %s does not provide a flagsCSV file", module)
+ // nilPathHandler will check the supplied path and if it is nil then it will either immediately
+ // report an error, or it will defer the error reporting until it is actually used, depending
+ // whether missing dependencies are allowed.
+ var nilPathHandler func(path android.Path, name string, module android.Module) android.Path
+ if ctx.Config().AllowMissingDependencies() {
+ nilPathHandler = func(path android.Path, name string, module android.Module) android.Path {
+ if path == nil {
+ outputPath := android.PathForModuleOut(ctx, "missing", module.Name(), name)
+ path = outputPath
+
+ // Create an error rule that pretends to create the output file but will actually fail if it
+ // is run.
+ ctx.Build(pctx, android.BuildParams{
+ Rule: android.ErrorRule,
+ Output: outputPath,
+ Args: map[string]string{
+ "error": fmt.Sprintf("missing hidden API file: %s for %s", name, module),
+ },
+ })
}
- if h.indexCSV() == nil {
- ctx.ModuleErrorf("module %s does not provide an indexCSV file", module)
+ return path
+ }
+ } else {
+ nilPathHandler = func(path android.Path, name string, module android.Module) android.Path {
+ if path == nil {
+ ctx.ModuleErrorf("module %s does not provide a %s file", module, name)
}
- if h.metadataCSV() == nil {
- ctx.ModuleErrorf("module %s does not provide a metadataCSV file", module)
+ return path
+ }
+ }
+
+ hiddenAPISupportingModules := []hiddenAPISupportingModule{}
+ for _, module := range modules {
+ if h, ok := module.(hiddenAPIIntf); ok {
+ hiddenAPISupportingModule := hiddenAPISupportingModule{
+ module: module,
+ bootDexJar: nilPathHandler(h.bootDexJar(), "bootDexJar", module),
+ flagsCSV: nilPathHandler(h.flagsCSV(), "flagsCSV", module),
+ indexCSV: nilPathHandler(h.indexCSV(), "indexCSV", module),
+ metadataCSV: nilPathHandler(h.metadataCSV(), "metadataCSV", module),
}
+ // If any errors were reported when trying to populate the hiddenAPISupportingModule struct
+ // then don't add it to the list.
if ctx.Failed() {
continue
}
- hiddenAPISupportingModules = append(hiddenAPISupportingModules, h)
+ hiddenAPISupportingModules = append(hiddenAPISupportingModules, hiddenAPISupportingModule)
} else {
ctx.ModuleErrorf("module %s of type %s does not support hidden API processing", module, ctx.OtherModuleType(module))
}
@@ -289,7 +328,7 @@ func (b *platformBootclasspathModule) generateHiddenAPIBuildActions(ctx android.
moduleSpecificFlagsPaths := android.Paths{}
for _, module := range hiddenAPISupportingModules {
- moduleSpecificFlagsPaths = append(moduleSpecificFlagsPaths, module.flagsCSV())
+ moduleSpecificFlagsPaths = append(moduleSpecificFlagsPaths, module.flagsCSV)
}
flagFileInfo := b.properties.Hidden_api.hiddenAPIFlagFileInfo(ctx)
@@ -315,7 +354,7 @@ func (b *platformBootclasspathModule) generateHiddenAPIBuildActions(ctx android.
func (b *platformBootclasspathModule) generateHiddenAPIStubFlagsRules(ctx android.ModuleContext, modules []hiddenAPISupportingModule) {
bootDexJars := android.Paths{}
for _, module := range modules {
- bootDexJars = append(bootDexJars, module.bootDexJar())
+ bootDexJars = append(bootDexJars, module.bootDexJar)
}
sdkKindToStubPaths := hiddenAPIGatherStubLibDexJarPaths(ctx)
@@ -328,7 +367,7 @@ func (b *platformBootclasspathModule) generateHiddenAPIStubFlagsRules(ctx androi
func (b *platformBootclasspathModule) generateHiddenAPIIndexRules(ctx android.ModuleContext, modules []hiddenAPISupportingModule) {
indexes := android.Paths{}
for _, module := range modules {
- indexes = append(indexes, module.indexCSV())
+ indexes = append(indexes, module.indexCSV)
}
rule := android.NewRuleBuilder(pctx, ctx)
@@ -344,7 +383,7 @@ func (b *platformBootclasspathModule) generateHiddenAPIIndexRules(ctx android.Mo
func (b *platformBootclasspathModule) generatedHiddenAPIMetadataRules(ctx android.ModuleContext, modules []hiddenAPISupportingModule) {
metadataCSVFiles := android.Paths{}
for _, module := range modules {
- metadataCSVFiles = append(metadataCSVFiles, module.metadataCSV())
+ metadataCSVFiles = append(metadataCSVFiles, module.metadataCSV)
}
rule := android.NewRuleBuilder(pctx, ctx)