Fix: static dependency across an APEX is lost am: 16e91a067d
am: 53cfd00417
Change-Id: I3bf3c9e2c790de063c8670f55482088c55a9f0f4
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", android.ModuleFactoryAdaptor(cc.LibraryFactory))
|
||||||
ctx.RegisterModuleType("cc_library_shared", android.ModuleFactoryAdaptor(cc.LibrarySharedFactory))
|
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("cc_object", android.ModuleFactoryAdaptor(cc.ObjectFactory))
|
||||||
ctx.RegisterModuleType("llndk_library", android.ModuleFactoryAdaptor(cc.LlndkLibraryFactory))
|
ctx.RegisterModuleType("llndk_library", android.ModuleFactoryAdaptor(cc.LlndkLibraryFactory))
|
||||||
ctx.RegisterModuleType("toolchain_library", android.ModuleFactoryAdaptor(cc.ToolchainLibraryFactory))
|
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/mylib.so")
|
||||||
ensureNotContains(t, inputsString, "android_arm64_armv8-a_core_shared_myapex/mylib2.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() {
|
func init() {
|
||||||
android.RegisterModuleType("cc_binary", binaryFactory)
|
android.RegisterModuleType("cc_binary", BinaryFactory)
|
||||||
android.RegisterModuleType("cc_binary_host", binaryHostFactory)
|
android.RegisterModuleType("cc_binary_host", binaryHostFactory)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Module factory for binaries
|
// Module factory for binaries
|
||||||
func binaryFactory() android.Module {
|
func BinaryFactory() android.Module {
|
||||||
module, _ := NewBinary(android.HostAndDeviceSupported)
|
module, _ := NewBinary(android.HostAndDeviceSupported)
|
||||||
return module.Init()
|
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 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()
|
depIsStubs := dependentLibrary.buildStubs()
|
||||||
depHasStubs := ccDep.HasStubsVariants()
|
depHasStubs := ccDep.HasStubsVariants()
|
||||||
depInSameApex := android.DirectlyInApex(c.ApexName(), depName)
|
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 {
|
func createTestContext(t *testing.T, config android.Config, bp string) *android.TestContext {
|
||||||
ctx := android.NewTestArchContext()
|
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", android.ModuleFactoryAdaptor(LibraryFactory))
|
||||||
ctx.RegisterModuleType("cc_library_shared", android.ModuleFactoryAdaptor(LibrarySharedFactory))
|
ctx.RegisterModuleType("cc_library_shared", android.ModuleFactoryAdaptor(LibrarySharedFactory))
|
||||||
ctx.RegisterModuleType("cc_library_headers", android.ModuleFactoryAdaptor(LibraryHeaderFactory))
|
ctx.RegisterModuleType("cc_library_headers", android.ModuleFactoryAdaptor(LibraryHeaderFactory))
|
||||||
|
Reference in New Issue
Block a user