Merge "Propagate stubs to the SDK for libraries that have them."
diff --git a/cc/cc.go b/cc/cc.go
index 88fede4..c42914b 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -586,6 +586,13 @@
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 {
diff --git a/cc/library.go b/cc/library.go
index b9f448b..26e86f9 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -367,6 +367,9 @@
// 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 @@
useCoreVariant bool
checkSameCoreVariant bool
- // Decorated interafaces
+ // Decorated interfaces
*baseCompiler
*baseLinker
*baseInstaller
@@ -603,6 +606,7 @@
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
diff --git a/cc/library_sdk_member.go b/cc/library_sdk_member.go
index 0a11af1..4e4df5b 100644
--- a/cc/library_sdk_member.go
+++ b/cc/library_sdk_member.go
@@ -269,12 +269,21 @@
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 @@
// 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 @@
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) {
diff --git a/sdk/cc_sdk_test.go b/sdk/cc_sdk_test.go
index eb64bcc..9e6086f 100644
--- a/sdk/cc_sdk_test.go
+++ b/sdk/cc_sdk_test.go
@@ -32,6 +32,7 @@
"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 @@
}
`))
}
+
+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"],
+}
+`))
+}