Fix note_memtag bionic libraries in mixed builds

Required fixes:
  - Set MakeLinkType for libraries, even in mixed build mode.
  - Set snapshot header information to empty list, which passes
        validation logic for depending modules

Fixing these libraries also requires a Starlark change to
cc_library_static.bzl, which will be submitted separately.

Additionally, this adds better error messaging in the event that
output files are missing from a mixed-build library.

Test: USE_BAZEL_ANALYSIS=1 m libc
Test: USE_BAZEL_ANALYSIS=1 m runtime-module-sdk
Change-Id: Iad2c4d46359986fb0a43263292a15ed45fabbac7
This commit is contained in:
Chris Parsons
2021-04-02 17:36:47 -04:00
parent 012ae1f4e0
commit eefc9e6a62
4 changed files with 28 additions and 9 deletions

View File

@@ -1646,12 +1646,12 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
c.hideApexVariantFromMake = true
}
c.makeLinkType = GetMakeLinkType(actx, c)
if c.maybeGenerateBazelActions(actx) {
return
}
c.makeLinkType = GetMakeLinkType(actx, c)
ctx := &moduleContext{
ModuleContext: actx,
moduleContextImpl: moduleContextImpl{

View File

@@ -425,11 +425,14 @@ func (handler *staticLibraryBazelHandler) generateBazelBuildActions(ctx android.
if !ok {
return ok
}
if len(outputPaths) != 1 {
if len(outputPaths) > 1 {
// TODO(cparsons): This is actually expected behavior for static libraries with no srcs.
// We should support this.
ctx.ModuleErrorf("expected exactly one output file for '%s', but got %s", label, objPaths)
ctx.ModuleErrorf("expected at most one output file for '%s', but got %s", label, objPaths)
return false
} else if len(outputPaths) == 0 {
handler.module.outputFile = android.OptionalPath{}
return true
}
outputFilePath := android.PathForBazelOut(ctx, outputPaths[0])
handler.module.outputFile = android.OptionalPathForPath(outputFilePath)
@@ -453,7 +456,15 @@ func (handler *staticLibraryBazelHandler) generateBazelBuildActions(ctx android.
Direct(outputFilePath).
Build(),
})
handler.module.outputFile = android.OptionalPathForPath(android.PathForBazelOut(ctx, objPaths[0]))
if i, ok := handler.module.linker.(snapshotLibraryInterface); ok {
// Dependencies on this library will expect collectedSnapshotHeaders to
// be set, otherwise validation will fail. For now, set this to an empty
// list.
// TODO(cparsons): More closely mirror the collectHeadersForSnapshot
// implementation.
i.(*libraryDecorator).collectedSnapshotHeaders = android.Paths{}
}
return ok
}