Merge "Create 'androidmk' rule to automatically run androidbp" into master-soong

This commit is contained in:
Dan Willemsen
2015-06-19 01:11:58 +00:00
committed by Gerrit Code Review
2 changed files with 59 additions and 0 deletions

View File

@@ -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.

View File

@@ -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,
})
}