aboutsummaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2015-10-29 15:25:03 -0700
committerColin Cross <ccross@android.com>2015-11-03 15:46:08 -0800
commit6362e278481ea0cb14d31cd7fd3760116b6d7643 (patch)
tree16221aa2499c2e6ec896c3a87645b441a57c07e8 /cc
parent06a931bdb6228bdbe425696b01e27522f4b00d71 (diff)
downloadbuild_soong-6362e278481ea0cb14d31cd7fd3760116b6d7643.tar.gz
build_soong-6362e278481ea0cb14d31cd7fd3760116b6d7643.tar.bz2
build_soong-6362e278481ea0cb14d31cd7fd3760116b6d7643.zip
Remove EarlyMutators and DynamicDependencies
EarlyMutators are identical to BottomUpMutators, except they run before DynamicDependencies. DynamicDependencies can be replaced with a BottomUpMutator. Replace both EarlyMutators and DynamicDependencies with BottomUpMutators, which allows setting the order between all mutators through registration order. Change-Id: Id1305d798d3d2da592061c89d7c10a71780b71a3
Diffstat (limited to 'cc')
-rw-r--r--cc/cc.go65
1 files changed, 24 insertions, 41 deletions
diff --git a/cc/cc.go b/cc/cc.go
index a1b5a424..b23ab43b 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -57,8 +57,9 @@ func init() {
// LinkageMutator must be registered after common.ArchMutator, but that is guaranteed by
// the Go initialization order because this package depends on common, so common's init
// functions will run first.
- soong.RegisterEarlyMutator("link", LinkageMutator)
- soong.RegisterEarlyMutator("test_per_src", TestPerSrcMutator)
+ common.RegisterBottomUpMutator("link", linkageMutator)
+ common.RegisterBottomUpMutator("test_per_src", testPerSrcMutator)
+ common.RegisterBottomUpMutator("deps", depsMutator)
}
var (
@@ -140,20 +141,25 @@ func init() {
pctx.StaticVariable("clangPath", "${SrcDir}/prebuilts/clang/${HostPrebuiltTag}/host/3.6/bin/")
}
+type CCModuleContext common.AndroidBaseContext
+
// Building C/C++ code is handled by objects that satisfy this interface via composition
type CCModuleType interface {
common.AndroidModule
// Modify property values after parsing Blueprints file but before starting dependency
// resolution or build rule generation
- ModifyProperties(common.AndroidBaseContext)
+ ModifyProperties(CCModuleContext)
// Modify the ccFlags
flags(common.AndroidModuleContext, CCFlags) CCFlags
- // Return list of dependency names for use in AndroidDynamicDependencies and in depsToPaths
+ // Return list of dependency names for use in depsMutator
depNames(common.AndroidBaseContext, CCDeps) CCDeps
+ // Add dynamic dependencies
+ depsMutator(common.AndroidBottomUpMutatorContext)
+
// Compile objects into final module
compileModule(common.AndroidModuleContext, CCFlags, CCDeps, []string)
@@ -392,8 +398,6 @@ func (c *CCBase) ccModuleType() CCModuleType {
return c.module
}
-var _ common.AndroidDynamicDepender = (*CCBase)(nil)
-
func (c *CCBase) findToolchain(ctx common.AndroidModuleContext) Toolchain {
arch := ctx.Arch()
hod := ctx.HostOrDevice()
@@ -405,7 +409,7 @@ func (c *CCBase) findToolchain(ctx common.AndroidModuleContext) Toolchain {
return factory(arch.ArchVariant, arch.CpuVariant)
}
-func (c *CCBase) ModifyProperties(ctx common.AndroidBaseContext) {
+func (c *CCBase) ModifyProperties(ctx CCModuleContext) {
}
func (c *CCBase) depNames(ctx common.AndroidBaseContext, depNames CCDeps) CCDeps {
@@ -416,9 +420,7 @@ func (c *CCBase) depNames(ctx common.AndroidBaseContext, depNames CCDeps) CCDeps
return depNames
}
-func (c *CCBase) AndroidDynamicDependencies(ctx common.AndroidDynamicDependerModuleContext) []string {
- c.module.ModifyProperties(ctx)
-
+func (c *CCBase) depsMutator(ctx common.AndroidBottomUpMutatorContext) {
c.savedDepNames = c.module.depNames(ctx, CCDeps{})
c.savedDepNames.WholeStaticLibs = lastUniqueElements(c.savedDepNames.WholeStaticLibs)
c.savedDepNames.StaticLibs = lastUniqueElements(c.savedDepNames.StaticLibs)
@@ -431,15 +433,20 @@ func (c *CCBase) AndroidDynamicDependencies(ctx common.AndroidDynamicDependerMod
ctx.AddVariationDependencies([]blueprint.Variation{{"link", "shared"}}, c.savedDepNames.SharedLibs...)
- ret := append([]string(nil), c.savedDepNames.ObjFiles...)
+ ctx.AddDependency(ctx.Module(), c.savedDepNames.ObjFiles...)
if c.savedDepNames.CrtBegin != "" {
- ret = append(ret, c.savedDepNames.CrtBegin)
+ ctx.AddDependency(ctx.Module(), c.savedDepNames.CrtBegin)
}
if c.savedDepNames.CrtEnd != "" {
- ret = append(ret, c.savedDepNames.CrtEnd)
+ ctx.AddDependency(ctx.Module(), c.savedDepNames.CrtEnd)
}
+}
- return ret
+func depsMutator(ctx common.AndroidBottomUpMutatorContext) {
+ if c, ok := ctx.Module().(CCModuleType); ok {
+ c.ModifyProperties(ctx)
+ c.depsMutator(ctx)
+ }
}
// Create a ccFlags struct that collects the compile flags from global values,
@@ -1285,11 +1292,6 @@ func CCObjectFactory() (blueprint.Module, []interface{}) {
return newCCBase(&module.CCBase, module, common.DeviceSupported, common.MultilibBoth)
}
-func (*ccObject) AndroidDynamicDependencies(ctx common.AndroidDynamicDependerModuleContext) []string {
- // object files can't have any dynamic dependencies
- return nil
-}
-
func (*ccObject) depNames(ctx common.AndroidBaseContext, depNames CCDeps) CCDeps {
// object files can't have any dynamic dependencies
return CCDeps{}
@@ -1418,7 +1420,7 @@ func CCBinaryFactory() (blueprint.Module, []interface{}) {
return NewCCBinary(module, module, common.HostAndDeviceSupported)
}
-func (c *CCBinary) ModifyProperties(ctx common.AndroidBaseContext) {
+func (c *CCBinary) ModifyProperties(ctx CCModuleContext) {
if ctx.Darwin() {
c.BinaryProperties.Static_executable = proptools.BoolPtr(false)
}
@@ -1519,7 +1521,7 @@ type testPerSrc interface {
var _ testPerSrc = (*CCBinary)(nil)
-func TestPerSrcMutator(mctx blueprint.EarlyMutatorContext) {
+func testPerSrcMutator(mctx common.AndroidBottomUpMutatorContext) {
if test, ok := mctx.Module().(testPerSrc); ok {
if test.testPerSrc() {
testNames := make([]string, len(test.binary().Properties.Srcs))
@@ -1691,11 +1693,6 @@ type toolchainLibrary struct {
CCLibrary
}
-func (*toolchainLibrary) AndroidDynamicDependencies(ctx common.AndroidDynamicDependerModuleContext) []string {
- // toolchain libraries can't have any dependencies
- return nil
-}
-
func (*toolchainLibrary) depNames(ctx common.AndroidBaseContext, depNames CCDeps) CCDeps {
// toolchain libraries can't have any dependencies
return CCDeps{}
@@ -1752,13 +1749,6 @@ type ndkPrebuiltObject struct {
ccObject
}
-func (*ndkPrebuiltObject) AndroidDynamicDependencies(
- ctx common.AndroidDynamicDependerModuleContext) []string {
-
- // NDK objects can't have any dependencies
- return nil
-}
-
func (*ndkPrebuiltObject) depNames(ctx common.AndroidBaseContext, depNames CCDeps) CCDeps {
// NDK objects can't have any dependencies
return CCDeps{}
@@ -1789,13 +1779,6 @@ type ndkPrebuiltLibrary struct {
CCLibrary
}
-func (*ndkPrebuiltLibrary) AndroidDynamicDependencies(
- ctx common.AndroidDynamicDependerModuleContext) []string {
-
- // NDK libraries can't have any dependencies
- return nil
-}
-
func (*ndkPrebuiltLibrary) depNames(ctx common.AndroidBaseContext, depNames CCDeps) CCDeps {
// NDK libraries can't have any dependencies
return CCDeps{}
@@ -1896,7 +1879,7 @@ func (c *ndkPrebuiltStl) compileModule(ctx common.AndroidModuleContext, flags CC
c.out = libDir + "/" + libName + libExt
}
-func LinkageMutator(mctx blueprint.EarlyMutatorContext) {
+func linkageMutator(mctx common.AndroidBottomUpMutatorContext) {
if c, ok := mctx.Module().(ccLinkedInterface); ok {
var modules []blueprint.Module
if c.buildStatic() && c.buildShared() {