Add stripping and toc support to Soong cc_prebuilt modules
Bug: 113936524 Test: m checkbuild Change-Id: I67ec2e94d349924c3e209939030b204fdaff9c47
This commit is contained in:
@@ -76,8 +76,29 @@ func (p *prebuiltLibraryLinker) link(ctx ModuleContext,
|
|||||||
p.libraryDecorator.exportIncludes(ctx, "-I")
|
p.libraryDecorator.exportIncludes(ctx, "-I")
|
||||||
p.libraryDecorator.reexportFlags(deps.ReexportedFlags)
|
p.libraryDecorator.reexportFlags(deps.ReexportedFlags)
|
||||||
p.libraryDecorator.reexportDeps(deps.ReexportedFlagsDeps)
|
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
|
return nil
|
||||||
@@ -136,17 +157,24 @@ func (p *prebuiltBinaryLinker) link(ctx ModuleContext,
|
|||||||
flags Flags, deps PathDeps, objs Objects) android.Path {
|
flags Flags, deps PathDeps, objs Objects) android.Path {
|
||||||
// TODO(ccross): verify shared library dependencies
|
// TODO(ccross): verify shared library dependencies
|
||||||
if len(p.properties.Srcs) > 0 {
|
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
|
// Copy binaries to a name matching the final installed name
|
||||||
fileName := p.getStem(ctx) + flags.Toolchain.ExecutableSuffix()
|
|
||||||
outputFile := android.PathForModuleOut(ctx, fileName)
|
outputFile := android.PathForModuleOut(ctx, fileName)
|
||||||
|
|
||||||
ctx.Build(pctx, android.BuildParams{
|
ctx.Build(pctx, android.BuildParams{
|
||||||
Rule: android.CpExecutable,
|
Rule: android.CpExecutable,
|
||||||
Description: "prebuilt",
|
Description: "prebuilt",
|
||||||
Output: outputFile,
|
Output: outputFile,
|
||||||
Input: p.Prebuilt.SingleSourcePath(ctx),
|
Input: in,
|
||||||
})
|
})
|
||||||
|
|
||||||
return outputFile
|
return outputFile
|
||||||
|
@@ -33,7 +33,7 @@ func (stripper *stripper) needsStrip(ctx ModuleContext) bool {
|
|||||||
return !ctx.Config().EmbeddedInMake() && !Bool(stripper.StripProperties.Strip.None)
|
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) {
|
flags builderFlags) {
|
||||||
if ctx.Darwin() {
|
if ctx.Darwin() {
|
||||||
TransformDarwinStrip(ctx, in, out)
|
TransformDarwinStrip(ctx, in, out)
|
||||||
|
Reference in New Issue
Block a user