Merge "Propagate empty vs unspecified system_shared_libs correctly."
This commit is contained in:
@@ -18,6 +18,7 @@ import (
|
||||
"path/filepath"
|
||||
|
||||
"android/soong/android"
|
||||
|
||||
"github.com/google/blueprint"
|
||||
)
|
||||
|
||||
@@ -137,7 +138,9 @@ func (p *nativeBinaryInfoProperties) AddToPropertySet(ctx android.SdkMemberConte
|
||||
propertySet.AddPropertyWithTag("shared_libs", p.SharedLibs, builder.SdkMemberReferencePropertyTag(false))
|
||||
}
|
||||
|
||||
if len(p.SystemSharedLibs) > 0 {
|
||||
// SystemSharedLibs needs to be propagated if it's a list, even if it's empty,
|
||||
// so check for non-nil instead of nonzero length.
|
||||
if p.SystemSharedLibs != nil {
|
||||
propertySet.AddPropertyWithTag("system_shared_libs", p.SystemSharedLibs, builder.SdkMemberReferencePropertyTag(false))
|
||||
}
|
||||
}
|
||||
|
2
cc/cc.go
2
cc/cc.go
@@ -378,7 +378,7 @@ type linker interface {
|
||||
|
||||
type specifiedDeps struct {
|
||||
sharedLibs []string
|
||||
systemSharedLibs []string
|
||||
systemSharedLibs []string // Note nil and [] are semantically distinct.
|
||||
}
|
||||
|
||||
type installer interface {
|
||||
|
@@ -749,10 +749,12 @@ func (library *libraryDecorator) compilerDeps(ctx DepsContext, deps Deps) Deps {
|
||||
|
||||
func (library *libraryDecorator) linkerDeps(ctx DepsContext, deps Deps) Deps {
|
||||
if library.static() {
|
||||
// Compare with nil because an empty list needs to be propagated.
|
||||
if library.StaticProperties.Static.System_shared_libs != nil {
|
||||
library.baseLinker.Properties.System_shared_libs = library.StaticProperties.Static.System_shared_libs
|
||||
}
|
||||
} else if library.shared() {
|
||||
// Compare with nil because an empty list needs to be propagated.
|
||||
if library.SharedProperties.Shared.System_shared_libs != nil {
|
||||
library.baseLinker.Properties.System_shared_libs = library.SharedProperties.Shared.System_shared_libs
|
||||
}
|
||||
@@ -828,10 +830,21 @@ func (library *libraryDecorator) linkerSpecifiedDeps(specifiedDeps specifiedDeps
|
||||
}
|
||||
|
||||
specifiedDeps.sharedLibs = append(specifiedDeps.sharedLibs, properties.Shared_libs...)
|
||||
specifiedDeps.systemSharedLibs = append(specifiedDeps.systemSharedLibs, properties.System_shared_libs...)
|
||||
|
||||
// Must distinguish nil and [] in system_shared_libs - ensure that [] in
|
||||
// either input list doesn't come out as nil.
|
||||
if specifiedDeps.systemSharedLibs == nil {
|
||||
specifiedDeps.systemSharedLibs = properties.System_shared_libs
|
||||
} else {
|
||||
specifiedDeps.systemSharedLibs = append(specifiedDeps.systemSharedLibs, properties.System_shared_libs...)
|
||||
}
|
||||
|
||||
specifiedDeps.sharedLibs = android.FirstUniqueStrings(specifiedDeps.sharedLibs)
|
||||
specifiedDeps.systemSharedLibs = android.FirstUniqueStrings(specifiedDeps.systemSharedLibs)
|
||||
if len(specifiedDeps.systemSharedLibs) > 0 {
|
||||
// Skip this if systemSharedLibs is either nil or [], to ensure they are
|
||||
// retained.
|
||||
specifiedDeps.systemSharedLibs = android.FirstUniqueStrings(specifiedDeps.systemSharedLibs)
|
||||
}
|
||||
return specifiedDeps
|
||||
}
|
||||
|
||||
@@ -1371,6 +1384,8 @@ func reuseStaticLibrary(mctx android.BottomUpMutatorContext, static, shared *Mod
|
||||
len(sharedCompiler.SharedProperties.Shared.Static_libs) == 0 &&
|
||||
len(staticCompiler.StaticProperties.Static.Shared_libs) == 0 &&
|
||||
len(sharedCompiler.SharedProperties.Shared.Shared_libs) == 0 &&
|
||||
// Compare System_shared_libs properties with nil because empty lists are
|
||||
// semantically significant for them.
|
||||
staticCompiler.StaticProperties.Static.System_shared_libs == nil &&
|
||||
sharedCompiler.SharedProperties.Shared.System_shared_libs == nil {
|
||||
|
||||
|
@@ -212,7 +212,9 @@ func addPossiblyArchSpecificProperties(sdkModuleContext android.ModuleContext, b
|
||||
outputProperties.AddPropertyWithTag("shared_libs", libInfo.SharedLibs, builder.SdkMemberReferencePropertyTag(false))
|
||||
}
|
||||
|
||||
if len(libInfo.SystemSharedLibs) > 0 {
|
||||
// SystemSharedLibs needs to be propagated if it's a list, even if it's empty,
|
||||
// so check for non-nil instead of nonzero length.
|
||||
if libInfo.SystemSharedLibs != nil {
|
||||
outputProperties.AddPropertyWithTag("system_shared_libs", libInfo.SystemSharedLibs, builder.SdkMemberReferencePropertyTag(false))
|
||||
}
|
||||
|
||||
@@ -327,7 +329,8 @@ type nativeLibInfoProperties struct {
|
||||
// This field is exported as its contents may not be arch specific.
|
||||
SharedLibs []string
|
||||
|
||||
// The set of system shared libraries
|
||||
// The set of system shared libraries. Note nil and [] are semantically
|
||||
// distinct - see BaseLinkerProperties.System_shared_libs.
|
||||
//
|
||||
// This field is exported as its contents may not be arch specific.
|
||||
SystemSharedLibs []string
|
||||
|
10
cc/linker.go
10
cc/linker.go
@@ -491,7 +491,15 @@ func (linker *baseLinker) link(ctx ModuleContext,
|
||||
|
||||
func (linker *baseLinker) linkerSpecifiedDeps(specifiedDeps specifiedDeps) specifiedDeps {
|
||||
specifiedDeps.sharedLibs = append(specifiedDeps.sharedLibs, linker.Properties.Shared_libs...)
|
||||
specifiedDeps.systemSharedLibs = append(specifiedDeps.systemSharedLibs, linker.Properties.System_shared_libs...)
|
||||
|
||||
// Must distinguish nil and [] in system_shared_libs - ensure that [] in
|
||||
// either input list doesn't come out as nil.
|
||||
if specifiedDeps.systemSharedLibs == nil {
|
||||
specifiedDeps.systemSharedLibs = linker.Properties.System_shared_libs
|
||||
} else {
|
||||
specifiedDeps.systemSharedLibs = append(specifiedDeps.systemSharedLibs, linker.Properties.System_shared_libs...)
|
||||
}
|
||||
|
||||
return specifiedDeps
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user