Add non_apex.exclude_shared_libs to cc
This can be used to add apex-specific shared_libs to a CC module. It would be nice if we could have apex.shared_libs. But it would make code much harder to follow because we need to record the shared_libs list as "exclude list" for non-apex anyway. Bug: 312510312 Test: m libhardware libhardware.vendor libhardware.vendor.com.google.cf.ir # check DTNEEDED for libapexsupport # only apex-variant should have the dependency Change-Id: I56a3dc280127d8ba44337707444ea226a49ccf0f
This commit is contained in:
10
cc/cc.go
10
cc/cc.go
@@ -141,6 +141,8 @@ type Deps struct {
|
|||||||
|
|
||||||
// List of libs that need to be excluded for APEX variant
|
// List of libs that need to be excluded for APEX variant
|
||||||
ExcludeLibsForApex []string
|
ExcludeLibsForApex []string
|
||||||
|
// List of libs that need to be excluded for non-APEX variant
|
||||||
|
ExcludeLibsForNonApex []string
|
||||||
}
|
}
|
||||||
|
|
||||||
// PathDeps is a struct containing file paths to dependencies of a module.
|
// PathDeps is a struct containing file paths to dependencies of a module.
|
||||||
@@ -728,6 +730,8 @@ type libraryDependencyTag struct {
|
|||||||
|
|
||||||
// Whether or not this dependency has to be followed for the apex variants
|
// Whether or not this dependency has to be followed for the apex variants
|
||||||
excludeInApex bool
|
excludeInApex bool
|
||||||
|
// Whether or not this dependency has to be followed for the non-apex variants
|
||||||
|
excludeInNonApex bool
|
||||||
|
|
||||||
// If true, don't automatically export symbols from the static library into a shared library.
|
// If true, don't automatically export symbols from the static library into a shared library.
|
||||||
unexportedSymbols bool
|
unexportedSymbols bool
|
||||||
@@ -2819,6 +2823,9 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
|
|||||||
if inList(lib, deps.ExcludeLibsForApex) {
|
if inList(lib, deps.ExcludeLibsForApex) {
|
||||||
depTag.excludeInApex = true
|
depTag.excludeInApex = true
|
||||||
}
|
}
|
||||||
|
if inList(lib, deps.ExcludeLibsForNonApex) {
|
||||||
|
depTag.excludeInNonApex = true
|
||||||
|
}
|
||||||
|
|
||||||
name, version := StubsLibNameAndVersion(lib)
|
name, version := StubsLibNameAndVersion(lib)
|
||||||
if apiLibraryName, ok := apiImportInfo.SharedLibs[name]; ok && !ctx.OtherModuleExists(name) {
|
if apiLibraryName, ok := apiImportInfo.SharedLibs[name]; ok && !ctx.OtherModuleExists(name) {
|
||||||
@@ -3335,6 +3342,9 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
|
|||||||
if !apexInfo.IsForPlatform() && libDepTag.excludeInApex {
|
if !apexInfo.IsForPlatform() && libDepTag.excludeInApex {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if apexInfo.IsForPlatform() && libDepTag.excludeInNonApex {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
depExporterInfo := ctx.OtherModuleProvider(dep, FlagExporterInfoProvider).(FlagExporterInfo)
|
depExporterInfo := ctx.OtherModuleProvider(dep, FlagExporterInfoProvider).(FlagExporterInfo)
|
||||||
|
|
||||||
|
@@ -214,6 +214,11 @@ type BaseLinkerProperties struct {
|
|||||||
// variant of the C/C++ module.
|
// variant of the C/C++ module.
|
||||||
Exclude_static_libs []string
|
Exclude_static_libs []string
|
||||||
}
|
}
|
||||||
|
Non_apex struct {
|
||||||
|
// list of shared libs that should not be used to build the non-apex
|
||||||
|
// variant of the C/C++ module.
|
||||||
|
Exclude_shared_libs []string
|
||||||
|
}
|
||||||
} `android:"arch_variant"`
|
} `android:"arch_variant"`
|
||||||
|
|
||||||
// make android::build:GetBuildNumber() available containing the build ID.
|
// make android::build:GetBuildNumber() available containing the build ID.
|
||||||
@@ -300,6 +305,10 @@ func (linker *baseLinker) linkerDeps(ctx DepsContext, deps Deps) Deps {
|
|||||||
// variants.
|
// variants.
|
||||||
deps.ExcludeLibsForApex = append(deps.ExcludeLibsForApex, linker.Properties.Target.Apex.Exclude_shared_libs...)
|
deps.ExcludeLibsForApex = append(deps.ExcludeLibsForApex, linker.Properties.Target.Apex.Exclude_shared_libs...)
|
||||||
deps.ExcludeLibsForApex = append(deps.ExcludeLibsForApex, linker.Properties.Target.Apex.Exclude_static_libs...)
|
deps.ExcludeLibsForApex = append(deps.ExcludeLibsForApex, linker.Properties.Target.Apex.Exclude_static_libs...)
|
||||||
|
// Record the libraries that need to be excluded when building for non-APEX variants
|
||||||
|
// for the same reason above. This is used for marking deps and marked deps are
|
||||||
|
// ignored for non-apex variants.
|
||||||
|
deps.ExcludeLibsForNonApex = append(deps.ExcludeLibsForNonApex, linker.Properties.Target.Non_apex.Exclude_shared_libs...)
|
||||||
|
|
||||||
if Bool(linker.Properties.Use_version_lib) {
|
if Bool(linker.Properties.Use_version_lib) {
|
||||||
deps.WholeStaticLibs = append(deps.WholeStaticLibs, "libbuildversion")
|
deps.WholeStaticLibs = append(deps.WholeStaticLibs, "libbuildversion")
|
||||||
|
Reference in New Issue
Block a user