Merge "Propagate stubs to the SDK for libraries that have them."

This commit is contained in:
Treehugger Robot 2020-04-03 17:03:12 +00:00 committed by Gerrit Code Review
commit 237690224e
4 changed files with 96 additions and 1 deletions

View file

@ -586,6 +586,13 @@ func (c *Module) GetDepsInLinkOrder() []android.Path {
return c.depsInLinkOrder
}
func (c *Module) StubsSymbolFile() android.OptionalPath {
if library, ok := c.linker.(*libraryDecorator); ok {
return library.stubsSymbolFile
}
return android.OptionalPath{}
}
func (c *Module) StubsVersions() []string {
if c.linker != nil {
if library, ok := c.linker.(*libraryDecorator); ok {

View file

@ -367,6 +367,9 @@ type libraryDecorator struct {
// Location of the file that should be copied to dist dir when requested
distFile android.OptionalPath
// stubs.symbol_file
stubsSymbolFile android.OptionalPath
versionScriptPath android.ModuleGenPath
post_install_cmds []string
@ -376,7 +379,7 @@ type libraryDecorator struct {
useCoreVariant bool
checkSameCoreVariant bool
// Decorated interafaces
// Decorated interfaces
*baseCompiler
*baseLinker
*baseInstaller
@ -603,6 +606,7 @@ func (library *libraryDecorator) shouldCreateSourceAbiDump(ctx ModuleContext) bo
func (library *libraryDecorator) compile(ctx ModuleContext, flags Flags, deps PathDeps) Objects {
if library.buildStubs() {
library.stubsSymbolFile = android.OptionalPathForModuleSrc(ctx, library.Properties.Stubs.Symbol_file)
objs, versionScript := compileStubLibrary(ctx, flags, String(library.Properties.Stubs.Symbol_file), library.MutatedProperties.StubsVersion, "--apex")
library.versionScriptPath = versionScript
return objs

View file

@ -269,12 +269,21 @@ func addPossiblyArchSpecificProperties(sdkModuleContext android.ModuleContext, b
for property, dirs := range includeDirs {
outputProperties.AddProperty(property, dirs)
}
if len(libInfo.StubsVersion) > 0 {
symbolFilePath := filepath.Join(nativeEtcDir, libInfo.StubsSymbolFile.Path().Base())
builder.CopyToSnapshot(libInfo.StubsSymbolFile.Path(), symbolFilePath)
stubsSet := outputProperties.AddPropertySet("stubs")
stubsSet.AddProperty("symbol_file", symbolFilePath)
stubsSet.AddProperty("versions", []string{libInfo.StubsVersion})
}
}
const (
nativeIncludeDir = "include"
nativeGeneratedIncludeDir = "include_gen"
nativeStubDir = "lib"
nativeEtcDir = "etc"
)
// path to the native library. Relative to <sdk_root>/<api_dir>
@ -335,6 +344,13 @@ type nativeLibInfoProperties struct {
// This field is exported as its contents may not be arch specific.
SystemSharedLibs []string
// The specific stubs version for the lib variant, or empty string if stubs
// are not in use.
StubsVersion string
// The stubs symbol file.
StubsSymbolFile android.OptionalPath
// outputFile is not exported as it is always arch specific.
outputFile android.Path
}
@ -370,6 +386,11 @@ func (p *nativeLibInfoProperties) PopulateFromVariant(ctx android.SdkMemberConte
p.SystemSharedLibs = specifiedDeps.systemSharedLibs
}
p.exportedGeneratedHeaders = ccModule.ExportedGeneratedHeaders()
if ccModule.HasStubsVariants() {
p.StubsVersion = ccModule.StubsVersion()
p.StubsSymbolFile = ccModule.StubsSymbolFile()
}
}
func (p *nativeLibInfoProperties) AddToPropertySet(ctx android.SdkMemberContext, propertySet android.BpPropertySet) {

View file

@ -32,6 +32,7 @@ func testSdkWithCc(t *testing.T, bp string) *testSdkResult {
"arm64/include/Arm64Test.h": nil,
"libfoo.so": nil,
"aidl/foo/bar/Test.aidl": nil,
"some/where/stubslib.map.txt": nil,
}
return testSdkWithFs(t, bp, fs)
}
@ -1739,3 +1740,65 @@ sdk_snapshot {
}
`))
}
func TestStubsLibrary(t *testing.T) {
result := testSdkWithCc(t, `
sdk {
name: "mysdk",
native_shared_libs: ["stubslib"],
}
cc_library {
name: "stubslib",
stubs: {
symbol_file: "some/where/stubslib.map.txt",
versions: ["1", "2", "3"],
},
}
`)
result.CheckSnapshot("mysdk", "",
checkAndroidBpContents(`
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_shared {
name: "mysdk_stubslib@current",
sdk_member_name: "stubslib",
installable: false,
stubs: {
symbol_file: "etc/stubslib.map.txt",
versions: ["3"],
},
arch: {
arm64: {
srcs: ["arm64/lib/stubslib.so"],
},
arm: {
srcs: ["arm/lib/stubslib.so"],
},
},
}
cc_prebuilt_library_shared {
name: "stubslib",
prefer: false,
stubs: {
symbol_file: "etc/stubslib.map.txt",
versions: ["3"],
},
arch: {
arm64: {
srcs: ["arm64/lib/stubslib.so"],
},
arm: {
srcs: ["arm/lib/stubslib.so"],
},
},
}
sdk_snapshot {
name: "mysdk@current",
native_shared_libs: ["mysdk_stubslib@current"],
}
`))
}