aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorDan Willemsen <dwillemsen@google.com>2015-06-17 15:17:12 -0700
committerDan Willemsen <dwillemsen@google.com>2015-06-18 12:56:43 -0700
commitbf9207aceba418cc55ddc2a780d4dfea07b88673 (patch)
treea08ee685520a060ed89aeae69516dbdeb8fe266c /common
parent8f101b45fc876b63f2a556c5b19801dbc8ac5fdc (diff)
downloadbuild_soong-bf9207aceba418cc55ddc2a780d4dfea07b88673.tar.gz
build_soong-bf9207aceba418cc55ddc2a780d4dfea07b88673.tar.bz2
build_soong-bf9207aceba418cc55ddc2a780d4dfea07b88673.zip
Create 'androidmk' rule to automatically run androidbp
This finds any Android.bp files with Android modules defined, and if there isn't an Android.mk file in the same directory, it will run androidbp to generate one in $OUT Change-Id: Ie8aef492e8cd28f6c314ce1254730975a1b8991f
Diffstat (limited to 'common')
-rw-r--r--common/defs.go10
-rw-r--r--common/module.go49
2 files changed, 59 insertions, 0 deletions
diff --git a/common/defs.go b/common/defs.go
index 67b93ffe..98464fef 100644
--- a/common/defs.go
+++ b/common/defs.go
@@ -15,7 +15,10 @@
package common
import (
+ "path/filepath"
+
"github.com/google/blueprint"
+ "github.com/google/blueprint/bootstrap"
)
var (
@@ -24,6 +27,13 @@ var (
cpPreserveSymlinks = pctx.VariableConfigMethod("cpPreserveSymlinks",
Config.CpPreserveSymlinksFlags)
+ androidbpCmd = filepath.Join(bootstrap.BinDir, "androidbp")
+ androidbp = pctx.StaticRule("androidbp",
+ blueprint.RuleParams{
+ Command: androidbpCmd + " $in $out",
+ Description: "androidbp $out",
+ })
+
// A phony rule that is not the built-in Ninja phony rule. The built-in
// phony rule has special behavior that is sometimes not desired. See the
// Ninja docs for more details.
diff --git a/common/module.go b/common/module.go
index 33c586cd..bf3c435e 100644
--- a/common/module.go
+++ b/common/module.go
@@ -17,6 +17,8 @@ package common
import (
"path/filepath"
"runtime"
+ "sort"
+ "strings"
"android/soong/glob"
@@ -523,12 +525,15 @@ func (c *buildTargetSingleton) GenerateBuildActions(ctx blueprint.SingletonConte
checkbuildDeps := []string{}
dirModules := make(map[string][]string)
+ hasBPFile := make(map[string]bool)
+ bpFiles := []string{}
ctx.VisitAllModules(func(module blueprint.Module) {
if a, ok := module.(AndroidModule); ok {
blueprintDir := a.base().blueprintDir
installTarget := a.base().installTarget
checkbuildTarget := a.base().checkbuildTarget
+ bpFile := ctx.BlueprintFile(module)
if checkbuildTarget != "" {
checkbuildDeps = append(checkbuildDeps, checkbuildTarget)
@@ -538,6 +543,11 @@ func (c *buildTargetSingleton) GenerateBuildActions(ctx blueprint.SingletonConte
if installTarget != "" {
dirModules[blueprintDir] = append(dirModules[blueprintDir], installTarget)
}
+
+ if !hasBPFile[bpFile] {
+ hasBPFile[bpFile] = true
+ bpFiles = append(bpFiles, bpFile)
+ }
}
})
@@ -560,4 +570,43 @@ func (c *buildTargetSingleton) GenerateBuildActions(ctx blueprint.SingletonConte
Optional: true,
})
}
+
+ // Create Android.bp->mk translation rules
+ androidMks := []string{}
+ srcDir := ctx.Config().(Config).SrcDir()
+ intermediatesDir := filepath.Join(ctx.Config().(Config).IntermediatesDir(), "androidmk")
+ sort.Strings(bpFiles)
+ for _, origBp := range bpFiles {
+ bpFile := filepath.Join(srcDir, origBp)
+ mkFile := filepath.Join(srcDir, filepath.Dir(origBp), "Android.mk")
+
+ files, err := Glob(ctx, intermediatesDir, mkFile, nil)
+ if err != nil {
+ ctx.Errorf("glob: %s", err.Error())
+ continue
+ }
+
+ // Existing Android.mk file, use that instead
+ if len(files) > 0 {
+ continue
+ }
+
+ transMk := filepath.Join("androidmk", "Android_"+strings.Replace(filepath.Dir(origBp), "/", "_", -1)+".mk")
+ ctx.Build(pctx, blueprint.BuildParams{
+ Rule: androidbp,
+ Outputs: []string{transMk},
+ Inputs: []string{bpFile},
+ Implicits: []string{androidbpCmd},
+ Optional: true,
+ })
+
+ androidMks = append(androidMks, transMk)
+ }
+
+ ctx.Build(pctx, blueprint.BuildParams{
+ Rule: blueprint.Phony,
+ Outputs: []string{"androidmk"},
+ Implicits: androidMks,
+ Optional: true,
+ })
}