cc: improve combined static/shared libraries

Allow combined static/shared libraries to specify separate dependencies,
and recompile objects if static or shared cflags are set.

Change-Id: I9fd71d8debd5ade5637389ee38e793082d6d18bb
This commit is contained in:
Colin Cross
2015-04-28 13:23:52 -07:00
parent 18b6dc5d25
commit 2732e9a43f

View File

@@ -922,10 +922,16 @@ type CCLibrary struct {
Static struct { Static struct {
Srcs []string `android:"arch_variant"` Srcs []string `android:"arch_variant"`
Cflags []string `android:"arch_variant"` Cflags []string `android:"arch_variant"`
Whole_static_libs []string `android:"arch_variant"`
Static_libs []string `android:"arch_variant"`
Shared_libs []string `android:"arch_variant"`
} `android:"arch_variant"` } `android:"arch_variant"`
Shared struct { Shared struct {
Srcs []string `android:"arch_variant"` Srcs []string `android:"arch_variant"`
Cflags []string `android:"arch_variant"` Cflags []string `android:"arch_variant"`
Whole_static_libs []string `android:"arch_variant"`
Static_libs []string `android:"arch_variant"`
Shared_libs []string `android:"arch_variant"`
} `android:"arch_variant"` } `android:"arch_variant"`
} }
} }
@@ -971,11 +977,18 @@ func CCLibraryFactory() (blueprint.Module, []interface{}) {
func (c *CCLibrary) depNames(ctx common.AndroidBaseContext, depNames CCDeps) CCDeps { func (c *CCLibrary) depNames(ctx common.AndroidBaseContext, depNames CCDeps) CCDeps {
depNames = c.CCLinked.depNames(ctx, depNames) depNames = c.CCLinked.depNames(ctx, depNames)
if !c.static() { if c.static() {
depNames.WholeStaticLibs = append(depNames.WholeStaticLibs, c.LibraryProperties.Static.Whole_static_libs...)
depNames.StaticLibs = append(depNames.StaticLibs, c.LibraryProperties.Static.Static_libs...)
depNames.SharedLibs = append(depNames.SharedLibs, c.LibraryProperties.Static.Shared_libs...)
} else {
if ctx.Device() { if ctx.Device() {
depNames.CrtBegin = "crtbegin_so" depNames.CrtBegin = "crtbegin_so"
depNames.CrtEnd = "crtend_so" depNames.CrtEnd = "crtend_so"
} }
depNames.WholeStaticLibs = append(depNames.WholeStaticLibs, c.LibraryProperties.Shared.Whole_static_libs...)
depNames.StaticLibs = append(depNames.StaticLibs, c.LibraryProperties.Shared.Static_libs...)
depNames.SharedLibs = append(depNames.SharedLibs, c.LibraryProperties.Shared.Shared_libs...)
} }
return depNames return depNames
@@ -1082,8 +1095,11 @@ func (c *CCLibrary) compileModule(ctx common.AndroidModuleContext,
if c.getReuseFrom().ccLibrary() == c { if c.getReuseFrom().ccLibrary() == c {
c.reuseObjFiles = objFiles c.reuseObjFiles = objFiles
} else { } else {
if c.getReuseFrom().ccLibrary().LibraryProperties.Static.Cflags == nil &&
c.LibraryProperties.Shared.Cflags == nil {
objFiles = append([]string(nil), c.getReuseFrom().getReuseObjFiles()...) objFiles = append([]string(nil), c.getReuseFrom().getReuseObjFiles()...)
} }
}
if c.static() { if c.static() {
c.compileStaticLibrary(ctx, flags, deps, objFiles) c.compileStaticLibrary(ctx, flags, deps, objFiles)