Merge "soong_ui: Add --build-mode flag in soong_ui"
am: 2f93a2e07b
Change-Id: I8e2b926915ea45db9a5955f868be8bdf2eda2da5
This commit is contained in:
commit
9123c55392
1 changed files with 94 additions and 4 deletions
|
@ -61,9 +61,7 @@ var commands []command = []command{
|
||||||
config: func(ctx build.Context, args ...string) build.Config {
|
config: func(ctx build.Context, args ...string) build.Config {
|
||||||
return build.NewConfig(ctx, args...)
|
return build.NewConfig(ctx, args...)
|
||||||
},
|
},
|
||||||
stdio: func() terminal.StdioInterface {
|
stdio: stdio,
|
||||||
return terminal.StdioImpl{}
|
|
||||||
},
|
|
||||||
run: make,
|
run: make,
|
||||||
}, {
|
}, {
|
||||||
flag: "--dumpvar-mode",
|
flag: "--dumpvar-mode",
|
||||||
|
@ -77,6 +75,12 @@ var commands []command = []command{
|
||||||
config: dumpVarConfig,
|
config: dumpVarConfig,
|
||||||
stdio: customStdio,
|
stdio: customStdio,
|
||||||
run: dumpVars,
|
run: dumpVars,
|
||||||
|
}, {
|
||||||
|
flag: "--build-mode",
|
||||||
|
description: "build modules based on the specified build action",
|
||||||
|
config: buildActionConfig,
|
||||||
|
stdio: stdio,
|
||||||
|
run: make,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -299,6 +303,10 @@ func dumpVars(ctx build.Context, config build.Config, args []string, _ string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func stdio() terminal.StdioInterface {
|
||||||
|
return terminal.StdioImpl{}
|
||||||
|
}
|
||||||
|
|
||||||
func customStdio() terminal.StdioInterface {
|
func customStdio() terminal.StdioInterface {
|
||||||
return terminal.NewCustomStdio(os.Stdin, os.Stderr, os.Stderr)
|
return terminal.NewCustomStdio(os.Stdin, os.Stderr, os.Stderr)
|
||||||
}
|
}
|
||||||
|
@ -308,6 +316,88 @@ func dumpVarConfig(ctx build.Context, args ...string) build.Config {
|
||||||
return build.NewConfig(ctx)
|
return build.NewConfig(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func buildActionConfig(ctx build.Context, args ...string) build.Config {
|
||||||
|
flags := flag.NewFlagSet("build-mode", flag.ContinueOnError)
|
||||||
|
flags.Usage = func() {
|
||||||
|
fmt.Fprintf(ctx.Writer, "usage: %s --build-mode --dir=<path> <build action> [<build arg 1> <build arg 2> ...]\n\n", os.Args[0])
|
||||||
|
fmt.Fprintln(ctx.Writer, "In build mode, build the set of modules based on the specified build")
|
||||||
|
fmt.Fprintln(ctx.Writer, "action. The --dir flag is required to determine what is needed to")
|
||||||
|
fmt.Fprintln(ctx.Writer, "build in the source tree based on the build action. See below for")
|
||||||
|
fmt.Fprintln(ctx.Writer, "the list of acceptable build action flags.")
|
||||||
|
fmt.Fprintln(ctx.Writer, "")
|
||||||
|
flags.PrintDefaults()
|
||||||
|
}
|
||||||
|
|
||||||
|
buildActionFlags := []struct {
|
||||||
|
name string
|
||||||
|
description string
|
||||||
|
action build.BuildAction
|
||||||
|
buildDependencies bool
|
||||||
|
set bool
|
||||||
|
}{{
|
||||||
|
name: "all-modules",
|
||||||
|
description: "Build action: build from the top of the source tree.",
|
||||||
|
action: build.BUILD_MODULES_IN_A_DIRECTORY,
|
||||||
|
buildDependencies: true,
|
||||||
|
}, {
|
||||||
|
name: "modules-in-a-dir-no-deps",
|
||||||
|
description: "Build action: builds all of the modules in the current directory without their dependencies.",
|
||||||
|
action: build.BUILD_MODULES_IN_A_DIRECTORY,
|
||||||
|
buildDependencies: false,
|
||||||
|
}, {
|
||||||
|
name: "modules-in-dirs-no-deps",
|
||||||
|
description: "Build action: builds all of the modules in the supplied directories without their dependencies.",
|
||||||
|
action: build.BUILD_MODULES_IN_DIRECTORIES,
|
||||||
|
buildDependencies: false,
|
||||||
|
}, {
|
||||||
|
name: "modules-in-a-dir",
|
||||||
|
description: "Build action: builds all of the modules in the current directory and their dependencies.",
|
||||||
|
action: build.BUILD_MODULES_IN_A_DIRECTORY,
|
||||||
|
buildDependencies: true,
|
||||||
|
}, {
|
||||||
|
name: "modules-in-dirs",
|
||||||
|
description: "Build action: builds all of the modules in the supplied directories and their dependencies.",
|
||||||
|
action: build.BUILD_MODULES_IN_DIRECTORIES,
|
||||||
|
buildDependencies: true,
|
||||||
|
}}
|
||||||
|
for i, flag := range buildActionFlags {
|
||||||
|
flags.BoolVar(&buildActionFlags[i].set, flag.name, false, flag.description)
|
||||||
|
}
|
||||||
|
dir := flags.String("dir", "", "Directory of the executed build command.")
|
||||||
|
|
||||||
|
// Only interested in the first two args which defines the build action and the directory.
|
||||||
|
// The remaining arguments are passed down to the config.
|
||||||
|
const numBuildActionFlags = 2
|
||||||
|
if len(args) < numBuildActionFlags {
|
||||||
|
flags.Usage()
|
||||||
|
ctx.Fatalln("Improper build action arguments.")
|
||||||
|
}
|
||||||
|
flags.Parse(args[0:numBuildActionFlags])
|
||||||
|
|
||||||
|
// The next block of code is to validate that exactly one build action is set and the dir flag
|
||||||
|
// is specified.
|
||||||
|
buildActionCount := 0
|
||||||
|
var buildAction build.BuildAction
|
||||||
|
buildDependency := false
|
||||||
|
for _, flag := range buildActionFlags {
|
||||||
|
if flag.set {
|
||||||
|
buildActionCount++
|
||||||
|
buildAction = flag.action
|
||||||
|
buildDependency = flag.buildDependencies
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if buildActionCount != 1 {
|
||||||
|
ctx.Fatalln("Build action not defined.")
|
||||||
|
}
|
||||||
|
if *dir == "" {
|
||||||
|
ctx.Fatalln("-dir not specified.")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove the build action flags from the args as they are not recognized by the config.
|
||||||
|
args = args[numBuildActionFlags:]
|
||||||
|
return build.NewBuildActionConfig(buildAction, *dir, buildDependency, ctx, args...)
|
||||||
|
}
|
||||||
|
|
||||||
func make(ctx build.Context, config build.Config, _ []string, logsDir string) {
|
func make(ctx build.Context, config build.Config, _ []string, logsDir string) {
|
||||||
if config.IsVerbose() {
|
if config.IsVerbose() {
|
||||||
writer := ctx.Writer
|
writer := ctx.Writer
|
||||||
|
|
Loading…
Reference in a new issue