cc_prebuilt_library respect module name and stem
Installed name of prebuilt shared library should be stem or module name. For example: cc_prebuilt_library_shared { name: "libfoo", srcs: ["libbar.so"], } should install with the filename libfoo.so, and cc_prebuilt_library_shared { name: "libfoo", stem: "libbaz", srcs: ["libbar.so"], } should install with the filename libbaz.so. Prebuilt Windows PE library should specify its import library. For example: cc_prebuilt_library_shared { name: "libfoo", srcs: ["libfoo.dll"], windows_import_lib: "libfoo.lib", enabled: false, target: { windows: { enabled: true, }, }, } Bug: 151744695 Test: prebuilt_test.go && built walleye-userdebug Change-Id: Ia8d0afb7fa46783c670870440432779c5fc7321a
This commit is contained in:
@@ -43,6 +43,11 @@ type prebuiltLinkerProperties struct {
|
||||
// Check the prebuilt ELF files (e.g. DT_SONAME, DT_NEEDED, resolution of undefined
|
||||
// symbols, etc), default true.
|
||||
Check_elf_files *bool
|
||||
|
||||
// Optionally provide an import library if this is a Windows PE DLL prebuilt.
|
||||
// This is needed only if this library is linked by other modules in build time.
|
||||
// Only makes sense for the Windows target.
|
||||
Windows_import_lib *string `android:"path,arch_variant"`
|
||||
}
|
||||
|
||||
type prebuiltLinker struct {
|
||||
@@ -109,9 +114,16 @@ func (p *prebuiltLibraryLinker) link(ctx ModuleContext,
|
||||
|
||||
in := android.PathForModuleSrc(ctx, srcs[0])
|
||||
|
||||
if p.static() {
|
||||
return in
|
||||
}
|
||||
|
||||
if p.shared() {
|
||||
p.unstrippedOutputFile = in
|
||||
libName := p.libraryDecorator.getLibName(ctx) + flags.Toolchain.ShlibSuffix()
|
||||
outputFile := android.PathForModuleOut(ctx, libName)
|
||||
var implicits android.Paths
|
||||
|
||||
if p.needsStrip(ctx) {
|
||||
stripped := android.PathForModuleOut(ctx, "stripped", libName)
|
||||
p.stripExecutableOrSharedLib(ctx, in, stripped, builderFlags)
|
||||
@@ -122,10 +134,41 @@ func (p *prebuiltLibraryLinker) link(ctx ModuleContext,
|
||||
// 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)
|
||||
}
|
||||
TransformSharedObjectToToc(ctx, outputFile, tocFile, builderFlags)
|
||||
|
||||
return in
|
||||
if ctx.Windows() && p.properties.Windows_import_lib != nil {
|
||||
// Consumers of this library actually links to the import library in build
|
||||
// time and dynamically links to the DLL in run time. i.e.
|
||||
// a.exe <-- static link --> foo.lib <-- dynamic link --> foo.dll
|
||||
importLibSrc := android.PathForModuleSrc(ctx, String(p.properties.Windows_import_lib))
|
||||
importLibName := p.libraryDecorator.getLibName(ctx) + ".lib"
|
||||
importLibOutputFile := android.PathForModuleOut(ctx, importLibName)
|
||||
implicits = append(implicits, importLibOutputFile)
|
||||
|
||||
ctx.Build(pctx, android.BuildParams{
|
||||
Rule: android.Cp,
|
||||
Description: "prebuilt import library",
|
||||
Input: importLibSrc,
|
||||
Output: importLibOutputFile,
|
||||
Args: map[string]string{
|
||||
"cpFlags": "-L",
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
ctx.Build(pctx, android.BuildParams{
|
||||
Rule: android.Cp,
|
||||
Description: "prebuilt shared library",
|
||||
Implicits: implicits,
|
||||
Input: in,
|
||||
Output: outputFile,
|
||||
Args: map[string]string{
|
||||
"cpFlags": "-L",
|
||||
},
|
||||
})
|
||||
|
||||
return outputFile
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
Reference in New Issue
Block a user