Add stripping and toc support to Soong cc_prebuilt modules

Bug: 113936524
Test: m checkbuild
Change-Id: I67ec2e94d349924c3e209939030b204fdaff9c47
This commit is contained in:
Colin Cross 2018-09-05 14:20:03 -07:00
parent 02b04bb299
commit 88f6fefeb4
2 changed files with 35 additions and 7 deletions

View file

@ -76,8 +76,29 @@ func (p *prebuiltLibraryLinker) link(ctx ModuleContext,
p.libraryDecorator.exportIncludes(ctx, "-I")
p.libraryDecorator.reexportFlags(deps.ReexportedFlags)
p.libraryDecorator.reexportDeps(deps.ReexportedFlagsDeps)
// TODO(ccross): .toc optimization, stripping, packing
return p.Prebuilt.SingleSourcePath(ctx)
builderFlags := flagsToBuilderFlags(flags)
in := p.Prebuilt.SingleSourcePath(ctx)
if p.shared() {
libName := ctx.baseModuleName() + flags.Toolchain.ShlibSuffix()
if p.needsStrip(ctx) {
stripped := android.PathForModuleOut(ctx, "stripped", libName)
p.strip(ctx, in, stripped, builderFlags)
in = stripped
}
if !ctx.Darwin() && !ctx.Windows() {
// Optimize out relinking against shared libraries whose interface hasn't changed by
// depending on a table of contents file instead of the library itself.
tocFile := android.PathForModuleOut(ctx, libName+".toc")
p.tocFile = android.OptionalPathForPath(tocFile)
TransformSharedObjectToToc(ctx, in, tocFile, builderFlags)
}
}
return in
}
return nil
@ -136,17 +157,24 @@ func (p *prebuiltBinaryLinker) link(ctx ModuleContext,
flags Flags, deps PathDeps, objs Objects) android.Path {
// TODO(ccross): verify shared library dependencies
if len(p.properties.Srcs) > 0 {
// TODO(ccross): .toc optimization, stripping, packing
builderFlags := flagsToBuilderFlags(flags)
fileName := p.getStem(ctx) + flags.Toolchain.ExecutableSuffix()
in := p.Prebuilt.SingleSourcePath(ctx)
if p.needsStrip(ctx) {
stripped := android.PathForModuleOut(ctx, "stripped", fileName)
p.strip(ctx, in, stripped, builderFlags)
in = stripped
}
// Copy binaries to a name matching the final installed name
fileName := p.getStem(ctx) + flags.Toolchain.ExecutableSuffix()
outputFile := android.PathForModuleOut(ctx, fileName)
ctx.Build(pctx, android.BuildParams{
Rule: android.CpExecutable,
Description: "prebuilt",
Output: outputFile,
Input: p.Prebuilt.SingleSourcePath(ctx),
Input: in,
})
return outputFile

View file

@ -33,7 +33,7 @@ func (stripper *stripper) needsStrip(ctx ModuleContext) bool {
return !ctx.Config().EmbeddedInMake() && !Bool(stripper.StripProperties.Strip.None)
}
func (stripper *stripper) strip(ctx ModuleContext, in, out android.ModuleOutPath,
func (stripper *stripper) strip(ctx ModuleContext, in android.Path, out android.ModuleOutPath,
flags builderFlags) {
if ctx.Darwin() {
TransformDarwinStrip(ctx, in, out)