From 649d8174b8550b5d5a18258d5e093dcd213a1581 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Thu, 10 Dec 2020 12:30:21 -0800 Subject: [PATCH] Require libraries in header_libs to be cc_library_header Allowing header_libs to refer to a cc_library, cc_library_static or cc_library_shared was unintentional, make it an error. Fixes: 173252016 Test: m checkbuild Change-Id: I9f7986f6ca37deddf1f208b15a87d3c0cff25585 --- cc/cc.go | 9 ++++++++- cc/library.go | 24 +++++++++++++++--------- cc/linkable.go | 7 +++++++ cc/prebuilt.go | 6 ++++++ 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/cc/cc.go b/cc/cc.go index ae75c1d34..f5f2d04cf 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -2446,7 +2446,14 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { switch { case libDepTag.header(): - // nothing + if !ctx.OtherModuleHasProvider(dep, HeaderLibraryInfoProvider) { + if !ctx.Config().AllowMissingDependencies() { + ctx.ModuleErrorf("module %q is not a header library", depName) + } else { + ctx.AddMissingDependencies([]string{depName}) + } + return + } case libDepTag.shared(): if !ctx.OtherModuleHasProvider(dep, SharedLibraryInfoProvider) { if !ctx.Config().AllowMissingDependencies() { diff --git a/cc/library.go b/cc/library.go index b796aafe3..3244db7fd 100644 --- a/cc/library.go +++ b/cc/library.go @@ -940,16 +940,22 @@ func (library *libraryDecorator) linkStatic(ctx ModuleContext, ctx.CheckbuildFile(outputFile) - ctx.SetProvider(StaticLibraryInfoProvider, StaticLibraryInfo{ - StaticLibrary: outputFile, - ReuseObjects: library.reuseObjects, - Objects: library.objects, + if library.static() { + ctx.SetProvider(StaticLibraryInfoProvider, StaticLibraryInfo{ + StaticLibrary: outputFile, + ReuseObjects: library.reuseObjects, + Objects: library.objects, - TransitiveStaticLibrariesForOrdering: android.NewDepSetBuilder(android.TOPOLOGICAL). - Direct(outputFile). - Transitive(deps.TranstiveStaticLibrariesForOrdering). - Build(), - }) + TransitiveStaticLibrariesForOrdering: android.NewDepSetBuilder(android.TOPOLOGICAL). + Direct(outputFile). + Transitive(deps.TranstiveStaticLibrariesForOrdering). + Build(), + }) + } + + if library.header() { + ctx.SetProvider(HeaderLibraryInfoProvider, HeaderLibraryInfo{}) + } return outputFile } diff --git a/cc/linkable.go b/cc/linkable.go index ddf395009..94b5a54ac 100644 --- a/cc/linkable.go +++ b/cc/linkable.go @@ -125,6 +125,13 @@ type StaticLibraryInfo struct { var StaticLibraryInfoProvider = blueprint.NewProvider(StaticLibraryInfo{}) +// HeaderLibraryInfo is a marker provider that identifies a module as a header library. +type HeaderLibraryInfo struct { +} + +// HeaderLibraryInfoProvider is a marker provider that identifies a module as a header library. +var HeaderLibraryInfoProvider = blueprint.NewProvider(HeaderLibraryInfo{}) + // FlagExporterInfo is a provider to propagate transitive library information // pertaining to exported include paths and flags. type FlagExporterInfo struct { diff --git a/cc/prebuilt.go b/cc/prebuilt.go index 37df4ba0f..df713409d 100644 --- a/cc/prebuilt.go +++ b/cc/prebuilt.go @@ -190,6 +190,12 @@ func (p *prebuiltLibraryLinker) link(ctx ModuleContext, } } + if p.header() { + ctx.SetProvider(HeaderLibraryInfoProvider, HeaderLibraryInfo{}) + + return nil + } + return nil }