diff --git a/cmd/soong_ui/main.go b/cmd/soong_ui/main.go index b909779be..b63918f55 100644 --- a/cmd/soong_ui/main.go +++ b/cmd/soong_ui/main.go @@ -337,7 +337,7 @@ func buildActionConfig(ctx build.Context, args ...string) build.Config { }{{ name: "all-modules", description: "Build action: build from the top of the source tree.", - action: build.BUILD_MODULES_IN_A_DIRECTORY, + action: build.BUILD_MODULES, buildDependencies: true, }, { name: "modules-in-a-dir-no-deps", diff --git a/ui/build/config.go b/ui/build/config.go index 6df9529fe..4a70f063f 100644 --- a/ui/build/config.go +++ b/ui/build/config.go @@ -71,6 +71,9 @@ const ( // Builds all of the modules and their dependencies of a list of specified directories. All specified // directories are relative to the root directory of the source tree. BUILD_MODULES_IN_DIRECTORIES + + // Build a list of specified modules. If none was specified, simply build the whole source tree. + BUILD_MODULES ) // checkTopDir validates that the current directory is at the root directory of the source tree. @@ -290,6 +293,8 @@ func getConfigArgs(action BuildAction, dir string, buildDependencies bool, ctx C var targets []string switch action { + case BUILD_MODULES: + // No additional processing is required when building a list of specific modules or all modules. case BUILD_MODULES_IN_A_DIRECTORY: // If dir is the root source tree, all the modules are built of the source tree are built so // no need to find the build file. diff --git a/ui/build/config_test.go b/ui/build/config_test.go index 1ef545666..856af117f 100644 --- a/ui/build/config_test.go +++ b/ui/build/config_test.go @@ -763,6 +763,51 @@ func testGetConfigArgs(t *testing.T, tt buildActionTestCase, action BuildAction, } } +func TestGetConfigArgsBuildModules(t *testing.T) { + tests := []buildActionTestCase{{ + description: "normal execution from the root source tree directory", + dirsInTrees: []string{"0/1/2", "0/2", "0/3"}, + buildFiles: []string{"0/1/2/Android.mk", "0/2/Android.bp", "0/3/Android.mk"}, + args: []string{"-j", "fake_module", "fake_module2"}, + curDir: ".", + tidyOnly: "", + expectedArgs: []string{"-j", "fake_module", "fake_module2"}, + expectedEnvVars: []envVar{}, + }, { + description: "normal execution in deep directory", + dirsInTrees: []string{"0/1/2", "0/2", "0/3", "1/2/3/4/5/6/7/8/9/1/2/3/4/5/6"}, + buildFiles: []string{"0/1/2/Android.mk", "0/2/Android.bp", "1/2/3/4/5/6/7/8/9/1/2/3/4/5/6/Android.mk"}, + args: []string{"-j", "fake_module", "fake_module2", "-k"}, + curDir: "1/2/3/4/5/6/7/8/9", + tidyOnly: "", + expectedArgs: []string{"-j", "fake_module", "fake_module2", "-k"}, + expectedEnvVars: []envVar{}, + }, { + description: "normal execution in deep directory, no targets", + dirsInTrees: []string{"0/1/2", "0/2", "0/3", "1/2/3/4/5/6/7/8/9/1/2/3/4/5/6"}, + buildFiles: []string{"0/1/2/Android.mk", "0/2/Android.bp", "1/2/3/4/5/6/7/8/9/1/2/3/4/5/6/Android.mk"}, + args: []string{"-j", "-k"}, + curDir: "1/2/3/4/5/6/7/8/9", + tidyOnly: "", + expectedArgs: []string{"-j", "-k"}, + expectedEnvVars: []envVar{}, + }, { + description: "normal execution in root source tree, no args", + dirsInTrees: []string{"0/1/2", "0/2", "0/3"}, + buildFiles: []string{"0/1/2/Android.mk", "0/2/Android.bp"}, + args: []string{}, + curDir: "1/2/3/4/5/6/7/8/9", + tidyOnly: "", + expectedArgs: []string{}, + expectedEnvVars: []envVar{}, + }} + for _, tt := range tests { + t.Run("build action BUILD_MODULES with dependencies, "+tt.description, func(t *testing.T) { + testGetConfigArgs(t, tt, BUILD_MODULES, true) + }) + } +} + // TODO: Remove this test case once mm shell build command has been deprecated. func TestGetConfigArgsBuildModulesInDirecotoryNoDeps(t *testing.T) { tests := []buildActionTestCase{{