Merge changes Ifd529f88,I2fb4429a,I67ec2e94

* changes:
  Fix logic for adding gnu debuglink to match Make
  Add Soong support for stripping all symbols
  Add stripping and toc support to Soong cc_prebuilt modules
This commit is contained in:
Treehugger Robot 2018-09-06 23:05:09 +00:00 committed by Gerrit Code Review
commit 37710d3c71
3 changed files with 48 additions and 10 deletions

View File

@ -572,6 +572,10 @@ func (c *config) MinimizeJavaDebugInfo() bool {
return Bool(c.productVariables.MinimizeJavaDebugInfo) && !Bool(c.productVariables.Eng)
}
func (c *config) Debuggable() bool {
return Bool(c.productVariables.Debuggable)
}
func (c *config) DevicePrefer32BitExecutables() bool {
return Bool(c.productVariables.DevicePrefer32BitExecutables)
}

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

@ -21,6 +21,7 @@ import (
type StripProperties struct {
Strip struct {
None *bool
All *bool
Keep_symbols *bool
}
}
@ -33,14 +34,19 @@ 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)
} else {
flags.stripKeepSymbols = Bool(stripper.StripProperties.Strip.Keep_symbols)
// TODO(ccross): don't add gnu debuglink for user builds
flags.stripAddGnuDebuglink = true
if Bool(stripper.StripProperties.Strip.Keep_symbols) {
flags.stripKeepSymbols = true
} else if !Bool(stripper.StripProperties.Strip.All) {
flags.stripKeepMiniDebugInfo = true
}
if ctx.Config().Debuggable() && !flags.stripKeepMiniDebugInfo {
flags.stripAddGnuDebuglink = true
}
TransformStrip(ctx, in, out, flags)
}
}