From bf9207aceba418cc55ddc2a780d4dfea07b88673 Mon Sep 17 00:00:00 2001 From: Dan Willemsen Date: Wed, 17 Jun 2015 15:17:12 -0700 Subject: 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 --- common/defs.go | 10 ++++++++++ common/module.go | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) (limited to 'common') 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, + }) } -- cgit v1.2.3