diff options
author | 2025-01-23 12:56:20 -0800 | |
---|---|---|
committer | 2025-01-23 12:56:20 -0800 | |
commit | 866ab39da69b9dd6defb39a064764fa3e0a6db23 (patch) | |
tree | 68aabc63b2d07236fa6dc4c92831378766205405 | |
parent | 4d78e0108b85354098811ec86307cc8d2550555f (diff) |
Convert android_app and android_test's module-info.json to soong
This produces the following diffs, which I beleive are benign:
https://paste.googleplex.com/5631028455276544
We need to convert these to soong so that you can run these tests
with atest in soong-only builds.
Bug: 389720048
Test: diff'd out/target/product/vsoc_x86_64/module-info.json
Change-Id: Ic25e14d2cfbb56d9527302baefa6f69f55f113ee
-rw-r--r-- | android/module.go | 20 | ||||
-rw-r--r-- | android/module_context.go | 68 | ||||
-rw-r--r-- | android/module_info_json.go | 1 | ||||
-rw-r--r-- | java/app.go | 32 |
4 files changed, 88 insertions, 33 deletions
diff --git a/android/module.go b/android/module.go index c81380eea..da7541637 100644 --- a/android/module.go +++ b/android/module.go @@ -2145,6 +2145,22 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext) } } + // M(C)TS supports a full test suite and partial per-module MTS test suites, with naming mts-${MODULE}. + // To reduce repetition, if we find a partial M(C)TS test suite without an full M(C)TS test suite, + // we add the full test suite to our list. This was inherited from + // AndroidMkEntries.AddCompatibilityTestSuites. + suites := ctx.moduleInfoJSON.CompatibilitySuites + if PrefixInList(suites, "mts-") && !InList("mts", suites) { + suites = append(suites, "mts") + } + if PrefixInList(suites, "mcts-") && !InList("mcts", suites) { + suites = append(suites, "mcts") + } + ctx.moduleInfoJSON.CompatibilitySuites = suites + + required := append(m.RequiredModuleNames(ctx), m.VintfFragmentModuleNames(ctx)...) + required = append(required, ctx.moduleInfoJSON.ExtraRequired...) + ctx.moduleInfoJSON.core = CoreModuleInfoJSON{ RegisterName: m.moduleInfoRegisterName(ctx, ctx.moduleInfoJSON.SubName), Path: []string{ctx.ModuleDir()}, @@ -2154,7 +2170,7 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext) TargetDependencies: targetRequired, HostDependencies: hostRequired, Data: data, - Required: append(m.RequiredModuleNames(ctx), m.VintfFragmentModuleNames(ctx)...), + Required: required, } SetProvider(ctx, ModuleInfoJSONProvider, ctx.moduleInfoJSON) } @@ -2266,7 +2282,7 @@ func (m *ModuleBase) moduleInfoRegisterName(ctx ModuleContext, subName string) s arches = slices.DeleteFunc(arches, func(target Target) bool { return target.NativeBridge != ctx.Target().NativeBridge }) - if len(arches) > 0 && ctx.Arch().ArchType != arches[0].Arch.ArchType { + if len(arches) > 0 && ctx.Arch().ArchType != arches[0].Arch.ArchType && ctx.Arch().ArchType != Common { if ctx.Arch().ArchType.Multilib == "lib32" { suffix = "_32" } else { diff --git a/android/module_context.go b/android/module_context.go index 1620390c2..fd804d08f 100644 --- a/android/module_context.go +++ b/android/module_context.go @@ -655,19 +655,21 @@ func (m *moduleContext) installFile(installPath InstallPath, name string, srcPat orderOnlyDeps = InstallPaths(deps).Paths() } - if m.Config().KatiEnabled() { - // When creating the install rule in Soong but embedding in Make, write the rule to a - // makefile instead of directly to the ninja file so that main.mk can add the - // dependencies from the `required` property that are hard to resolve in Soong. - m.katiInstalls = append(m.katiInstalls, katiInstall{ - from: srcPath, - to: fullInstallPath, - implicitDeps: implicitDeps, - orderOnlyDeps: orderOnlyDeps, - executable: executable, - extraFiles: extraZip, - }) - } else { + // When creating the install rule in Soong but embedding in Make, write the rule to a + // makefile instead of directly to the ninja file so that main.mk can add the + // dependencies from the `required` property that are hard to resolve in Soong. + // In soong-only builds, the katiInstall will still be created for semi-legacy code paths + // such as module-info.json or compliance, but it will not be used for actually installing + // the file. + m.katiInstalls = append(m.katiInstalls, katiInstall{ + from: srcPath, + to: fullInstallPath, + implicitDeps: implicitDeps, + orderOnlyDeps: orderOnlyDeps, + executable: executable, + extraFiles: extraZip, + }) + if !m.Config().KatiEnabled() { rule := CpWithBash if executable { rule = CpExecutableWithBash @@ -717,15 +719,17 @@ func (m *moduleContext) InstallSymlink(installPath InstallPath, name string, src } if m.requiresFullInstall() { - if m.Config().KatiEnabled() { - // When creating the symlink rule in Soong but embedding in Make, write the rule to a - // makefile instead of directly to the ninja file so that main.mk can add the - // dependencies from the `required` property that are hard to resolve in Soong. - m.katiSymlinks = append(m.katiSymlinks, katiInstall{ - from: srcPath, - to: fullInstallPath, - }) - } else { + // When creating the symlink rule in Soong but embedding in Make, write the rule to a + // makefile instead of directly to the ninja file so that main.mk can add the + // dependencies from the `required` property that are hard to resolve in Soong. + // In soong-only builds, the katiInstall will still be created for semi-legacy code paths + // such as module-info.json or compliance, but it will not be used for actually installing + // the file. + m.katiSymlinks = append(m.katiSymlinks, katiInstall{ + from: srcPath, + to: fullInstallPath, + }) + if !m.Config().KatiEnabled() { // The symlink doesn't need updating when the target is modified, but we sometimes // have a dependency on a symlink to a binary instead of to the binary directly, and // the mtime of the symlink must be updated when the binary is modified, so use a @@ -768,15 +772,17 @@ func (m *moduleContext) InstallAbsoluteSymlink(installPath InstallPath, name str m.module.base().hooks.runInstallHooks(m, nil, fullInstallPath, true) if m.requiresFullInstall() { - if m.Config().KatiEnabled() { - // When creating the symlink rule in Soong but embedding in Make, write the rule to a - // makefile instead of directly to the ninja file so that main.mk can add the - // dependencies from the `required` property that are hard to resolve in Soong. - m.katiSymlinks = append(m.katiSymlinks, katiInstall{ - absFrom: absPath, - to: fullInstallPath, - }) - } else { + // When creating the symlink rule in Soong but embedding in Make, write the rule to a + // makefile instead of directly to the ninja file so that main.mk can add the + // dependencies from the `required` property that are hard to resolve in Soong. + // In soong-only builds, the katiInstall will still be created for semi-legacy code paths + // such as module-info.json or compliance, but it will not be used for actually installing + // the file. + m.katiSymlinks = append(m.katiSymlinks, katiInstall{ + absFrom: absPath, + to: fullInstallPath, + }) + if !m.Config().KatiEnabled() { m.Build(pctx, BuildParams{ Rule: Symlink, Description: "install symlink " + fullInstallPath.Base() + " -> " + absPath, diff --git a/android/module_info_json.go b/android/module_info_json.go index d102dd2a2..27120ef6f 100644 --- a/android/module_info_json.go +++ b/android/module_info_json.go @@ -43,6 +43,7 @@ type ExtraModuleInfoJSON struct { CompatibilitySuites []string `json:"compatibility_suites,omitempty"` // $(sort $(ALL_MODULES.$(m).COMPATIBILITY_SUITES)) AutoTestConfig []string `json:"auto_test_config,omitempty"` // $(ALL_MODULES.$(m).auto_test_config) TestConfig []string `json:"test_config,omitempty"` // $(strip $(ALL_MODULES.$(m).TEST_CONFIG) $(ALL_MODULES.$(m).EXTRA_TEST_CONFIGS) + ExtraRequired []string `json:"-"` } type ModuleInfoJSON struct { diff --git a/java/app.go b/java/app.go index 557ba28f8..17c7b22b2 100644 --- a/java/app.go +++ b/java/app.go @@ -405,6 +405,14 @@ func (a *AndroidTestHelperApp) GenerateAndroidBuildActions(ctx android.ModuleCon Updatable: Bool(a.appProperties.Updatable), TestHelperApp: true, }) + + moduleInfoJSON := ctx.ModuleInfoJSON() + moduleInfoJSON.Tags = append(moduleInfoJSON.Tags, "tests") + if len(a.appTestHelperAppProperties.Test_suites) > 0 { + moduleInfoJSON.CompatibilitySuites = append(moduleInfoJSON.CompatibilitySuites, a.appTestHelperAppProperties.Test_suites...) + } else { + moduleInfoJSON.CompatibilitySuites = append(moduleInfoJSON.CompatibilitySuites, "null-suite") + } } func (a *AndroidApp) GenerateAndroidBuildActions(ctx android.ModuleContext) { @@ -1086,6 +1094,14 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) { android.SetProvider(ctx, JavaInfoProvider, javaInfo) } + moduleInfoJSON := ctx.ModuleInfoJSON() + moduleInfoJSON.Class = []string{"APPS"} + if !a.embeddedJniLibs { + for _, jniLib := range a.jniLibs { + moduleInfoJSON.ExtraRequired = append(moduleInfoJSON.ExtraRequired, jniLib.name) + } + } + a.setOutputFiles(ctx) } @@ -1617,6 +1633,22 @@ func (a *AndroidTest) GenerateAndroidBuildActions(ctx android.ModuleContext) { TopLevelTarget: true, }) + moduleInfoJSON := ctx.ModuleInfoJSON() + moduleInfoJSON.Tags = append(moduleInfoJSON.Tags, "tests") + if a.testConfig != nil { + moduleInfoJSON.TestConfig = append(moduleInfoJSON.TestConfig, a.testConfig.String()) + } + moduleInfoJSON.TestConfig = append(moduleInfoJSON.TestConfig, a.extraTestConfigs.Strings()...) + if len(a.testProperties.Test_suites) > 0 { + moduleInfoJSON.CompatibilitySuites = append(moduleInfoJSON.CompatibilitySuites, a.testProperties.Test_suites...) + } else { + moduleInfoJSON.CompatibilitySuites = append(moduleInfoJSON.CompatibilitySuites, "null-suite") + } + + if _, ok := testConfig.(android.WritablePath); ok { + moduleInfoJSON.AutoTestConfig = []string{"true"} + } + moduleInfoJSON.TestMainlineModules = append(moduleInfoJSON.TestMainlineModules, a.testProperties.Test_mainline_modules...) } func testcaseRel(paths android.Paths) []string { |