Fix: static dependency across an APEX is lost
am: 16e91a067d
Change-Id: I3686643a6606dda25dba39971198e43c6e638404
This commit is contained in:
@@ -41,6 +41,7 @@ func testApex(t *testing.T, bp string) *android.TestContext {
|
||||
|
||||
ctx.RegisterModuleType("cc_library", android.ModuleFactoryAdaptor(cc.LibraryFactory))
|
||||
ctx.RegisterModuleType("cc_library_shared", android.ModuleFactoryAdaptor(cc.LibrarySharedFactory))
|
||||
ctx.RegisterModuleType("cc_binary", android.ModuleFactoryAdaptor(cc.BinaryFactory))
|
||||
ctx.RegisterModuleType("cc_object", android.ModuleFactoryAdaptor(cc.ObjectFactory))
|
||||
ctx.RegisterModuleType("llndk_library", android.ModuleFactoryAdaptor(cc.LlndkLibraryFactory))
|
||||
ctx.RegisterModuleType("toolchain_library", android.ModuleFactoryAdaptor(cc.ToolchainLibraryFactory))
|
||||
@@ -614,3 +615,54 @@ func TestUseVendor(t *testing.T) {
|
||||
ensureNotContains(t, inputsString, "android_arm64_armv8-a_core_shared_myapex/mylib.so")
|
||||
ensureNotContains(t, inputsString, "android_arm64_armv8-a_core_shared_myapex/mylib2.so")
|
||||
}
|
||||
|
||||
func TestStaticLinking(t *testing.T) {
|
||||
ctx := testApex(t, `
|
||||
apex {
|
||||
name: "myapex",
|
||||
key: "myapex.key",
|
||||
native_shared_libs: ["mylib"],
|
||||
}
|
||||
|
||||
apex_key {
|
||||
name: "myapex.key",
|
||||
public_key: "testkey.avbpubkey",
|
||||
private_key: "testkey.pem",
|
||||
}
|
||||
|
||||
cc_library {
|
||||
name: "mylib",
|
||||
srcs: ["mylib.cpp"],
|
||||
system_shared_libs: [],
|
||||
stl: "none",
|
||||
stubs: {
|
||||
versions: ["1", "2", "3"],
|
||||
},
|
||||
}
|
||||
|
||||
cc_binary {
|
||||
name: "not_in_apex",
|
||||
srcs: ["mylib.cpp"],
|
||||
static_libs: ["mylib"],
|
||||
static_executable: true,
|
||||
system_shared_libs: [],
|
||||
stl: "none",
|
||||
}
|
||||
|
||||
cc_object {
|
||||
name: "crtbegin_static",
|
||||
stl: "none",
|
||||
}
|
||||
|
||||
cc_object {
|
||||
name: "crtend_android",
|
||||
stl: "none",
|
||||
}
|
||||
|
||||
`)
|
||||
|
||||
ldFlags := ctx.ModuleForTests("not_in_apex", "android_arm64_armv8-a_core").Rule("ld").Args["libFlags"]
|
||||
|
||||
// Ensure that not_in_apex is linking with the static variant of mylib
|
||||
ensureContains(t, ldFlags, "mylib/android_arm64_armv8-a_core_static/mylib.a")
|
||||
}
|
||||
|
@@ -51,12 +51,12 @@ type BinaryLinkerProperties struct {
|
||||
}
|
||||
|
||||
func init() {
|
||||
android.RegisterModuleType("cc_binary", binaryFactory)
|
||||
android.RegisterModuleType("cc_binary", BinaryFactory)
|
||||
android.RegisterModuleType("cc_binary_host", binaryHostFactory)
|
||||
}
|
||||
|
||||
// Module factory for binaries
|
||||
func binaryFactory() android.Module {
|
||||
func BinaryFactory() android.Module {
|
||||
module, _ := NewBinary(android.HostAndDeviceSupported)
|
||||
return module.Init()
|
||||
}
|
||||
|
7
cc/cc.go
7
cc/cc.go
@@ -1419,7 +1419,12 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
|
||||
}
|
||||
|
||||
if t, ok := depTag.(dependencyTag); ok && t.library {
|
||||
if dependentLibrary, ok := ccDep.linker.(*libraryDecorator); ok {
|
||||
depIsStatic := false
|
||||
switch depTag {
|
||||
case staticDepTag, staticExportDepTag, lateStaticDepTag, wholeStaticDepTag:
|
||||
depIsStatic = true
|
||||
}
|
||||
if dependentLibrary, ok := ccDep.linker.(*libraryDecorator); ok && !depIsStatic {
|
||||
depIsStubs := dependentLibrary.buildStubs()
|
||||
depHasStubs := ccDep.HasStubsVariants()
|
||||
depInSameApex := android.DirectlyInApex(c.ApexName(), depName)
|
||||
|
@@ -53,7 +53,7 @@ func TestMain(m *testing.M) {
|
||||
|
||||
func createTestContext(t *testing.T, config android.Config, bp string) *android.TestContext {
|
||||
ctx := android.NewTestArchContext()
|
||||
ctx.RegisterModuleType("cc_binary", android.ModuleFactoryAdaptor(binaryFactory))
|
||||
ctx.RegisterModuleType("cc_binary", android.ModuleFactoryAdaptor(BinaryFactory))
|
||||
ctx.RegisterModuleType("cc_library", android.ModuleFactoryAdaptor(LibraryFactory))
|
||||
ctx.RegisterModuleType("cc_library_shared", android.ModuleFactoryAdaptor(LibrarySharedFactory))
|
||||
ctx.RegisterModuleType("cc_library_headers", android.ModuleFactoryAdaptor(LibraryHeaderFactory))
|
||||
|
Reference in New Issue
Block a user