diff options
59 files changed, 1323 insertions, 613 deletions
@@ -3,7 +3,6 @@ # AMER agespino@google.com -alexmarquez@google.com ccross@android.com colefaust@google.com cparsons@google.com diff --git a/android/allowlists/allowlists.go b/android/allowlists/allowlists.go index a4df34c3f..433c06357 100644 --- a/android/allowlists/allowlists.go +++ b/android/allowlists/allowlists.go @@ -183,6 +183,7 @@ var ( "external/selinux/libselinux": Bp2BuildDefaultTrueRecursively, "external/selinux/libsepol": Bp2BuildDefaultTrueRecursively, "external/speex": Bp2BuildDefaultTrueRecursively, + "external/sqlite": Bp2BuildDefaultTrueRecursively, "external/tinyalsa": Bp2BuildDefaultTrueRecursively, "external/tinyalsa_new": Bp2BuildDefaultTrueRecursively, "external/toybox": Bp2BuildDefaultTrueRecursively, @@ -191,11 +192,14 @@ var ( "external/zstd": Bp2BuildDefaultTrueRecursively, "frameworks/av": Bp2BuildDefaultTrue, + "frameworks/av/media/audioaidlconversion": Bp2BuildDefaultTrueRecursively, "frameworks/av/media/codec2/components/aom": Bp2BuildDefaultTrueRecursively, "frameworks/av/media/codecs": Bp2BuildDefaultTrueRecursively, + "frameworks/av/media/module/codecs": Bp2BuildDefaultTrueRecursively, + "frameworks/av/media/module/foundation": Bp2BuildDefaultTrueRecursively, "frameworks/av/media/liberror": Bp2BuildDefaultTrueRecursively, + "frameworks/av/media/libmediahelper": Bp2BuildDefaultTrue, "frameworks/av/media/libshmem": Bp2BuildDefaultTrueRecursively, - "frameworks/av/media/audioaidlconversion": Bp2BuildDefaultTrueRecursively, "frameworks/av/media/module/minijail": Bp2BuildDefaultTrueRecursively, "frameworks/av/services/minijail": Bp2BuildDefaultTrueRecursively, "frameworks/base/libs/androidfw": Bp2BuildDefaultTrue, @@ -213,13 +217,13 @@ var ( "frameworks/native/libs/gui": Bp2BuildDefaultTrue, "frameworks/native/libs/math": Bp2BuildDefaultTrueRecursively, "frameworks/native/libs/nativebase": Bp2BuildDefaultTrueRecursively, + "frameworks/native/libs/permission": Bp2BuildDefaultTrueRecursively, "frameworks/native/libs/vr": Bp2BuildDefaultTrueRecursively, "frameworks/native/opengl/tests/gl2_cameraeye": Bp2BuildDefaultTrue, "frameworks/native/opengl/tests/gl2_java": Bp2BuildDefaultTrue, "frameworks/native/opengl/tests/testLatency": Bp2BuildDefaultTrue, "frameworks/native/opengl/tests/testPauseResume": Bp2BuildDefaultTrue, "frameworks/native/opengl/tests/testViewport": Bp2BuildDefaultTrue, - "frameworks/native/libs/permission": Bp2BuildDefaultTrue, "frameworks/native/services/batteryservice": Bp2BuildDefaultTrue, "frameworks/proto_logging/stats": Bp2BuildDefaultTrueRecursively, @@ -448,7 +452,6 @@ var ( "code_coverage.policy", "code_coverage.policy.other", "codec2_soft_exports", - "codecs_g711dec", "com.android.media.swcodec", "com.android.media.swcodec-androidManifest", "com.android.media.swcodec-ld.config.txt", @@ -493,20 +496,6 @@ var ( "libandroidio", "libandroidio_srcs", "libserviceutils", - "libstagefright_amrnbenc", - "libstagefright_amrnbdec", - "libstagefright_amrwbdec", - "libstagefright_amrwbenc", - "libstagefright_amrnb_common", - "libstagefright_enc_common", - "libstagefright_flacdec", - "libstagefright_foundation", - "libstagefright_foundation_headers", - "libstagefright_headers", - "libstagefright_m4vh263dec", - "libstagefright_m4vh263enc", - "libstagefright_mp3dec", - "libstagefright_mp3dec_headers", "libsurfaceflinger_headers", "libsync", "libtextclassifier_hash_headers", @@ -546,6 +535,14 @@ var ( "liblp", "libstorage_literals_headers", + "PluginCoreLib", + "dagger2", + "dagger2-android-annotation-stubs", + "dagger2-bootstrap-compiler", + "dagger2-producers", + "okio-lib", + "setupdesign-strings", + //external/avb "avbtool", "libavb", @@ -719,11 +716,12 @@ var ( "api_fingerprint", // allowlisting for kotlinx_coroutines + "annotations", + "kotlinx-coroutines-android-annotation-stubs", + "kotlinx-coroutines-core", "kotlinx_coroutines", "kotlinx_coroutines-device", "kotlinx_coroutines-host", - "annotations", - "kotlinx-coroutines-android-annotation-stubs", // for building com.android.neuralnetworks "libimapper_stablec", @@ -732,8 +730,12 @@ var ( // min_sdk_version in android_app "CtsShimUpgrade", + "art_cmdlineparser_headers", + // Mainline Module Apps "CaptivePortalLogin", + + "libstagefright_headers", } Bp2buildModuleTypeAlwaysConvertList = []string{ @@ -765,7 +767,6 @@ var ( "buffer_hub_queue_producer-test", // cc bugs - "libactivitymanager_aidl", // TODO(b/207426160): Unsupported use of aidl sources (via Dactivity_manager_procstate_aidl) in a cc_library // TODO(b/198619163) module has same name as source "logtagd.rc", @@ -778,13 +779,12 @@ var ( "libcutils_test_static", "KernelLibcutilsTest", - "linker", // TODO(b/228316882): cc_binary uses link_crt - "versioner", // TODO(b/228313961): depends on prebuilt shared library libclang-cpp_host as a shared library, which does not supply expected providers for a shared library - "art_libartbase_headers", // TODO(b/236268577): Header libraries do not support export_shared_libs_headers - "apexer_test", // Requires aapt2 - "apexer_test_host_tools", - "host_apex_verifier", - "tjbench", // TODO(b/240563612): Stem property + "linker", // TODO(b/228316882): cc_binary uses link_crt + "versioner", // TODO(b/228313961): depends on prebuilt shared library libclang-cpp_host as a shared library, which does not supply expected providers for a shared library + "tjbench", // TODO(b/240563612): Stem property + + // requires host tools for apexer + "apexer_test", "apexer_test_host_tools", "host_apex_verifier", // java bugs "libbase_ndk", // TODO(b/186826477): fails to link libctscamera2_jni for device (required for CtsCameraTestCases) @@ -947,13 +947,11 @@ var ( // cc_test with unconverted deps, or are device-only (and not verified to pass yet) "AMRWBEncTest", - "AmrnbDecoderTest", // depends on unconverted modules: libaudioutils, libsndfile - "AmrnbEncoderTest", // depends on unconverted modules: libaudioutils, libsndfile - "AmrwbDecoderTest", // depends on unconverted modules: libsndfile, libaudioutils - "AmrwbEncoderTest", // depends on unconverted modules: libaudioutils, libsndfile - "Mp3DecoderTest", // depends on unconverted modules: libsndfile, libaudioutils - "Mpeg4H263DecoderTest", // depends on unconverted modules: libstagefright_foundation - "Mpeg4H263EncoderTest", + "AmrnbDecoderTest", // depends on unconverted modules: libaudioutils, libsndfile + "AmrnbEncoderTest", // depends on unconverted modules: libaudioutils, libsndfile + "AmrwbDecoderTest", // depends on unconverted modules: libsndfile, libaudioutils + "AmrwbEncoderTest", // depends on unconverted modules: libaudioutils, libsndfile + "Mp3DecoderTest", // depends on unconverted modules: libsndfile, libaudioutils "avcdec", "avcenc", "bionic-benchmarks-tests", @@ -1433,6 +1431,10 @@ var ( "styleprotoslite", "CtsPkgInstallerConstants", "guava-android-testlib", + + "MetaDataBaseUnitTest", // depends on libstagefright + "AVCUtilsUnitTest", // depends on libstagefright + "ColorUtilsTest", // depends on libmediandk } MixedBuildsDisabledList = []string{ @@ -1534,7 +1536,15 @@ var ( // which will soon be added to the prod allowlist. // It is implicit that all modules in ProdMixedBuildsEnabledList will // also be built - do not add them to this list. - StagingMixedBuildsEnabledList = []string{} + StagingMixedBuildsEnabledList = []string{ + // M13: media.swcodec launch + "com.android.media.swcodec", + "test_com.android.media.swcodec", + "libstagefright_foundation", + "libcodec2_hidl@1.0", + "libcodec2_hidl@1.1", + "libcodec2_hidl@1.2", + } // These should be the libs that are included by the apexes in the ProdMixedBuildsEnabledList ProdDclaMixedBuildsEnabledList = []string{ diff --git a/android/apex.go b/android/apex.go index 823afbb11..6119b0836 100644 --- a/android/apex.go +++ b/android/apex.go @@ -462,6 +462,14 @@ const ( AvailableToGkiApex = "com.android.gki.*" ) +var ( + AvailableToRecognziedWildcards = []string{ + AvailableToPlatform, + AvailableToAnyApex, + AvailableToGkiApex, + } +) + // CheckAvailableForApex provides the default algorithm for checking the apex availability. When the // availability is empty, it defaults to ["//apex_available:platform"] which means "available to the // platform but not available to any APEX". When the list is not empty, `what` is matched against @@ -925,3 +933,9 @@ func CheckMinSdkVersion(ctx ModuleContext, minSdkVersion ApiLevel, walk WalkPayl return true }) } + +// Implemented by apexBundle. +type ApexTestInterface interface { + // Return true if the apex bundle is an apex_test + IsTestApex() bool +} diff --git a/android/api_levels.go b/android/api_levels.go index 7214ccbb6..fa919fda7 100644 --- a/android/api_levels.go +++ b/android/api_levels.go @@ -15,12 +15,10 @@ package android import ( + "android/soong/starlark_import" "encoding/json" "fmt" "strconv" - - "android/soong/bazel" - "android/soong/starlark_fmt" ) func init() { @@ -288,13 +286,17 @@ var LastWithoutModuleLibCoreSystemModules = uncheckedFinalApiLevel(31) // ReplaceFinalizedCodenames returns the API level number associated with that API level // if the `raw` input is the codename of an API level has been finalized. // If the input is *not* a finalized codename, the input is returned unmodified. -func ReplaceFinalizedCodenames(config Config, raw string) string { - num, ok := getFinalCodenamesMap(config)[raw] +func ReplaceFinalizedCodenames(config Config, raw string) (string, error) { + finalCodenamesMap, err := getFinalCodenamesMap(config) + if err != nil { + return raw, err + } + num, ok := finalCodenamesMap[raw] if !ok { - return raw + return raw, nil } - return strconv.Itoa(num) + return strconv.Itoa(num), nil } // ApiLevelFrom converts the given string `raw` to an ApiLevel. @@ -344,7 +346,11 @@ func ApiLevelFromUserWithConfig(config Config, raw string) (ApiLevel, error) { } } - canonical, ok := getApiLevelsMapReleasedVersions()[raw] + apiLevelsReleasedVersions, err := getApiLevelsMapReleasedVersions() + if err != nil { + return NoneApiLevel, err + } + canonical, ok := apiLevelsReleasedVersions[raw] if !ok { asInt, err := strconv.Atoi(raw) if err != nil { @@ -410,37 +416,21 @@ func GetApiLevelsJson(ctx PathContext) WritablePath { return PathForOutput(ctx, "api_levels.json") } -func getApiLevelsMapReleasedVersions() map[string]int { - return map[string]int{ - "G": 9, - "I": 14, - "J": 16, - "J-MR1": 17, - "J-MR2": 18, - "K": 19, - "L": 21, - "L-MR1": 22, - "M": 23, - "N": 24, - "N-MR1": 25, - "O": 26, - "O-MR1": 27, - "P": 28, - "Q": 29, - "R": 30, - "S": 31, - "S-V2": 32, - "Tiramisu": 33, - } +func getApiLevelsMapReleasedVersions() (map[string]int, error) { + return starlark_import.GetStarlarkValue[map[string]int]("api_levels_released_versions") } var finalCodenamesMapKey = NewOnceKey("FinalCodenamesMap") -func getFinalCodenamesMap(config Config) map[string]int { +func getFinalCodenamesMap(config Config) (map[string]int, error) { + type resultStruct struct { + result map[string]int + err error + } // This logic is replicated in starlark, if changing logic here update starlark code too // https://cs.android.com/android/platform/superproject/+/master:build/bazel/rules/common/api.bzl;l=30;drc=231c7e8c8038fd478a79eb68aa5b9f5c64e0e061 - return config.Once(finalCodenamesMapKey, func() interface{} { - apiLevelsMap := getApiLevelsMapReleasedVersions() + result := config.Once(finalCodenamesMapKey, func() interface{} { + apiLevelsMap, err := getApiLevelsMapReleasedVersions() // TODO: Differentiate "current" and "future". // The code base calls it FutureApiLevel, but the spelling is "current", @@ -453,41 +443,44 @@ func getFinalCodenamesMap(config Config) map[string]int { // added in S, both of these are usable when building for "current" when // neither R nor S are final, but the S APIs stop being available in a // final R build. - if Bool(config.productVariables.Platform_sdk_final) { + if err == nil && Bool(config.productVariables.Platform_sdk_final) { apiLevelsMap["current"] = config.PlatformSdkVersion().FinalOrFutureInt() } - return apiLevelsMap - }).(map[string]int) + return resultStruct{apiLevelsMap, err} + }).(resultStruct) + return result.result, result.err } var apiLevelsMapKey = NewOnceKey("ApiLevelsMap") // ApiLevelsMap has entries for preview API levels -func GetApiLevelsMap(config Config) map[string]int { +func GetApiLevelsMap(config Config) (map[string]int, error) { + type resultStruct struct { + result map[string]int + err error + } // This logic is replicated in starlark, if changing logic here update starlark code too // https://cs.android.com/android/platform/superproject/+/master:build/bazel/rules/common/api.bzl;l=23;drc=231c7e8c8038fd478a79eb68aa5b9f5c64e0e061 - return config.Once(apiLevelsMapKey, func() interface{} { - apiLevelsMap := getApiLevelsMapReleasedVersions() - for i, codename := range config.PlatformVersionAllPreviewCodenames() { - apiLevelsMap[codename] = previewAPILevelBase + i + result := config.Once(apiLevelsMapKey, func() interface{} { + apiLevelsMap, err := getApiLevelsMapReleasedVersions() + if err == nil { + for i, codename := range config.PlatformVersionAllPreviewCodenames() { + apiLevelsMap[codename] = previewAPILevelBase + i + } } - return apiLevelsMap - }).(map[string]int) + return resultStruct{apiLevelsMap, err} + }).(resultStruct) + return result.result, result.err } func (a *apiLevelsSingleton) GenerateBuildActions(ctx SingletonContext) { - apiLevelsMap := GetApiLevelsMap(ctx.Config()) + apiLevelsMap, err := GetApiLevelsMap(ctx.Config()) + if err != nil { + ctx.Errorf("%s\n", err) + return + } apiLevelsJson := GetApiLevelsJson(ctx) createApiLevelsJson(ctx, apiLevelsJson, apiLevelsMap) } - -func StarlarkApiLevelConfigs(config Config) string { - return fmt.Sprintf(bazel.GeneratedBazelFileWarning+` -_api_levels_released_versions = %s - -api_levels_released_versions = _api_levels_released_versions -`, starlark_fmt.PrintStringIntDict(getApiLevelsMapReleasedVersions(), 0), - ) -} diff --git a/android/bazel.go b/android/bazel.go index 58d9d87db..3fe063c51 100644 --- a/android/bazel.go +++ b/android/bazel.go @@ -431,7 +431,7 @@ func (b *BazelModuleBase) shouldConvertWithBp2build(ctx bazelOtherModuleContext, } propValue := b.bazelProperties.Bazel_module.Bp2build_available - packagePath := ctx.OtherModuleDir(module) + packagePath := moduleDirWithPossibleOverride(ctx, module) // Modules in unit tests which are enabled in the allowlist by type or name // trigger this conditional because unit tests run under the "." package path @@ -440,7 +440,7 @@ func (b *BazelModuleBase) shouldConvertWithBp2build(ctx bazelOtherModuleContext, return true } - moduleName := module.Name() + moduleName := moduleNameWithPossibleOverride(ctx, module) allowlist := ctx.Config().Bp2buildPackageConfig moduleNameAllowed := allowlist.moduleAlwaysConvert[moduleName] moduleTypeAllowed := allowlist.moduleTypeAlwaysConvert[ctx.OtherModuleType(module)] diff --git a/android/bazel_handler.go b/android/bazel_handler.go index dafb610a9..5291ecae9 100644 --- a/android/bazel_handler.go +++ b/android/bazel_handler.go @@ -59,6 +59,8 @@ var ( "AUTO_UNINITIALIZE", "USE_CCACHE", "LLVM_NEXT", + "LLVM_PREBUILTS_VERSION", + "LLVM_RELEASE_VERSION", "ALLOW_UNKNOWN_WARNING_OPTION", "UNBUNDLED_BUILD_TARGET_SDK_WITH_API_FINGERPRINT", diff --git a/android/bazel_paths.go b/android/bazel_paths.go index bad7baf06..ddbdbd49b 100644 --- a/android/bazel_paths.go +++ b/android/bazel_paths.go @@ -453,8 +453,8 @@ func samePackage(label1, label2 string) bool { } func bp2buildModuleLabel(ctx BazelConversionContext, module blueprint.Module) string { - moduleName := ctx.OtherModuleName(module) - moduleDir := ctx.OtherModuleDir(module) + moduleName := moduleNameWithPossibleOverride(ctx, module) + moduleDir := moduleDirWithPossibleOverride(ctx, module) if moduleDir == Bp2BuildTopLevel { moduleDir = "" } diff --git a/android/config.go b/android/config.go index 7141e54c3..526537406 100644 --- a/android/config.go +++ b/android/config.go @@ -176,6 +176,13 @@ func (c Config) RunningInsideUnitTest() bool { return c.config.TestProductVariables != nil } +// MaxPageSizeSupported returns the max page size supported by the device. This +// value will define the ELF segment alignment for binaries (executables and +// shared libraries). +func (c Config) MaxPageSizeSupported() string { + return String(c.config.productVariables.DeviceMaxPageSizeSupported) +} + // A DeviceConfig object represents the configuration for a particular device // being built. For now there will only be one of these, but in the future there // may be multiple devices being built. @@ -1564,6 +1571,13 @@ func (c *config) MemtagHeapSyncEnabledForPath(path string) bool { return HasAnyPrefix(path, c.productVariables.MemtagHeapSyncIncludePaths) && !c.MemtagHeapDisabledForPath(path) } +func (c *config) HWASanEnabledForPath(path string) bool { + if len(c.productVariables.HWASanIncludePaths) == 0 { + return false + } + return HasAnyPrefix(path, c.productVariables.HWASanIncludePaths) +} + func (c *config) VendorConfig(name string) VendorConfig { return soongconfig.Config(c.productVariables.VendorVars[name]) } @@ -1915,6 +1929,10 @@ func (c *config) GetMixedBuildsEnabledModules() map[string]struct{} { return c.mixedBuildEnabledModules } +func (c *config) GetMixedBuildsDisabledModules() map[string]struct{} { + return c.mixedBuildDisabledModules +} + func (c *config) LogMixedBuild(ctx BaseModuleContext, useBazel bool) { moduleName := ctx.Module().Name() c.mixedBuildsLock.Lock() diff --git a/android/config_bp2build.go b/android/config_bp2build.go index 830890d56..2beeb51ec 100644 --- a/android/config_bp2build.go +++ b/android/config_bp2build.go @@ -95,15 +95,6 @@ func (ev ExportedVariables) ExportVariableConfigMethod(name string, method inter return ev.pctx.VariableConfigMethod(name, method) } -func (ev ExportedVariables) ExportStringStaticVariableWithEnvOverride(name, envVar, defaultVal string) { - ev.ExportVariableConfigMethod(name, func(config Config) string { - if override := config.Getenv(envVar); override != "" { - return override - } - return defaultVal - }) -} - // ExportSourcePathVariable declares a static "source path" variable and exports // it to Bazel's toolchain. func (ev ExportedVariables) ExportSourcePathVariable(name string, value string) { diff --git a/android/mutator.go b/android/mutator.go index 4ec960472..0a091eb6f 100644 --- a/android/mutator.go +++ b/android/mutator.go @@ -273,6 +273,12 @@ type TopDownMutatorContext interface { // This function can be used to create alias definitions in a directory that is different // from the directory of the visited Soong module. CreateBazelTargetAliasInDir(dir string, name string, actual bazel.Label) + + // CreateBazelConfigSetting creates a config_setting in <dir>/BUILD.bazel + // build/bazel has several static config_setting(s) that are used in Bazel builds. + // This function can be used to createa additional config_setting(s) based on the build graph + // (e.g. a config_setting specific to an apex variant) + CreateBazelConfigSetting(csa bazel.ConfigSettingAttributes, ca CommonAttributes, dir string) } type topDownMutatorContext struct { @@ -738,6 +744,23 @@ func (t *topDownMutatorContext) CreateBazelTargetAliasInDir( mod.base().addBp2buildInfo(info) } +func (t *topDownMutatorContext) CreateBazelConfigSetting( + csa bazel.ConfigSettingAttributes, + ca CommonAttributes, + dir string) { + mod := t.Module() + info := bp2buildInfo{ + Dir: dir, + BazelProps: bazel.BazelTargetModuleProperties{ + Rule_class: "config_setting", + }, + CommonAttrs: ca, + ConstraintAttrs: constraintAttributes{}, + Attrs: &csa, + } + mod.base().addBp2buildInfo(info) +} + // ApexAvailableTags converts the apex_available property value of an ApexModule // module and returns it as a list of keyed tags. func ApexAvailableTags(mod Module) bazel.StringListAttribute { @@ -758,6 +781,35 @@ func ApexAvailableTags(mod Module) bazel.StringListAttribute { return attr } +func ApexAvailableTagsWithoutTestApexes(ctx BaseModuleContext, mod Module) bazel.StringListAttribute { + attr := bazel.StringListAttribute{} + if am, ok := mod.(ApexModule); ok { + apexAvailableWithoutTestApexes := removeTestApexes(ctx, am.apexModuleBase().ApexAvailable()) + // If a user does not specify apex_available in Android.bp, then soong provides a default. + // To avoid verbosity of BUILD files, remove this default from user-facing BUILD files. + if len(am.apexModuleBase().ApexProperties.Apex_available) == 0 { + apexAvailableWithoutTestApexes = []string{} + } + attr.Value = ConvertApexAvailableToTags(apexAvailableWithoutTestApexes) + } + return attr +} + +func removeTestApexes(ctx BaseModuleContext, apex_available []string) []string { + testApexes := []string{} + for _, aa := range apex_available { + // ignore the wildcards + if InList(aa, AvailableToRecognziedWildcards) { + continue + } + mod, _ := ctx.ModuleFromName(aa) + if apex, ok := mod.(ApexTestInterface); ok && apex.IsTestApex() { + testApexes = append(testApexes, aa) + } + } + return RemoveListFromList(CopyOf(apex_available), testApexes) +} + func ConvertApexAvailableToTags(apexAvailable []string) []string { if len(apexAvailable) == 0 { // We need nil specifically to make bp2build not add the tags property at all, @@ -771,6 +823,13 @@ func ConvertApexAvailableToTags(apexAvailable []string) []string { return result } +// ConvertApexAvailableToTagsWithoutTestApexes converts a list of apex names to a list of bazel tags +// This function drops any test apexes from the input. +func ConvertApexAvailableToTagsWithoutTestApexes(ctx BaseModuleContext, apexAvailable []string) []string { + noTestApexes := removeTestApexes(ctx, apexAvailable) + return ConvertApexAvailableToTags(noTestApexes) +} + func (t *topDownMutatorContext) createBazelTargetModule( bazelProps bazel.BazelTargetModuleProperties, commonAttrs CommonAttributes, diff --git a/android/override_module.go b/android/override_module.go index 86f582b76..9e95c0f10 100644 --- a/android/override_module.go +++ b/android/override_module.go @@ -28,7 +28,6 @@ package android // module based on it. import ( - "fmt" "sort" "sync" @@ -121,7 +120,7 @@ type OverridableModule interface { addOverride(o OverrideModule) getOverrides() []OverrideModule - override(ctx BaseModuleContext, o OverrideModule) + override(ctx BaseModuleContext, m Module, o OverrideModule) GetOverriddenBy() string GetOverriddenByModuleDir() string @@ -192,7 +191,8 @@ func (b *OverridableModuleBase) setOverridesProperty(overridesProperty *[]string } // Overrides a base module with the given OverrideModule. -func (b *OverridableModuleBase) override(ctx BaseModuleContext, o OverrideModule) { +func (b *OverridableModuleBase) override(ctx BaseModuleContext, m Module, o OverrideModule) { + for _, p := range b.overridableProperties { for _, op := range o.getOverridingProperties() { if proptools.TypeEqual(p, op) { @@ -214,6 +214,17 @@ func (b *OverridableModuleBase) override(ctx BaseModuleContext, o OverrideModule } b.overridableModuleProperties.OverriddenBy = o.Name() b.overridableModuleProperties.OverriddenByModuleDir = o.ModuleDir() + + if oBazelable, ok := o.base().module.(Bazelable); ok { + if bBazelable, ok := m.(Bazelable); ok { + oProps := oBazelable.bazelProps() + bProps := bBazelable.bazelProps() + bProps.Bazel_module.Bp2build_available = oProps.Bazel_module.Bp2build_available + bProps.Bazel_module.Label = oProps.Bazel_module.Label + } else { + ctx.ModuleErrorf("Override type cannot be Bazelable if original module type is not Bazelable %v %v.", o.Name(), m.Name()) + } + } } // GetOverriddenBy returns the name of the override module that has overridden this module. @@ -302,7 +313,7 @@ func performOverrideMutator(ctx BottomUpMutatorContext) { // is specified. ctx.AliasVariation(variants[0]) for i, o := range overrides { - mods[i+1].(OverridableModule).override(ctx, o) + mods[i+1].(OverridableModule).override(ctx, mods[i+1], o) if o.getOverriddenByPrebuilt() { // The overriding module itself, too, is overridden by a prebuilt. // Copy the flag and hide it in make @@ -340,34 +351,26 @@ func replaceDepsOnOverridingModuleMutator(ctx BottomUpMutatorContext) { // variant of this OverridableModule, or ctx.ModuleName() if this module is not an OverridableModule // or if this variant is not overridden. func ModuleNameWithPossibleOverride(ctx BazelConversionContext) string { - if overridable, ok := ctx.Module().(OverridableModule); ok { + return moduleNameWithPossibleOverride(ctx, ctx.Module()) +} + +func moduleNameWithPossibleOverride(ctx bazelOtherModuleContext, module blueprint.Module) string { + if overridable, ok := module.(OverridableModule); ok { if o := overridable.GetOverriddenBy(); o != "" { return o } } - return ctx.OtherModuleName(ctx.Module()) + return ctx.OtherModuleName(module) } -// ModuleDirWithPossibleOverride returns the dir of the OverrideModule that overrides the current -// variant of this OverridableModule, or ctx.ModuleName() if this module is not an OverridableModule -// or if this variant is not overridden. -func moduleDirWithPossibleOverride(ctx BazelConversionContext) string { - if overridable, ok := ctx.Module().(OverridableModule); ok { +// moduleDirWithPossibleOverride returns the dir of the OverrideModule that overrides the current +// variant of the given OverridableModule, or ctx.OtherModuleName() if the module is not an +// OverridableModule or if the variant is not overridden. +func moduleDirWithPossibleOverride(ctx bazelOtherModuleContext, module blueprint.Module) string { + if overridable, ok := module.(OverridableModule); ok { if o := overridable.GetOverriddenByModuleDir(); o != "" { return o } } - return ctx.OtherModuleDir(ctx.Module()) -} - -// MaybeBp2buildLabelOfOverridingModule returns the bazel label of the -// overriding module of an OverridableModule (e.g. override_apex label of a base -// apex), or the module's label itself if not overridden. -func MaybeBp2buildLabelOfOverridingModule(ctx BazelConversionContext) string { - moduleName := ModuleNameWithPossibleOverride(ctx) - moduleDir := moduleDirWithPossibleOverride(ctx) - if moduleDir == Bp2BuildTopLevel { - moduleDir = "" - } - return fmt.Sprintf("//%s:%s", moduleDir, moduleName) + return ctx.OtherModuleDir(module) } diff --git a/android/proto.go b/android/proto.go index 09e50c8c3..cebbd59cd 100644 --- a/android/proto.go +++ b/android/proto.go @@ -234,7 +234,7 @@ func Bp2buildProtoProperties(ctx Bp2buildMutatorContext, m *ModuleBase, srcs baz } } - tags := ApexAvailableTags(ctx.Module()) + tags := ApexAvailableTagsWithoutTestApexes(ctx.(TopDownMutatorContext), ctx.Module()) ctx.CreateBazelTargetModule( bazel.BazelTargetModuleProperties{Rule_class: "proto_library"}, diff --git a/android/sdk.go b/android/sdk.go index 63e0bbeec..6b598ab9e 100644 --- a/android/sdk.go +++ b/android/sdk.go @@ -830,6 +830,9 @@ type SdkMemberContext interface { // IsTargetBuildBeforeTiramisu return true if the target build release for which this snapshot is // being generated is before Tiramisu, i.e. S. IsTargetBuildBeforeTiramisu() bool + + // ModuleErrorf reports an error at the line number of the module type in the module definition. + ModuleErrorf(fmt string, args ...interface{}) } // ExportedComponentsInfo contains information about the components that this module exports to an diff --git a/android/variable.go b/android/variable.go index 249d53b07..496f523b2 100644 --- a/android/variable.go +++ b/android/variable.go @@ -218,6 +218,7 @@ type productVariables struct { DeviceVndkVersion *string `json:",omitempty"` DeviceCurrentApiLevelForVendorModules *string `json:",omitempty"` DeviceSystemSdkVersions []string `json:",omitempty"` + DeviceMaxPageSizeSupported *string `json:",omitempty"` RecoverySnapshotVersion *string `json:",omitempty"` @@ -306,6 +307,8 @@ type productVariables struct { MemtagHeapAsyncIncludePaths []string `json:",omitempty"` MemtagHeapSyncIncludePaths []string `json:",omitempty"` + HWASanIncludePaths []string `json:",omitempty"` + VendorPath *string `json:",omitempty"` OdmPath *string `json:",omitempty"` ProductPath *string `json:",omitempty"` @@ -505,6 +508,7 @@ func (v *productVariables) SetDefaultConfig() { DeviceSecondaryArchVariant: stringPtr("armv8-a"), DeviceSecondaryCpuVariant: stringPtr("generic"), DeviceSecondaryAbi: []string{"armeabi-v7a", "armeabi"}, + DeviceMaxPageSizeSupported: stringPtr("4096"), AAPTConfig: []string{"normal", "large", "xlarge", "hdpi", "xhdpi", "xxhdpi"}, AAPTPreferredConfig: stringPtr("xhdpi"), diff --git a/apex/apex.go b/apex/apex.go index baf4737d8..cf18ec31d 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -1964,9 +1964,6 @@ func (a *apexBundle) QueueBazelCall(ctx android.BaseModuleContext) { // overridden by different override_apex modules (e.g. Google or Go variants), // which is handled by the overrides mutators. func (a *apexBundle) GetBazelLabel(ctx android.BazelConversionPathContext, module blueprint.Module) string { - if _, ok := ctx.Module().(android.OverridableModule); ok { - return android.MaybeBp2buildLabelOfOverridingModule(ctx) - } return a.BazelModuleBase.GetBazelLabel(ctx, a) } @@ -3811,3 +3808,7 @@ func makeSharedLibsAttributes(config string, libsLabelList bazel.LabelList, func invalidCompileMultilib(ctx android.TopDownMutatorContext, value string) { ctx.PropertyErrorf("compile_multilib", "Invalid value: %s", value) } + +func (a *apexBundle) IsTestApex() bool { + return a.testApex +} diff --git a/apex/apex_test.go b/apex/apex_test.go index 31b7ef7ff..3ba4d8d55 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -3218,10 +3218,7 @@ func TestStaticLinking(t *testing.T) { stubs: { versions: ["1", "2", "3"], }, - apex_available: [ - "//apex_available:platform", - "myapex", - ], + apex_available: ["myapex"], } cc_binary { @@ -4221,7 +4218,7 @@ func TestDependenciesInApexManifest(t *testing.T) { apex { name: "myapex_selfcontained", key: "myapex.key", - native_shared_libs: ["lib_dep", "libfoo"], + native_shared_libs: ["lib_dep_on_bar", "libbar"], compile_multilib: "both", file_contexts: ":myapex-file_contexts", updatable: false, @@ -4255,6 +4252,18 @@ func TestDependenciesInApexManifest(t *testing.T) { } cc_library { + name: "lib_dep_on_bar", + srcs: ["mylib.cpp"], + shared_libs: ["libbar"], + system_shared_libs: [], + stl: "none", + apex_available: [ + "myapex_selfcontained", + ], + } + + + cc_library { name: "libfoo", srcs: ["mytest.cpp"], stubs: { @@ -4264,9 +4273,22 @@ func TestDependenciesInApexManifest(t *testing.T) { stl: "none", apex_available: [ "myapex_provider", + ], + } + + cc_library { + name: "libbar", + srcs: ["mytest.cpp"], + stubs: { + versions: ["1"], + }, + system_shared_libs: [], + stl: "none", + apex_available: [ "myapex_selfcontained", ], } + `) var apexManifestRule android.TestingBuildParams @@ -4293,7 +4315,7 @@ func TestDependenciesInApexManifest(t *testing.T) { apexManifestRule = ctx.ModuleForTests("myapex_selfcontained", "android_common_myapex_selfcontained_image").Rule("apexManifestRule") provideNativeLibs = names(apexManifestRule.Args["provideNativeLibs"]) requireNativeLibs = names(apexManifestRule.Args["requireNativeLibs"]) - ensureListContains(t, provideNativeLibs, "libfoo.so") + ensureListContains(t, provideNativeLibs, "libbar.so") ensureListEmpty(t, requireNativeLibs) } @@ -8575,14 +8597,14 @@ func TestTestForForLibInOtherApex(t *testing.T) { apex { name: "com.android.art", key: "myapex.key", - native_shared_libs: ["mylib"], + native_shared_libs: ["libnativebridge"], updatable: false, } apex { name: "com.android.art.debug", key: "myapex.key", - native_shared_libs: ["mylib", "mytestlib"], + native_shared_libs: ["libnativebridge", "libnativebrdige_test"], updatable: false, } @@ -8593,8 +8615,8 @@ func TestTestForForLibInOtherApex(t *testing.T) { } cc_library { - name: "mylib", - srcs: ["mylib.cpp"], + name: "libnativebridge", + srcs: ["libnativebridge.cpp"], system_shared_libs: [], stl: "none", stubs: { @@ -8604,10 +8626,10 @@ func TestTestForForLibInOtherApex(t *testing.T) { } cc_library { - name: "mytestlib", + name: "libnativebrdige_test", srcs: ["mylib.cpp"], system_shared_libs: [], - shared_libs: ["mylib"], + shared_libs: ["libnativebridge"], stl: "none", apex_available: ["com.android.art.debug"], test_for: ["com.android.art"], @@ -10279,3 +10301,77 @@ func TestCannedFsConfig_HasCustomConfig(t *testing.T) { // Ensure that canned_fs_config has "cat my_config" at the end ensureContains(t, cmd, `( echo '/ 1000 1000 0755'; echo '/apex_manifest.json 1000 1000 0644'; echo '/apex_manifest.pb 1000 1000 0644'; cat my_config ) >`) } + +func TestStubLibrariesMultipleApexViolation(t *testing.T) { + testCases := []struct { + desc string + hasStubs bool + apexAvailable string + expectedError string + }{ + { + desc: "non-stub library can have multiple apex_available", + hasStubs: false, + apexAvailable: `["myapex", "otherapex"]`, + }, + { + desc: "stub library should not be available to anyapex", + hasStubs: true, + apexAvailable: `["//apex_available:anyapex"]`, + expectedError: "Stub libraries should have a single apex_available.*anyapex", + }, + { + desc: "stub library should not be available to multiple apexes", + hasStubs: true, + apexAvailable: `["myapex", "otherapex"]`, + expectedError: "Stub libraries should have a single apex_available.*myapex.*otherapex", + }, + { + desc: "stub library can be available to a core apex and a test apex", + hasStubs: true, + apexAvailable: `["myapex", "test_myapex"]`, + }, + } + bpTemplate := ` + cc_library { + name: "libfoo", + %v + apex_available: %v, + } + apex { + name: "myapex", + key: "apex.key", + updatable: false, + native_shared_libs: ["libfoo"], + } + apex { + name: "otherapex", + key: "apex.key", + updatable: false, + } + apex_test { + name: "test_myapex", + key: "apex.key", + updatable: false, + native_shared_libs: ["libfoo"], + } + apex_key { + name: "apex.key", + } + ` + for _, tc := range testCases { + stubs := "" + if tc.hasStubs { + stubs = `stubs: {symbol_file: "libfoo.map.txt"},` + } + bp := fmt.Sprintf(bpTemplate, stubs, tc.apexAvailable) + mockFsFixturePreparer := android.FixtureModifyMockFS(func(fs android.MockFS) { + fs["system/sepolicy/apex/test_myapex-file_contexts"] = nil + }) + if tc.expectedError == "" { + testApex(t, bp, mockFsFixturePreparer) + } else { + testApexError(t, tc.expectedError, bp, mockFsFixturePreparer) + } + } +} diff --git a/apex/bootclasspath_fragment_test.go b/apex/bootclasspath_fragment_test.go index 2ddfd0305..d78481828 100644 --- a/apex/bootclasspath_fragment_test.go +++ b/apex/bootclasspath_fragment_test.go @@ -116,18 +116,18 @@ func TestBootclasspathFragments(t *testing.T) { // Make sure that the art-bootclasspath-fragment is using the correct configuration. checkBootclasspathFragment(t, result, "art-bootclasspath-fragment", "android_common_apex10000", "com.android.art:baz,com.android.art:quuz", ` -test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art -test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat -test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex -test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-quuz.art -test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-quuz.oat -test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-quuz.vdex -test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art -test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat -test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex -test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-quuz.art -test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-quuz.oat -test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-quuz.vdex +dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art +dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat +dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex +dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-quuz.art +dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-quuz.oat +dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-quuz.vdex +dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art +dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat +dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex +dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-quuz.art +dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-quuz.oat +dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-quuz.vdex `) } @@ -764,7 +764,7 @@ func TestBootclasspathFragmentInPrebuiltArtApex(t *testing.T) { checkCopiesToPredefinedLocationForArt(t, result.Config, module, "bar", "foo") // Check that the right deapexer module was chosen for a boot image. - param := module.Output("out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art") + param := module.Output("out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art") android.AssertStringDoesContain(t, "didn't find the expected deapexer in the input path", param.Input.String(), "/com.android.art.deapexer") }) @@ -782,7 +782,7 @@ func checkCopiesToPredefinedLocationForArt(t *testing.T, config android.Config, bootJarLocations := []string{} for _, output := range module.AllOutputs() { output = android.StringRelativeToTop(config, output) - if strings.HasPrefix(output, "out/soong/test_device/dex_artjars_input/") { + if strings.HasPrefix(output, "out/soong/dexpreopt_arm64/dex_artjars_input/") { bootJarLocations = append(bootJarLocations, output) } } @@ -790,7 +790,7 @@ func checkCopiesToPredefinedLocationForArt(t *testing.T, config android.Config, sort.Strings(bootJarLocations) expected := []string{} for _, m := range modules { - expected = append(expected, fmt.Sprintf("out/soong/test_device/dex_artjars_input/%s.jar", m)) + expected = append(expected, fmt.Sprintf("out/soong/dexpreopt_arm64/dex_artjars_input/%s.jar", m)) } sort.Strings(expected) diff --git a/apex/bp2build_test.go b/apex/bp2build_test.go index 2a0f6e9e2..b1b6a75e8 100644 --- a/apex/bp2build_test.go +++ b/apex/bp2build_test.go @@ -15,7 +15,10 @@ package apex import ( "android/soong/android" + "android/soong/android/allowlists" "android/soong/bazel/cquery" + "fmt" + "path/filepath" "strings" "testing" ) @@ -326,7 +329,7 @@ apex { } func TestOverrideApexImageInMixedBuilds(t *testing.T) { - bp := ` + originalBp := ` apex_key{ name: "foo_key", } @@ -340,122 +343,203 @@ apex { min_sdk_version: "31", package_name: "pkg_name", file_contexts: ":myapex-file_contexts", - bazel_module: { label: "//:foo" }, -} + %s +}` + overrideBp := ` override_apex { name: "override_foo", key: "override_foo_key", package_name: "override_pkg_name", base: "foo", - bazel_module: { label: "//:override_foo" }, + %s } ` - outputBaseDir := "out/bazel" - result := android.GroupFixturePreparers( - prepareForApexTest, - android.FixtureModifyConfig(func(config android.Config) { - config.BazelContext = android.MockBazelContext{ - OutputBaseDir: outputBaseDir, - LabelToApexInfo: map[string]cquery.ApexInfo{ - "//:foo": cquery.ApexInfo{ - // ApexInfo Starlark provider - SignedOutput: "signed_out.apex", - UnsignedOutput: "unsigned_out.apex", - BundleKeyInfo: []string{"public_key", "private_key"}, - ContainerKeyInfo: []string{"container_cert", "container_private"}, - SymbolsUsedByApex: "foo_using.txt", - JavaSymbolsUsedByApex: "foo_using.xml", - BundleFile: "apex_bundle.zip", - InstalledFiles: "installed-files.txt", - RequiresLibs: []string{"//path/c:c", "//path/d:d"}, - - // unused - PackageName: "pkg_name", - ProvidesLibs: []string{"a", "b"}, - - // ApexMkInfo Starlark provider - MakeModulesToInstall: []string{"c"}, // d deliberately omitted - }, - "//:override_foo": cquery.ApexInfo{ - // ApexInfo Starlark provider - SignedOutput: "override_signed_out.apex", - UnsignedOutput: "override_unsigned_out.apex", - BundleKeyInfo: []string{"override_public_key", "override_private_key"}, - ContainerKeyInfo: []string{"override_container_cert", "override_container_private"}, - SymbolsUsedByApex: "override_foo_using.txt", - JavaSymbolsUsedByApex: "override_foo_using.xml", - BundleFile: "override_apex_bundle.zip", - InstalledFiles: "override_installed-files.txt", - RequiresLibs: []string{"//path/c:c", "//path/d:d"}, - - // unused - PackageName: "override_pkg_name", - ProvidesLibs: []string{"a", "b"}, + originalApexBpDir := "original" + originalApexName := "foo" + overrideApexBpDir := "override" + overrideApexName := "override_foo" + + defaultApexLabel := fmt.Sprintf("//%s:%s", originalApexBpDir, originalApexName) + defaultOverrideApexLabel := fmt.Sprintf("//%s:%s", overrideApexBpDir, overrideApexName) + + testCases := []struct { + desc string + bazelModuleProp string + apexLabel string + overrideBazelModuleProp string + overrideApexLabel string + bp2buildConfiguration android.Bp2BuildConversionAllowlist + }{ + { + desc: "both explicit labels", + bazelModuleProp: `bazel_module: { label: "//:foo" },`, + apexLabel: "//:foo", + overrideBazelModuleProp: `bazel_module: { label: "//:override_foo" },`, + overrideApexLabel: "//:override_foo", + bp2buildConfiguration: android.NewBp2BuildAllowlist(), + }, + { + desc: "both explicitly allowed", + bazelModuleProp: `bazel_module: { bp2build_available: true },`, + apexLabel: defaultApexLabel, + overrideBazelModuleProp: `bazel_module: { bp2build_available: true },`, + overrideApexLabel: defaultOverrideApexLabel, + bp2buildConfiguration: android.NewBp2BuildAllowlist(), + }, + { + desc: "original allowed by dir, override allowed by name", + apexLabel: defaultApexLabel, + overrideApexLabel: defaultOverrideApexLabel, + bp2buildConfiguration: android.NewBp2BuildAllowlist().SetDefaultConfig( + map[string]allowlists.BazelConversionConfigEntry{ + originalApexBpDir: allowlists.Bp2BuildDefaultTrue, + }).SetModuleAlwaysConvertList([]string{ + overrideApexName, + }), + }, + { + desc: "both allowed by name", + apexLabel: defaultApexLabel, + overrideApexLabel: defaultOverrideApexLabel, + bp2buildConfiguration: android.NewBp2BuildAllowlist().SetModuleAlwaysConvertList([]string{ + originalApexName, + overrideApexName, + }), + }, + { + desc: "override allowed by name", + apexLabel: defaultApexLabel, + overrideApexLabel: defaultOverrideApexLabel, + bp2buildConfiguration: android.NewBp2BuildAllowlist().SetModuleAlwaysConvertList([]string{ + overrideApexName, + }), + }, + { + desc: "override allowed by dir", + apexLabel: defaultApexLabel, + overrideApexLabel: defaultOverrideApexLabel, + bp2buildConfiguration: android.NewBp2BuildAllowlist().SetDefaultConfig( + map[string]allowlists.BazelConversionConfigEntry{ + overrideApexBpDir: allowlists.Bp2BuildDefaultTrue, + }).SetModuleAlwaysConvertList([]string{}), + }, + } - // ApexMkInfo Starlark provider - MakeModulesToInstall: []string{"c"}, // d deliberately omitted - }, - }, + for _, tc := range testCases { + t.Run(tc.desc, func(t *testing.T) { + outputBaseDir := "out/bazel" + result := android.GroupFixturePreparers( + prepareForApexTest, + android.FixtureAddTextFile(filepath.Join(originalApexBpDir, "Android.bp"), fmt.Sprintf(originalBp, tc.bazelModuleProp)), + android.FixtureAddTextFile(filepath.Join(overrideApexBpDir, "Android.bp"), fmt.Sprintf(overrideBp, tc.overrideBazelModuleProp)), + android.FixtureModifyContext(func(ctx *android.TestContext) { + ctx.RegisterBp2BuildConfig(tc.bp2buildConfiguration) + }), + android.FixtureModifyConfig(func(config android.Config) { + config.BazelContext = android.MockBazelContext{ + OutputBaseDir: outputBaseDir, + LabelToApexInfo: map[string]cquery.ApexInfo{ + tc.apexLabel: cquery.ApexInfo{ + // ApexInfo Starlark provider + SignedOutput: "signed_out.apex", + UnsignedOutput: "unsigned_out.apex", + BundleKeyInfo: []string{"public_key", "private_key"}, + ContainerKeyInfo: []string{"container_cert", "container_private"}, + SymbolsUsedByApex: "foo_using.txt", + JavaSymbolsUsedByApex: "foo_using.xml", + BundleFile: "apex_bundle.zip", + InstalledFiles: "installed-files.txt", + RequiresLibs: []string{"//path/c:c", "//path/d:d"}, + + // unused + PackageName: "pkg_name", + ProvidesLibs: []string{"a", "b"}, + + // ApexMkInfo Starlark provider + MakeModulesToInstall: []string{"c"}, // d deliberately omitted + }, + tc.overrideApexLabel: cquery.ApexInfo{ + // ApexInfo Starlark provider + SignedOutput: "override_signed_out.apex", + UnsignedOutput: "override_unsigned_out.apex", + BundleKeyInfo: []string{"override_public_key", "override_private_key"}, + ContainerKeyInfo: []string{"override_container_cert", "override_container_private"}, + SymbolsUsedByApex: "override_foo_using.txt", + JavaSymbolsUsedByApex: "override_foo_using.xml", + BundleFile: "override_apex_bundle.zip", + InstalledFiles: "override_installed-files.txt", + RequiresLibs: []string{"//path/c:c", "//path/d:d"}, + + // unused + PackageName: "override_pkg_name", + ProvidesLibs: []string{"a", "b"}, + + // ApexMkInfo Starlark provider + MakeModulesToInstall: []string{"c"}, // d deliberately omitted + }, + }, + } + }), + ).RunTest(t) + + m := result.ModuleForTests("foo", "android_common_override_foo_foo_image").Module() + ab, ok := m.(*apexBundle) + if !ok { + t.Fatalf("Expected module to be an apexBundle, was not") } - }), - ).RunTestWithBp(t, bp) - m := result.ModuleForTests("foo", "android_common_override_foo_foo_image").Module() - ab, ok := m.(*apexBundle) - if !ok { - t.Fatalf("Expected module to be an apexBundle, was not") - } - - if w, g := "out/bazel/execroot/__main__/override_public_key", ab.publicKeyFile.String(); w != g { - t.Errorf("Expected public key %q, got %q", w, g) - } + if w, g := "out/bazel/execroot/__main__/override_public_key", ab.publicKeyFile.String(); w != g { + t.Errorf("Expected public key %q, got %q", w, g) + } - if w, g := "out/bazel/execroot/__main__/override_private_key", ab.privateKeyFile.String(); w != g { - t.Errorf("Expected private key %q, got %q", w, g) - } + if w, g := "out/bazel/execroot/__main__/override_private_key", ab.privateKeyFile.String(); w != g { + t.Errorf("Expected private key %q, got %q", w, g) + } - if w, g := "out/bazel/execroot/__main__/override_container_cert", ab.containerCertificateFile.String(); w != g { - t.Errorf("Expected public container key %q, got %q", w, g) - } + if w, g := "out/bazel/execroot/__main__/override_container_cert", ab.containerCertificateFile; g != nil && w != g.String() { + t.Errorf("Expected public container key %q, got %q", w, g) + } - if w, g := "out/bazel/execroot/__main__/override_container_private", ab.containerPrivateKeyFile.String(); w != g { - t.Errorf("Expected private container key %q, got %q", w, g) - } + if w, g := "out/bazel/execroot/__main__/override_container_private", ab.containerPrivateKeyFile; g != nil && w != g.String() { + t.Errorf("Expected private container key %q, got %q", w, g) + } - if w, g := "out/bazel/execroot/__main__/override_signed_out.apex", ab.outputFile.String(); w != g { - t.Errorf("Expected output file %q, got %q", w, g) - } + if w, g := "out/bazel/execroot/__main__/override_signed_out.apex", ab.outputFile.String(); w != g { + t.Errorf("Expected output file %q, got %q", w, g) + } - if w, g := "out/bazel/execroot/__main__/override_foo_using.txt", ab.nativeApisUsedByModuleFile.String(); w != g { - t.Errorf("Expected output file %q, got %q", w, g) - } + if w, g := "out/bazel/execroot/__main__/override_foo_using.txt", ab.nativeApisUsedByModuleFile.String(); w != g { + t.Errorf("Expected output file %q, got %q", w, g) + } - if w, g := "out/bazel/execroot/__main__/override_foo_using.xml", ab.javaApisUsedByModuleFile.String(); w != g { - t.Errorf("Expected output file %q, got %q", w, g) - } + if w, g := "out/bazel/execroot/__main__/override_foo_using.xml", ab.javaApisUsedByModuleFile.String(); w != g { + t.Errorf("Expected output file %q, got %q", w, g) + } - if w, g := "out/bazel/execroot/__main__/override_installed-files.txt", ab.installedFilesFile.String(); w != g { - t.Errorf("Expected installed-files.txt %q, got %q", w, g) - } + if w, g := "out/bazel/execroot/__main__/override_installed-files.txt", ab.installedFilesFile.String(); w != g { + t.Errorf("Expected installed-files.txt %q, got %q", w, g) + } - mkData := android.AndroidMkDataForTest(t, result.TestContext, m) - var builder strings.Builder - mkData.Custom(&builder, "override_foo", "BAZEL_TARGET_", "", mkData) + mkData := android.AndroidMkDataForTest(t, result.TestContext, m) + var builder strings.Builder + mkData.Custom(&builder, "override_foo", "BAZEL_TARGET_", "", mkData) - data := builder.String() - if w := "ALL_MODULES.$(my_register_name).BUNDLE := out/bazel/execroot/__main__/override_apex_bundle.zip"; !strings.Contains(data, w) { - t.Errorf("Expected %q in androidmk data, but did not find %q", w, data) - } - if w := "$(call dist-for-goals,checkbuild,out/bazel/execroot/__main__/override_installed-files.txt:override_foo-installed-files.txt)"; !strings.Contains(data, w) { - t.Errorf("Expected %q in androidmk data, but did not find %q", w, data) - } + data := builder.String() + if w := "ALL_MODULES.$(my_register_name).BUNDLE := out/bazel/execroot/__main__/override_apex_bundle.zip"; !strings.Contains(data, w) { + t.Errorf("Expected %q in androidmk data, but did not find %q", w, data) + } + if w := "$(call dist-for-goals,checkbuild,out/bazel/execroot/__main__/override_installed-files.txt:override_foo-installed-files.txt)"; !strings.Contains(data, w) { + t.Errorf("Expected %q in androidmk data, but did not find %q", w, data) + } - // make modules to be installed to system - if len(ab.makeModulesToInstall) != 1 && ab.makeModulesToInstall[0] != "c" { - t.Errorf("Expected makeModulestoInstall slice to only contain 'c', got %q", ab.makeModulesToInstall) - } - if w := "LOCAL_REQUIRED_MODULES := c"; !strings.Contains(data, w) { - t.Errorf("Expected %q in androidmk data, but did not find it in %q", w, data) + // make modules to be installed to system + if len(ab.makeModulesToInstall) != 1 || ab.makeModulesToInstall[0] != "c" { + t.Errorf("Expected makeModulestoInstall slice to only contain 'c', got %q", ab.makeModulesToInstall) + } + if w := "LOCAL_REQUIRED_MODULES := c"; !strings.Contains(data, w) { + t.Errorf("Expected %q in androidmk data, but did not find it in %q", w, data) + } + }) } } diff --git a/bazel/configurability.go b/bazel/configurability.go index 46802565c..d01877dd5 100644 --- a/bazel/configurability.go +++ b/bazel/configurability.go @@ -268,9 +268,8 @@ func (ct configurationType) validateConfig(config string) { case productVariables: // do nothing case osAndInApex: - if _, ok := osAndInApexMap[config]; !ok { - panic(fmt.Errorf("Unknown os+in_apex config: %s", config)) - } + // do nothing + // this axis can contain additional per-apex keys case inApex: if _, ok := inApexMap[config]; !ok { panic(fmt.Errorf("Unknown in_apex config: %s", config)) @@ -299,7 +298,10 @@ func (ca ConfigurationAxis) SelectKey(config string) string { } return fmt.Sprintf("%s:%s", productVariableBazelPackage, config) case osAndInApex: - return osAndInApexMap[config] + if ret, exists := osAndInApexMap[config]; exists { + return ret + } + return config case inApex: return inApexMap[config] default: diff --git a/bazel/properties.go b/bazel/properties.go index 40d0ba37a..1757bad49 100644 --- a/bazel/properties.go +++ b/bazel/properties.go @@ -1424,3 +1424,14 @@ func TryVariableSubstitution(s string, productVariable string) (string, bool) { sub := productVariableSubstitutionPattern.ReplaceAllString(s, "$("+productVariable+")") return sub, s != sub } + +// StringMapAttribute is a map of strings. +// The use case for this is storing the flag_values in a config_setting object. +// Bazel rules do not support map attributes, and this should NOT be used in Bazel rules. +type StringMapAttribute map[string]string + +// ConfigSettingAttributes stores the keys of a config_setting object. +type ConfigSettingAttributes struct { + // Each key in Flag_values is a label to a custom string_setting + Flag_values StringMapAttribute +} diff --git a/bp2build/build_conversion.go b/bp2build/build_conversion.go index b7678a469..a86048418 100644 --- a/bp2build/build_conversion.go +++ b/bp2build/build_conversion.go @@ -600,6 +600,11 @@ func prettyPrint(propertyValue reflect.Value, indent int, emitZeroValues bool) ( // TODO(b/164227191): implement pretty print for interfaces. // Interfaces are used for for arch, multilib and target properties. return "", nil + case reflect.Map: + if v, ok := propertyValue.Interface().(bazel.StringMapAttribute); ok { + return starlark_fmt.PrintStringStringDict(v, indent), nil + } + return "", fmt.Errorf("bp2build expects map of type map[string]string for field: %s", propertyValue) default: return "", fmt.Errorf( "unexpected kind for property struct field: %s", propertyValue.Kind()) diff --git a/bp2build/build_conversion_test.go b/bp2build/build_conversion_test.go index 73ee26b60..1b64055f7 100644 --- a/bp2build/build_conversion_test.go +++ b/bp2build/build_conversion_test.go @@ -1898,3 +1898,36 @@ func TestGenerateApiBazelTargets(t *testing.T) { Description: "Generating API contribution Bazel targets for custom module", }) } + +func TestGenerateConfigSetting(t *testing.T) { + bp := ` + custom { + name: "foo", + test_config_setting: true, + } + ` + expectedBazelTargets := []string{ + MakeBazelTargetNoRestrictions( + "config_setting", + "foo_config_setting", + AttrNameToString{ + "flag_values": `{ + "//build/bazel/rules/my_string_setting": "foo", + }`, + }, + ), + MakeBazelTarget( + "custom", + "foo", + AttrNameToString{}, + ), + } + registerCustomModule := func(ctx android.RegistrationContext) { + ctx.RegisterModuleType("custom", customModuleFactoryHostAndDevice) + } + RunBp2BuildTestCase(t, registerCustomModule, Bp2buildTestCase{ + Blueprint: bp, + ExpectedBazelTargets: expectedBazelTargets, + Description: "Generating API contribution Bazel targets for custom module", + }) +} diff --git a/bp2build/bzl_conversion_test.go b/bp2build/bzl_conversion_test.go index a8e557deb..fa1bf8af6 100644 --- a/bp2build/bzl_conversion_test.go +++ b/bp2build/bzl_conversion_test.go @@ -108,6 +108,7 @@ custom = rule( "string_literal_prop": attr.string(), "string_prop": attr.string(), "string_ptr_prop": attr.string(), + "test_config_setting": attr.bool(), }, ) @@ -139,6 +140,7 @@ custom_defaults = rule( "string_literal_prop": attr.string(), "string_prop": attr.string(), "string_ptr_prop": attr.string(), + "test_config_setting": attr.bool(), }, ) @@ -170,6 +172,7 @@ custom_test_ = rule( "string_literal_prop": attr.string(), "string_prop": attr.string(), "string_ptr_prop": attr.string(), + "test_config_setting": attr.bool(), # test_prop start # "test_string_prop": attr.string(), # test_prop end diff --git a/bp2build/cc_library_conversion_test.go b/bp2build/cc_library_conversion_test.go index b61b0a7cf..776129f58 100644 --- a/bp2build/cc_library_conversion_test.go +++ b/bp2build/cc_library_conversion_test.go @@ -153,10 +153,10 @@ cc_library { "//build/bazel/platforms/os:linux_glibc": ["linux.cpp"], "//conditions:default": [], })`, - "sdk_version": `"current"`, - "min_sdk_version": `"29"`, - "use_version_lib": `True`, - "implementation_whole_archive_deps": `["//build/soong/cc/libbuildversion:libbuildversion"]`, + "sdk_version": `"current"`, + "min_sdk_version": `"29"`, + "use_version_lib": `True`, + "whole_archive_deps": `["//build/soong/cc/libbuildversion:libbuildversion"]`, }), }) } @@ -4454,3 +4454,72 @@ cc_library { }, }) } + +// Test that a config_setting specific to an apex is created by cc_library. +func TestCcLibraryCreatesInApexConfigSetting(t *testing.T) { + runCcLibraryTestCase(t, Bp2buildTestCase{ + Description: "cc_library creates a config_setting for each apex in apex_available", + ModuleTypeUnderTest: "cc_library", + ModuleTypeUnderTestFactory: cc.LibraryFactory, + Dir: "build/bazel/rules/apex", + Blueprint: ` +cc_library { + name: "foo", + apex_available: [ + "//apex_available:platform", // This will be skipped, since it is equivalent to //build/bazel/rules/apex:android-non_apex + "myapex" + ], +}`, + ExpectedBazelTargets: []string{ + MakeBazelTargetNoRestrictions( + "config_setting", + "android-in_myapex", + AttrNameToString{ + "flag_values": `{ + "//build/bazel/rules/apex:apex_name": "myapex", + }`, + }, + ), + }, + }) +} + +func TestCcLibraryCppFlagsInProductVariables(t *testing.T) { + runCcLibraryTestCase(t, Bp2buildTestCase{ + Description: "cc_library cppflags in product variables", + ModuleTypeUnderTest: "cc_library", + ModuleTypeUnderTestFactory: cc.LibraryFactory, + Blueprint: soongCcLibraryPreamble + `cc_library { + name: "a", + srcs: ["a.cpp"], + cppflags: [ + "-Wextra", + "-DDEBUG_ONLY_CODE=0", + ], + product_variables: { + eng: { + cppflags: [ + "-UDEBUG_ONLY_CODE", + "-DDEBUG_ONLY_CODE=1", + ], + }, + }, + include_build_directory: false, +} +`, + ExpectedBazelTargets: makeCcLibraryTargets("a", AttrNameToString{ + "cppflags": `[ + "-Wextra", + "-DDEBUG_ONLY_CODE=0", + ] + select({ + "//build/bazel/product_variables:eng": [ + "-UDEBUG_ONLY_CODE", + "-DDEBUG_ONLY_CODE=1", + ], + "//conditions:default": [], + })`, + "srcs": `["a.cpp"]`, + }), + }, + ) +} diff --git a/bp2build/cc_library_shared_conversion_test.go b/bp2build/cc_library_shared_conversion_test.go index f5d62c692..47dff8a57 100644 --- a/bp2build/cc_library_shared_conversion_test.go +++ b/bp2build/cc_library_shared_conversion_test.go @@ -516,8 +516,8 @@ func TestCcLibrarySharedUseVersionLib(t *testing.T) { }`, ExpectedBazelTargets: []string{ MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ - "use_version_lib": "True", - "implementation_whole_archive_deps": `["//build/soong/cc/libbuildversion:libbuildversion"]`, + "use_version_lib": "True", + "whole_archive_deps": `["//build/soong/cc/libbuildversion:libbuildversion"]`, }), }, }) diff --git a/bp2build/cc_library_static_conversion_test.go b/bp2build/cc_library_static_conversion_test.go index f89f2dd3f..948801486 100644 --- a/bp2build/cc_library_static_conversion_test.go +++ b/bp2build/cc_library_static_conversion_test.go @@ -1613,7 +1613,7 @@ func TestCcLibraryStaticUseVersionLib(t *testing.T) { }`, ExpectedBazelTargets: []string{ MakeBazelTarget("cc_library_static", "foo", AttrNameToString{ - "implementation_whole_archive_deps": `["//build/soong/cc/libbuildversion:libbuildversion"]`, + "whole_archive_deps": `["//build/soong/cc/libbuildversion:libbuildversion"]`, }), }, }) diff --git a/bp2build/cc_test_conversion_test.go b/bp2build/cc_test_conversion_test.go index 20adddbca..4df4d4d46 100644 --- a/bp2build/cc_test_conversion_test.go +++ b/bp2build/cc_test_conversion_test.go @@ -76,17 +76,28 @@ cc_test { static_libs: ["hostlib"], }, }, + static_libs: ["cc_test_lib1"], + shared_libs: ["cc_test_lib2"], data: [":data_mod", "file.txt"], data_bins: [":cc_bin"], data_libs: [":cc_lib"], cflags: ["-Wall"], } + +cc_test_library { + name: "cc_test_lib1", + host_supported: true, + include_build_directory: false, +} ` + simpleModuleDoNotConvertBp2build("cc_library", "foolib") + simpleModuleDoNotConvertBp2build("cc_library_static", "hostlib") + simpleModuleDoNotConvertBp2build("genrule", "data_mod") + simpleModuleDoNotConvertBp2build("cc_binary", "cc_bin") + - simpleModuleDoNotConvertBp2build("cc_test_library", "cc_lib"), + simpleModuleDoNotConvertBp2build("cc_library", "cc_lib") + + simpleModuleDoNotConvertBp2build("cc_test_library", "cc_test_lib2"), targets: []testBazelTarget{ + {"cc_library_shared", "cc_test_lib1", AttrNameToString{}}, + {"cc_library_static", "cc_test_lib1_bp2build_cc_library_static", AttrNameToString{}}, {"cc_test", "mytest", AttrNameToString{ "copts": `["-Wall"]`, "data": `[ @@ -95,7 +106,7 @@ cc_test { ":cc_bin", ":cc_lib", ]`, - "deps": `select({ + "deps": `[":cc_test_lib1_bp2build_cc_library_static"] + select({ "//build/bazel/platforms/os:darwin": [":hostlib"], "//build/bazel/platforms/os:linux_bionic": [":hostlib"], "//build/bazel/platforms/os:linux_glibc": [":hostlib"], @@ -106,7 +117,7 @@ cc_test { "gtest": "True", "isolated": "True", "local_includes": `["."]`, - "dynamic_deps": `select({ + "dynamic_deps": `[":cc_test_lib2"] + select({ "//build/bazel/platforms/os:android": [":foolib"], "//conditions:default": [], })`, diff --git a/bp2build/conversion.go b/bp2build/conversion.go index 608fcd879..f5983323c 100644 --- a/bp2build/conversion.go +++ b/bp2build/conversion.go @@ -59,14 +59,17 @@ func soongInjectionFiles(cfg android.Config, metrics CodegenMetrics) ([]BazelFil files = append(files, newFile("product_config", "arch_configuration.bzl", android.StarlarkArchConfigurations())) - apiLevelsContent, err := json.Marshal(android.GetApiLevelsMap(cfg)) + apiLevelsMap, err := android.GetApiLevelsMap(cfg) + if err != nil { + return nil, err + } + apiLevelsContent, err := json.Marshal(apiLevelsMap) if err != nil { return nil, err } files = append(files, newFile("api_levels", GeneratedBuildFileName, `exports_files(["api_levels.json"])`)) // TODO(b/269691302) value of apiLevelsContent is product variable dependent and should be avoided for soong injection files = append(files, newFile("api_levels", "api_levels.json", string(apiLevelsContent))) - files = append(files, newFile("api_levels", "api_levels.bzl", android.StarlarkApiLevelConfigs(cfg))) files = append(files, newFile("api_levels", "platform_versions.bzl", platformVersionContents(cfg))) files = append(files, newFile("allowlists", GeneratedBuildFileName, "")) diff --git a/bp2build/conversion_test.go b/bp2build/conversion_test.go index 2f5dc3cb7..379f83bd8 100644 --- a/bp2build/conversion_test.go +++ b/bp2build/conversion_test.go @@ -159,10 +159,6 @@ func TestCreateBazelFiles_Bp2Build_CreatesDefaultFiles(t *testing.T) { }, { dir: "api_levels", - basename: "api_levels.bzl", - }, - { - dir: "api_levels", basename: "platform_versions.bzl", }, { diff --git a/bp2build/testing.go b/bp2build/testing.go index 6e919db2b..fd99ff007 100644 --- a/bp2build/testing.go +++ b/bp2build/testing.go @@ -317,6 +317,8 @@ type customProps struct { One_to_many_prop *bool Api *string // File describing the APIs of this module + + Test_config_setting *bool // Used to test generation of config_setting targets } type customModule struct { @@ -490,6 +492,27 @@ func (m *customModule) ConvertWithBp2build(ctx android.TopDownMutatorContext) { } ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: m.Name()}, attrs) + + if proptools.Bool(m.props.Test_config_setting) { + m.createConfigSetting(ctx) + } + +} + +func (m *customModule) createConfigSetting(ctx android.TopDownMutatorContext) { + csa := bazel.ConfigSettingAttributes{ + Flag_values: bazel.StringMapAttribute{ + "//build/bazel/rules/my_string_setting": m.Name(), + }, + } + ca := android.CommonAttributes{ + Name: m.Name() + "_config_setting", + } + ctx.CreateBazelConfigSetting( + csa, + ca, + ctx.ModuleDir(), + ) } var _ android.ApiProvider = (*customModule)(nil) diff --git a/cc/binary.go b/cc/binary.go index 097f82252..98b9923ee 100644 --- a/cc/binary.go +++ b/cc/binary.go @@ -661,7 +661,7 @@ func binaryBp2build(ctx android.TopDownMutatorContext, m *Module) { // shared with cc_test binaryAttrs := binaryBp2buildAttrs(ctx, m) - tags := android.ApexAvailableTags(m) + tags := android.ApexAvailableTagsWithoutTestApexes(ctx, m) ctx.CreateBazelTargetModule(bazel.BazelTargetModuleProperties{ Rule_class: "cc_binary", Bzl_load_location: "//build/bazel/rules/cc:cc_binary.bzl", diff --git a/cc/bp2build.go b/cc/bp2build.go index ad9d7021d..749fce59a 100644 --- a/cc/bp2build.go +++ b/cc/bp2build.go @@ -17,6 +17,7 @@ import ( "fmt" "path/filepath" "strings" + "sync" "android/soong/android" "android/soong/bazel" @@ -270,7 +271,7 @@ func bp2buildParseStaticOrSharedProps(ctx android.BazelConversionPathContext, mo attrs.Srcs_c = partitionedSrcs[cSrcPartition] attrs.Srcs_as = partitionedSrcs[asSrcPartition] - attrs.Apex_available = android.ConvertApexAvailableToTags(apexAvailable) + attrs.Apex_available = android.ConvertApexAvailableToTagsWithoutTestApexes(ctx.(android.TopDownMutatorContext), apexAvailable) attrs.Features.Append(convertHiddenVisibilityToFeatureStaticOrShared(ctx, module, isStatic)) @@ -527,7 +528,7 @@ func (ca *compilerAttributes) convertProductVariables(ctx android.BazelConversio productVarPropNameToAttribute := map[string]*bazel.StringListAttribute{ "Cflags": &ca.copts, "Asflags": &ca.asFlags, - "CppFlags": &ca.cppFlags, + "Cppflags": &ca.cppFlags, } for propName, attr := range productVarPropNameToAttribute { if productConfigProps, exists := productVariableProps[propName]; exists { @@ -923,7 +924,7 @@ func bp2buildCcAidlLibrary( return false }) - apexAvailableTags := android.ApexAvailableTags(ctx.Module()) + apexAvailableTags := android.ApexAvailableTagsWithoutTestApexes(ctx.(android.TopDownMutatorContext), ctx.Module()) sdkAttrs := bp2BuildParseSdkAttributes(m) if !aidlSrcs.IsEmpty() { @@ -1052,11 +1053,7 @@ func (la *linkerAttributes) bp2buildForAxisAndConfig(ctx android.BazelConversion _, staticLibs = android.RemoveFromList(versionLib, staticLibs) // only add the dep if it is not in progress if !versionLibAlreadyInDeps { - if isBinary { - wholeStaticLibs = append(wholeStaticLibs, versionLib) - } else { - la.implementationWholeArchiveDeps.SetSelectValue(axis, config, bazelLabelForWholeDepsExcludes(ctx, []string{versionLib}, props.Exclude_static_libs)) - } + wholeStaticLibs = append(wholeStaticLibs, versionLib) } } } @@ -1196,6 +1193,63 @@ func availableToSameApexes(a, b []string) bool { return !differ } +var ( + apexConfigSettingKey = android.NewOnceKey("apexConfigSetting") + apexConfigSettingLock sync.Mutex +) + +func getApexConfigSettingMap(config android.Config) *map[string]bool { + return config.Once(apexConfigSettingKey, func() interface{} { + return &map[string]bool{} + }).(*map[string]bool) +} + +// Create a config setting for this apex in build/bazel/rules/apex +// The use case for this is stub/impl selection in cc libraries +// Long term, these config_setting(s) should be colocated with the respective apex definitions. +// Note that this is an anti-pattern: The config_setting should be created from the apex definition +// and not from a cc_library. +// This anti-pattern is needed today since not all apexes have been allowlisted. +func createInApexConfigSetting(ctx android.TopDownMutatorContext, apexName string) { + if apexName == android.AvailableToPlatform || apexName == android.AvailableToAnyApex { + // These correspond to android-non_apex and android-in_apex + return + } + apexConfigSettingLock.Lock() + defer apexConfigSettingLock.Unlock() + + // Return if a config_setting has already been created + acsm := getApexConfigSettingMap(ctx.Config()) + if _, exists := (*acsm)[apexName]; exists { + return + } + (*acsm)[apexName] = true + + csa := bazel.ConfigSettingAttributes{ + Flag_values: bazel.StringMapAttribute{ + "//build/bazel/rules/apex:apex_name": apexName, + }, + } + ca := android.CommonAttributes{ + Name: "android-in_" + apexName, + } + ctx.CreateBazelConfigSetting( + csa, + ca, + "build/bazel/rules/apex", + ) +} + +func inApexConfigSetting(apexAvailable string) string { + if apexAvailable == android.AvailableToPlatform { + return bazel.AndroidAndNonApex + } + if apexAvailable == android.AvailableToAnyApex { + return bazel.AndroidAndInApex + } + return "//build/bazel/rules/apex:android-in_" + apexAvailable +} + func setStubsForDynamicDeps(ctx android.BazelConversionPathContext, axis bazel.ConfigurationAxis, config string, apexAvailable []string, dynamicLibs bazel.LabelList, dynamicDeps *bazel.LabelListAttribute, ind int, buildNonApexWithStubs bool) { @@ -1241,6 +1295,13 @@ func setStubsForDynamicDeps(ctx android.BazelConversionPathContext, axis bazel.C dynamicDeps.SetSelectValue(bazel.OsAndInApexAxis, bazel.AndroidAndNonApex, bazel.FirstUniqueBazelLabelList(nonApexSelectValue)) } } + + // Create a config_setting for each apex_available. + // This will be used to select impl of a dep if dep is available to the same apex. + for _, aa := range apexAvailable { + createInApexConfigSetting(ctx.(android.TopDownMutatorContext), aa) + } + } func (la *linkerAttributes) convertStripProps(ctx android.BazelConversionPathContext, module *Module) { @@ -1987,6 +1987,56 @@ func moduleContextFromAndroidModuleContext(actx android.ModuleContext, c *Module return ctx } +// TODO (b/277651159): Remove this allowlist +var ( + skipStubLibraryMultipleApexViolation = map[string]bool{ + "libclang_rt.asan": true, + "libclang_rt.hwasan": true, + // runtime apex + "libc": true, + "libc_hwasan": true, + "libdl_android": true, + "libm": true, + "libdl": true, + // art apex + "libandroidio": true, + "libdexfile": true, + "libnativebridge": true, + "libnativehelper": true, + "libnativeloader": true, + "libsigchain": true, + } +) + +// Returns true if a stub library could be installed in multiple apexes +func (c *Module) stubLibraryMultipleApexViolation(ctx android.ModuleContext) bool { + // If this is not an apex variant, no check necessary + if !c.InAnyApex() { + return false + } + // If this is not a stub library, no check necessary + if !c.HasStubsVariants() { + return false + } + // Skip the allowlist + // Use BaseModuleName so that this matches prebuilts. + if _, exists := skipStubLibraryMultipleApexViolation[c.BaseModuleName()]; exists { + return false + } + + _, aaWithoutTestApexes, _ := android.ListSetDifference(c.ApexAvailable(), c.TestApexes()) + // Stub libraries should not have more than one apex_available + if len(aaWithoutTestApexes) > 1 { + return true + } + // Stub libraries should not use the wildcard + if aaWithoutTestApexes[0] == android.AvailableToAnyApex { + return true + } + // Default: no violation + return false +} + func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { // Handle the case of a test module split by `test_per_src` mutator. // @@ -2013,6 +2063,10 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { return } + if c.stubLibraryMultipleApexViolation(actx) { + actx.PropertyErrorf("apex_available", + "Stub libraries should have a single apex_available (test apexes excluded). Got %v", c.ApexAvailable()) + } if c.Properties.Clang != nil && *c.Properties.Clang == false { ctx.PropertyErrorf("clang", "false (GCC) is no longer supported") } else if c.Properties.Clang != nil && !ctx.DeviceConfig().BuildBrokenClangProperty() { @@ -3935,8 +3989,8 @@ func (c *Module) typ() moduleType { // TODO(b/244431896) properly convert cc_test_library to its own macro. This // will let them add implicit compile deps on gtest, for example. // - // For now, treat them as regular shared libraries. - return sharedLibrary + // For now, treat them as regular libraries. + return fullLibrary } else if c.CcLibrary() { static := false shared := false diff --git a/cc/config/arm64_device.go b/cc/config/arm64_device.go index 28f368205..ca2e05fc3 100644 --- a/cc/config/arm64_device.go +++ b/cc/config/arm64_device.go @@ -53,8 +53,7 @@ var ( "-Wl,-z,separate-code", } - arm64Lldflags = append(arm64Ldflags, - "-Wl,-z,max-page-size=4096") + arm64Lldflags = arm64Ldflags arm64Cppflags = []string{} @@ -93,7 +92,13 @@ var ( func init() { exportedVars.ExportStringListStaticVariable("Arm64Ldflags", arm64Ldflags) - exportedVars.ExportStringListStaticVariable("Arm64Lldflags", arm64Lldflags) + + exportedVars.ExportStringList("Arm64Lldflags", arm64Lldflags) + pctx.VariableFunc("Arm64Lldflags", func(ctx android.PackageVarContext) string { + maxPageSizeFlag := "-Wl,-z,max-page-size=" + ctx.Config().MaxPageSizeSupported() + flags := append(arm64Lldflags, maxPageSizeFlag) + return strings.Join(flags, " ") + }) exportedVars.ExportStringListStaticVariable("Arm64Cflags", arm64Cflags) exportedVars.ExportStringListStaticVariable("Arm64Cppflags", arm64Cppflags) diff --git a/cc/config/arm_device.go b/cc/config/arm_device.go index 070455021..dec2b4552 100644 --- a/cc/config/arm_device.go +++ b/cc/config/arm_device.go @@ -185,7 +185,12 @@ func init() { exportedVars.ExportString("ArmClangTriple", clangTriple) exportedVars.ExportStringListStaticVariable("ArmLdflags", armLdflags) - exportedVars.ExportStringListStaticVariable("ArmLldflags", armLldflags) + exportedVars.ExportStringList("ArmLldflags", armLldflags) + pctx.VariableFunc("ArmLldflags", func(ctx android.PackageVarContext) string { + maxPageSizeFlag := "-Wl,-z,max-page-size=" + ctx.Config().MaxPageSizeSupported() + flags := append(armLldflags, maxPageSizeFlag) + return strings.Join(flags, " ") + }) exportedVars.ExportStringListStaticVariable("ArmFixCortexA8LdFlags", armFixCortexA8LdFlags) exportedVars.ExportStringListStaticVariable("ArmNoFixCortexA8LdFlags", armNoFixCortexA8LdFlags) diff --git a/cc/config/global.go b/cc/config/global.go index 0c6e66d3f..20298dd5b 100644 --- a/cc/config/global.go +++ b/cc/config/global.go @@ -433,12 +433,15 @@ func init() { exportedVars.ExportStringList("CommonGlobalIncludes", commonGlobalIncludes) pctx.PrefixedExistentPathsForSourcesVariable("CommonGlobalIncludes", "-I", commonGlobalIncludes) + exportedVars.ExportStringStaticVariable("CLANG_DEFAULT_VERSION", ClangDefaultVersion) + exportedVars.ExportStringStaticVariable("CLANG_DEFAULT_SHORT_VERSION", ClangDefaultShortVersion) + pctx.StaticVariableWithEnvOverride("ClangBase", "LLVM_PREBUILTS_BASE", ClangDefaultBase) - exportedVars.ExportStringStaticVariableWithEnvOverride("ClangVersion", "LLVM_PREBUILTS_VERSION", ClangDefaultVersion) + pctx.StaticVariableWithEnvOverride("ClangVersion", "LLVM_PREBUILTS_VERSION", ClangDefaultVersion) pctx.StaticVariable("ClangPath", "${ClangBase}/${HostPrebuiltTag}/${ClangVersion}") pctx.StaticVariable("ClangBin", "${ClangPath}/bin") - exportedVars.ExportStringStaticVariableWithEnvOverride("ClangShortVersion", "LLVM_RELEASE_VERSION", ClangDefaultShortVersion) + pctx.StaticVariableWithEnvOverride("ClangShortVersion", "LLVM_RELEASE_VERSION", ClangDefaultShortVersion) pctx.StaticVariable("ClangAsanLibDir", "${ClangBase}/linux-x86/${ClangVersion}/lib/clang/${ClangShortVersion}/lib/linux") // These are tied to the version of LLVM directly in external/llvm, so they might trail the host prebuilts diff --git a/cc/library.go b/cc/library.go index ee09389ca..13b333a12 100644 --- a/cc/library.go +++ b/cc/library.go @@ -433,11 +433,11 @@ func libraryBp2Build(ctx android.TopDownMutatorContext, m *Module) { var tagsForStaticVariant bazel.StringListAttribute if compilerAttrs.stubsSymbolFile == nil && len(compilerAttrs.stubsVersions.Value) == 0 { - tagsForStaticVariant = android.ApexAvailableTags(m) + tagsForStaticVariant = android.ApexAvailableTagsWithoutTestApexes(ctx, m) } tagsForStaticVariant.Append(bazel.StringListAttribute{Value: staticAttrs.Apex_available}) - tagsForSharedVariant := android.ApexAvailableTags(m) + tagsForSharedVariant := android.ApexAvailableTagsWithoutTestApexes(ctx, m) tagsForSharedVariant.Append(bazel.StringListAttribute{Value: sharedAttrs.Apex_available}) ctx.CreateBazelTargetModuleWithRestrictions(staticProps, @@ -3002,7 +3002,7 @@ func sharedOrStaticLibraryBp2Build(ctx android.TopDownMutatorContext, module *Mo Bzl_load_location: fmt.Sprintf("//build/bazel/rules/cc:%s.bzl", modType), } - tags := android.ApexAvailableTags(module) + tags := android.ApexAvailableTagsWithoutTestApexes(ctx, module) ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: module.Name(), Tags: tags}, attrs) } diff --git a/cc/library_headers.go b/cc/library_headers.go index 1dee72679..ce9c4aacf 100644 --- a/cc/library_headers.go +++ b/cc/library_headers.go @@ -151,7 +151,7 @@ func libraryHeadersBp2Build(ctx android.TopDownMutatorContext, module *Module) { Bzl_load_location: "//build/bazel/rules/cc:cc_library_headers.bzl", } - tags := android.ApexAvailableTags(module) + tags := android.ApexAvailableTagsWithoutTestApexes(ctx, module) ctx.CreateBazelTargetModule(props, android.CommonAttributes{ Name: module.Name(), diff --git a/cc/object.go b/cc/object.go index d65cdea74..5d6187233 100644 --- a/cc/object.go +++ b/cc/object.go @@ -226,7 +226,7 @@ func objectBp2Build(ctx android.TopDownMutatorContext, m *Module) { Bzl_load_location: "//build/bazel/rules/cc:cc_object.bzl", } - tags := android.ApexAvailableTags(m) + tags := android.ApexAvailableTagsWithoutTestApexes(ctx, m) ctx.CreateBazelTargetModule(props, android.CommonAttributes{ Name: m.Name(), diff --git a/cc/prebuilt.go b/cc/prebuilt.go index 0b5841ef0..44cd0d73f 100644 --- a/cc/prebuilt.go +++ b/cc/prebuilt.go @@ -389,7 +389,7 @@ func prebuiltLibraryStaticBp2Build(ctx android.TopDownMutatorContext, module *Mo name += "_bp2build_cc_library_static" } - tags := android.ApexAvailableTags(module) + tags := android.ApexAvailableTagsWithoutTestApexes(ctx, module) ctx.CreateBazelTargetModuleWithRestrictions(props, android.CommonAttributes{Name: name, Tags: tags}, attrs, prebuiltAttrs.Enabled) _true := true @@ -420,7 +420,7 @@ func prebuiltLibrarySharedBp2Build(ctx android.TopDownMutatorContext, module *Mo } name := android.RemoveOptionalPrebuiltPrefix(module.Name()) - tags := android.ApexAvailableTags(module) + tags := android.ApexAvailableTagsWithoutTestApexes(ctx, module) ctx.CreateBazelTargetModuleWithRestrictions(props, android.CommonAttributes{Name: name, Tags: tags}, attrs, prebuiltAttrs.Enabled) } @@ -650,7 +650,7 @@ func prebuiltObjectBp2Build(ctx android.TopDownMutatorContext, module *Module) { } name := android.RemoveOptionalPrebuiltPrefix(module.Name()) - tags := android.ApexAvailableTags(module) + tags := android.ApexAvailableTagsWithoutTestApexes(ctx, module) ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: name, Tags: tags}, attrs) } @@ -813,7 +813,7 @@ func prebuiltBinaryBp2Build(ctx android.TopDownMutatorContext, module *Module) { } name := android.RemoveOptionalPrebuiltPrefix(module.Name()) - tags := android.ApexAvailableTags(module) + tags := android.ApexAvailableTagsWithoutTestApexes(ctx, module) ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: name, Tags: tags}, attrs) } diff --git a/cc/proto.go b/cc/proto.go index 97470e5ea..5d9aef60f 100644 --- a/cc/proto.go +++ b/cc/proto.go @@ -207,7 +207,7 @@ func bp2buildProto(ctx android.Bp2buildMutatorContext, m *Module, protoSrcs baze protoAttrs.Min_sdk_version = m.Properties.Min_sdk_version name := m.Name() + suffix - tags := android.ApexAvailableTags(m) + tags := android.ApexAvailableTagsWithoutTestApexes(ctx.(android.TopDownMutatorContext), m) ctx.CreateBazelTargetModule( bazel.BazelTargetModuleProperties{ Rule_class: rule_class, diff --git a/cc/sanitize.go b/cc/sanitize.go index 45d7fab4f..7fddc1b83 100644 --- a/cc/sanitize.go +++ b/cc/sanitize.go @@ -593,6 +593,12 @@ func (sanitize *sanitize) begin(ctx BaseModuleContext) { } } + // Enable HWASan for all components in the include paths (for Aarch64 only) + if s.Hwaddress == nil && ctx.Config().HWASanEnabledForPath(ctx.ModuleDir()) && + ctx.Arch().ArchType == android.Arm64 && ctx.toolchain().Bionic() { + s.Hwaddress = proptools.BoolPtr(true) + } + // Enable CFI for non-host components in the include paths if s.Cfi == nil && ctx.Config().CFIEnabledForPath(ctx.ModuleDir()) && !ctx.Host() { s.Cfi = proptools.BoolPtr(true) diff --git a/cc/sysprop.go b/cc/sysprop.go index 0df290afa..7ddd4760e 100644 --- a/cc/sysprop.go +++ b/cc/sysprop.go @@ -38,7 +38,7 @@ type SyspropLibraryLabels struct { } func Bp2buildSysprop(ctx android.Bp2buildMutatorContext, labels SyspropLibraryLabels, srcs bazel.LabelListAttribute, minSdkVersion *string) { - apexAvailableTags := android.ApexAvailableTags(ctx.Module()) + apexAvailableTags := android.ApexAvailableTagsWithoutTestApexes(ctx.(android.TopDownMutatorContext), ctx.Module()) ctx.CreateBazelTargetModule( bazel.BazelTargetModuleProperties{ Rule_class: "sysprop_library", diff --git a/cc/vendor_snapshot.go b/cc/vendor_snapshot.go index e6e566025..51f23c57e 100644 --- a/cc/vendor_snapshot.go +++ b/cc/vendor_snapshot.go @@ -324,13 +324,13 @@ var ccSnapshotAction snapshot.GenerateSnapshotAction = func(s snapshot.SnapshotS } } } - snapshotLibOut := filepath.Join(snapshotArchDir, targetArch, libType, stem) + snapshotLibOut := filepath.Join(snapshotArchDir, targetArch, libType, m.RelativeInstallPath(), stem) ret = append(ret, copyFile(ctx, libPath, snapshotLibOut, fake)) } else { stem = ctx.ModuleName(m) } - propOut = filepath.Join(snapshotArchDir, targetArch, libType, stem+".json") + propOut = filepath.Join(snapshotArchDir, targetArch, libType, m.RelativeInstallPath(), stem+".json") } else if m.Binary() { // binary flags prop.Symlinks = m.Symlinks() diff --git a/cc/vendor_snapshot_test.go b/cc/vendor_snapshot_test.go index 619500e1d..5b69a10be 100644 --- a/cc/vendor_snapshot_test.go +++ b/cc/vendor_snapshot_test.go @@ -1657,3 +1657,69 @@ func TestRecoverySnapshotDirected(t *testing.T) { } } } + +func TestSnapshotInRelativeInstallPath(t *testing.T) { + bp := ` + cc_library { + name: "libvendor_available", + vendor_available: true, + nocrt: true, + } + + cc_library { + name: "libvendor_available_var", + vendor_available: true, + stem: "libvendor_available", + relative_install_path: "var", + nocrt: true, + } +` + + config := TestConfig(t.TempDir(), android.Android, nil, bp, nil) + config.TestProductVariables.DeviceVndkVersion = StringPtr("current") + config.TestProductVariables.Platform_vndk_version = StringPtr("29") + ctx := testCcWithConfig(t, config) + + // Check Vendor snapshot output. + + snapshotDir := "vendor-snapshot" + snapshotVariantPath := filepath.Join("out/soong", snapshotDir, "arm64") + snapshotSingleton := ctx.SingletonForTests("vendor-snapshot") + + var jsonFiles []string + + for _, arch := range [][]string{ + []string{"arm64", "armv8-a"}, + []string{"arm", "armv7-a-neon"}, + } { + archType := arch[0] + archVariant := arch[1] + archDir := fmt.Sprintf("arch-%s-%s", archType, archVariant) + + // For shared libraries, only non-VNDK vendor_available modules are captured + sharedVariant := fmt.Sprintf("android_vendor.29_%s_%s_shared", archType, archVariant) + sharedDir := filepath.Join(snapshotVariantPath, archDir, "shared") + sharedDirVar := filepath.Join(sharedDir, "var") + CheckSnapshot(t, ctx, snapshotSingleton, "libvendor_available", "libvendor_available.so", sharedDir, sharedVariant) + CheckSnapshot(t, ctx, snapshotSingleton, "libvendor_available_var", "libvendor_available.so", sharedDirVar, sharedVariant) + jsonFiles = append(jsonFiles, + filepath.Join(sharedDir, "libvendor_available.so.json"), + filepath.Join(sharedDirVar, "libvendor_available.so.json")) + } + + for _, jsonFile := range jsonFiles { + // verify all json files exist + if snapshotSingleton.MaybeOutput(jsonFile).Rule == nil { + t.Errorf("%q expected but not found", jsonFile) + } + } + + // fake snapshot should have all outputs in the normal snapshot. + fakeSnapshotSingleton := ctx.SingletonForTests("vendor-fake-snapshot") + for _, output := range snapshotSingleton.AllOutputs() { + fakeOutput := strings.Replace(output, "/vendor-snapshot/", "/fake/vendor-snapshot/", 1) + if fakeSnapshotSingleton.MaybeOutput(fakeOutput).Rule == nil { + t.Errorf("%q expected but not found", fakeOutput) + } + } +} diff --git a/cmd/soong_build/main.go b/cmd/soong_build/main.go index 53e0e55c4..f347b8f56 100644 --- a/cmd/soong_build/main.go +++ b/cmd/soong_build/main.go @@ -289,9 +289,9 @@ func writeMetrics(configuration android.Config, eventHandler *metrics.EventHandl } // Errors out if any modules expected to be mixed_built were not, unless -// there is a platform incompatibility. +// the modules did not exist. func checkForAllowlistIntegrityError(configuration android.Config, isStagingMode bool) error { - modules := findModulesNotMixedBuiltForAnyVariant(configuration, isStagingMode) + modules := findMisconfiguredModules(configuration, isStagingMode) if len(modules) == 0 { return nil } @@ -299,29 +299,54 @@ func checkForAllowlistIntegrityError(configuration android.Config, isStagingMode return fmt.Errorf("Error: expected the following modules to be mixed_built: %s", modules) } +// Returns true if the given module has all of the following true: +// 1. Is allowlisted to be built with Bazel. +// 2. Has a variant which is *not* built with Bazel. +// 3. Has no variant which is built with Bazel. +// +// This indicates the allowlisting of this variant had no effect. +// TODO(b/280457637): Return true for nonexistent modules. +func isAllowlistMisconfiguredForModule(module string, mixedBuildsEnabled map[string]struct{}, mixedBuildsDisabled map[string]struct{}) bool { + //TODO(dacek): Why does this occur in the allowlists? + if module == "" { + return false + } + _, enabled := mixedBuildsEnabled[module] + + if enabled { + return false + } + + _, disabled := mixedBuildsDisabled[module] + return disabled + +} + // Returns the list of modules that should have been mixed_built (per the // allowlists and cmdline flags) but were not. -func findModulesNotMixedBuiltForAnyVariant(configuration android.Config, isStagingMode bool) []string { +// Note: nonexistent modules are excluded from the list. See b/280457637 +func findMisconfiguredModules(configuration android.Config, isStagingMode bool) []string { retval := []string{} forceEnabledModules := configuration.BazelModulesForceEnabledByFlag() mixedBuildsEnabled := configuration.GetMixedBuildsEnabledModules() + mixedBuildsDisabled := configuration.GetMixedBuildsDisabledModules() for _, module := range allowlists.ProdMixedBuildsEnabledList { - if _, ok := mixedBuildsEnabled[module]; !ok && module != "" { + if isAllowlistMisconfiguredForModule(module, mixedBuildsEnabled, mixedBuildsDisabled) { retval = append(retval, module) } } if isStagingMode { for _, module := range allowlists.StagingMixedBuildsEnabledList { - if _, ok := mixedBuildsEnabled[module]; !ok && module != "" { + if isAllowlistMisconfiguredForModule(module, mixedBuildsEnabled, mixedBuildsDisabled) { retval = append(retval, module) } } } for module, _ := range forceEnabledModules { - if _, ok := mixedBuildsEnabled[module]; !ok && module != "" { + if isAllowlistMisconfiguredForModule(module, mixedBuildsEnabled, mixedBuildsDisabled) { retval = append(retval, module) } } diff --git a/genrule/genrule.go b/genrule/genrule.go index f5da50ef3..00adb7025 100644 --- a/genrule/genrule.go +++ b/genrule/genrule.go @@ -940,7 +940,7 @@ func (m *Module) ConvertWithBp2build(ctx android.TopDownMutatorContext) { } } - tags := android.ApexAvailableTags(m) + tags := android.ApexAvailableTagsWithoutTestApexes(ctx, m) if ctx.ModuleType() == "gensrcs" { // The Output_extension prop is not in an immediately accessible field diff --git a/java/android_manifest.go b/java/android_manifest.go index dbcf09830..f2ebfa6a2 100644 --- a/java/android_manifest.go +++ b/java/android_manifest.go @@ -63,9 +63,11 @@ func targetSdkVersionForManifestFixer(ctx android.ModuleContext, params Manifest // 2. The module is run as part of MTS, and should be testable on stable branches // Do not return 10000 if we are enforcing default targetSdkVersion and sdk has been finalised func shouldReturnFinalOrFutureInt(ctx android.ModuleContext, targetSdkVersionLevel android.ApiLevel, enforceDefaultTargetSdkVersion bool) bool { - if enforceDefaultTargetSdkVersion && ctx.Config().PlatformSdkFinal() { + // If this is a REL branch, do not return 10000 + if ctx.Config().PlatformSdkFinal() { return false } + // If this a module targeting an unreleased SDK (MTS or unbundled builds), return 10000 return targetSdkVersionLevel.IsPreview() && (ctx.Config().UnbundledBuildApps() || includedInMts(ctx.Module())) } diff --git a/java/app_test.go b/java/app_test.go index 561be684e..7e97b0fb1 100644 --- a/java/app_test.go +++ b/java/app_test.go @@ -3034,11 +3034,13 @@ func TestExportedProguardFlagFiles(t *testing.T) { func TestTargetSdkVersionManifestFixer(t *testing.T) { platform_sdk_codename := "Tiramisu" + platform_sdk_version := 33 testCases := []struct { name string targetSdkVersionInBp string targetSdkVersionExpected string unbundledBuild bool + platformSdkFinal bool }{ { name: "Non-Unbundled build: Android.bp has targetSdkVersion", @@ -3075,6 +3077,12 @@ func TestTargetSdkVersionManifestFixer(t *testing.T) { targetSdkVersionExpected: "10000", unbundledBuild: true, }, + { + name: "Bundled build in REL branches", + targetSdkVersionExpected: "33", + unbundledBuild: false, + platformSdkFinal: true, + }, } for _, testCase := range testCases { targetSdkVersionTemplate := "" @@ -3091,8 +3099,12 @@ func TestTargetSdkVersionManifestFixer(t *testing.T) { fixture := android.GroupFixturePreparers( prepareForJavaTest, android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { + if testCase.platformSdkFinal { + variables.Platform_sdk_final = proptools.BoolPtr(true) + } // explicitly set platform_sdk_codename to make the test deterministic variables.Platform_sdk_codename = &platform_sdk_codename + variables.Platform_sdk_version = &platform_sdk_version variables.Platform_version_active_codenames = []string{platform_sdk_codename} // create a non-empty list if unbundledBuild==true if testCase.unbundledBuild { diff --git a/java/dexpreopt_bootjars.go b/java/dexpreopt_bootjars.go index f4827ea3a..f4c093510 100644 --- a/java/dexpreopt_bootjars.go +++ b/java/dexpreopt_bootjars.go @@ -507,8 +507,8 @@ func (d *dexpreoptBootJars) GenerateSingletonBuildActions(ctx android.SingletonC // No module has enabled dexpreopting, so we assume there will be no boot image to make. return } - - d.dexpreoptConfigForMake = android.PathForOutput(ctx, ctx.Config().DeviceName(), "dexpreopt.config") + archType := ctx.Config().Targets[android.Android][0].Arch.ArchType + d.dexpreoptConfigForMake = android.PathForOutput(ctx, toDexpreoptDirName(archType), "dexpreopt.config") writeGlobalConfigForMake(ctx, d.dexpreoptConfigForMake) global := dexpreopt.GetGlobalConfig(ctx) diff --git a/java/dexpreopt_bootjars_test.go b/java/dexpreopt_bootjars_test.go index bc7a55eb9..908380813 100644 --- a/java/dexpreopt_bootjars_test.go +++ b/java/dexpreopt_bootjars_test.go @@ -58,11 +58,11 @@ func testDexpreoptBoot(t *testing.T, ruleFile string, expectedInputs, expectedOu rule := platformBootclasspath.Output(ruleFile) for i := range expectedInputs { - expectedInputs[i] = filepath.Join("out/soong/test_device", expectedInputs[i]) + expectedInputs[i] = filepath.Join("out/soong/dexpreopt_arm64", expectedInputs[i]) } for i := range expectedOutputs { - expectedOutputs[i] = filepath.Join("out/soong/test_device", expectedOutputs[i]) + expectedOutputs[i] = filepath.Join("out/soong/dexpreopt_arm64", expectedOutputs[i]) } inputs := rule.Implicits.Strings() diff --git a/java/dexpreopt_config.go b/java/dexpreopt_config.go index 8c62c332a..8f732cf56 100644 --- a/java/dexpreopt_config.go +++ b/java/dexpreopt_config.go @@ -108,7 +108,8 @@ func genBootImageConfigRaw(ctx android.PathContext) map[string]*bootImageConfig func genBootImageConfigs(ctx android.PathContext) map[string]*bootImageConfig { return ctx.Config().Once(bootImageConfigKey, func() interface{} { targets := dexpreoptTargets(ctx) - deviceDir := android.PathForOutput(ctx, ctx.Config().DeviceName()) + archType := ctx.Config().Targets[android.Android][0].Arch.ArchType + deviceDir := android.PathForOutput(ctx, toDexpreoptDirName(archType)) configs := genBootImageConfigRaw(ctx) @@ -220,8 +221,8 @@ var updatableBootConfigKey = android.NewOnceKey("apexBootConfig") func GetApexBootConfig(ctx android.PathContext) apexBootConfig { return ctx.Config().Once(updatableBootConfigKey, func() interface{} { apexBootJars := dexpreopt.GetGlobalConfig(ctx).ApexBootJars - - dir := android.PathForOutput(ctx, ctx.Config().DeviceName(), "apex_bootjars") + archType := ctx.Config().Targets[android.Android][0].Arch.ArchType + dir := android.PathForOutput(ctx, toDexpreoptDirName(archType), "apex_bootjars") dexPaths := apexBootJars.BuildPaths(ctx, dir) dexPathsByModuleName := apexBootJars.BuildPathsByModule(ctx, dir) @@ -261,3 +262,7 @@ func init() { func dexpreoptConfigMakevars(ctx android.MakeVarsContext) { ctx.Strict("DEXPREOPT_BOOT_JARS_MODULES", strings.Join(defaultBootImageConfig(ctx).modules.CopyOfApexJarPairs(), ":")) } + +func toDexpreoptDirName(arch android.ArchType) string { + return "dexpreopt_" + arch.String() +} diff --git a/java/dexpreopt_config_testing.go b/java/dexpreopt_config_testing.go index 86dd32988..6b98ca58c 100644 --- a/java/dexpreopt_config_testing.go +++ b/java/dexpreopt_config_testing.go @@ -207,65 +207,65 @@ func checkArtBootImageConfig(t *testing.T, result *android.TestResult, mutated b expected := &expectedConfig{ name: "art", stem: "boot", - dir: "out/soong/test_device/dex_artjars", - symbolsDir: "out/soong/test_device/dex_artjars_unstripped", + dir: "out/soong/dexpreopt_arm64/dex_artjars", + symbolsDir: "out/soong/dexpreopt_arm64/dex_artjars_unstripped", installDirOnDevice: "system/framework", installDirOnHost: "apex/art_boot_images/javalib", profileInstallPathInApex: "etc/boot-image.prof", modules: android.CreateTestConfiguredJarList([]string{"com.android.art:core1", "com.android.art:core2"}), - dexPaths: []string{"out/soong/test_device/dex_artjars_input/core1.jar", "out/soong/test_device/dex_artjars_input/core2.jar"}, - dexPathsDeps: []string{"out/soong/test_device/dex_artjars_input/core1.jar", "out/soong/test_device/dex_artjars_input/core2.jar"}, - zip: "out/soong/test_device/dex_artjars/art.zip", + dexPaths: []string{"out/soong/dexpreopt_arm64/dex_artjars_input/core1.jar", "out/soong/dexpreopt_arm64/dex_artjars_input/core2.jar"}, + dexPathsDeps: []string{"out/soong/dexpreopt_arm64/dex_artjars_input/core1.jar", "out/soong/dexpreopt_arm64/dex_artjars_input/core2.jar"}, + zip: "out/soong/dexpreopt_arm64/dex_artjars/art.zip", variants: []*expectedVariant{ { archType: android.Arm64, dexLocations: []string{"/apex/com.android.art/javalib/core1.jar", "/apex/com.android.art/javalib/core2.jar"}, dexLocationsDeps: []string{"/apex/com.android.art/javalib/core1.jar", "/apex/com.android.art/javalib/core2.jar"}, - imagePathOnHost: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art", + imagePathOnHost: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art", imagePathOnDevice: "/system/framework/arm64/boot.art", imagesDeps: []string{ - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex", }, installs: []normalizedInstall{ { - from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art", + from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art", to: "/apex/art_boot_images/javalib/arm64/boot.art", }, { - from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat", + from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat", to: "/apex/art_boot_images/javalib/arm64/boot.oat", }, { - from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art", + from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art", to: "/apex/art_boot_images/javalib/arm64/boot-core2.art", }, { - from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat", + from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat", to: "/apex/art_boot_images/javalib/arm64/boot-core2.oat", }, }, vdexInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex", + from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex", to: "/apex/art_boot_images/javalib/arm64/boot.vdex", }, { - from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex", + from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex", to: "/apex/art_boot_images/javalib/arm64/boot-core2.vdex", }, }, unstrippedInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot.oat", + from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot.oat", to: "/apex/art_boot_images/javalib/arm64/boot.oat", }, { - from: "out/soong/test_device/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot-core2.oat", + from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot-core2.oat", to: "/apex/art_boot_images/javalib/arm64/boot-core2.oat", }, }, @@ -275,51 +275,51 @@ func checkArtBootImageConfig(t *testing.T, result *android.TestResult, mutated b archType: android.Arm, dexLocations: []string{"/apex/com.android.art/javalib/core1.jar", "/apex/com.android.art/javalib/core2.jar"}, dexLocationsDeps: []string{"/apex/com.android.art/javalib/core1.jar", "/apex/com.android.art/javalib/core2.jar"}, - imagePathOnHost: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art", + imagePathOnHost: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art", imagePathOnDevice: "/system/framework/arm/boot.art", imagesDeps: []string{ - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex", }, installs: []normalizedInstall{ { - from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art", + from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art", to: "/apex/art_boot_images/javalib/arm/boot.art", }, { - from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat", + from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat", to: "/apex/art_boot_images/javalib/arm/boot.oat", }, { - from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art", + from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art", to: "/apex/art_boot_images/javalib/arm/boot-core2.art", }, { - from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat", + from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat", to: "/apex/art_boot_images/javalib/arm/boot-core2.oat", }, }, vdexInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex", + from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex", to: "/apex/art_boot_images/javalib/arm/boot.vdex", }, { - from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex", + from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex", to: "/apex/art_boot_images/javalib/arm/boot-core2.vdex", }, }, unstrippedInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot.oat", + from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot.oat", to: "/apex/art_boot_images/javalib/arm/boot.oat", }, { - from: "out/soong/test_device/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot-core2.oat", + from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot-core2.oat", to: "/apex/art_boot_images/javalib/arm/boot-core2.oat", }, }, @@ -329,49 +329,49 @@ func checkArtBootImageConfig(t *testing.T, result *android.TestResult, mutated b archType: android.X86_64, dexLocations: []string{"host/linux-x86/apex/com.android.art/javalib/core1.jar", "host/linux-x86/apex/com.android.art/javalib/core2.jar"}, dexLocationsDeps: []string{"host/linux-x86/apex/com.android.art/javalib/core1.jar", "host/linux-x86/apex/com.android.art/javalib/core2.jar"}, - imagePathOnHost: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art", + imagePathOnHost: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art", imagePathOnDevice: "/system/framework/x86_64/boot.art", imagesDeps: []string{ - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex", }, installs: []normalizedInstall{ { - from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art", + from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art", to: "/apex/art_boot_images/javalib/x86_64/boot.art", }, { - from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat", + from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat", to: "/apex/art_boot_images/javalib/x86_64/boot.oat", }, { - from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art", + from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art", to: "/apex/art_boot_images/javalib/x86_64/boot-core2.art", }, { - from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat", + from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat", to: "/apex/art_boot_images/javalib/x86_64/boot-core2.oat", }, }, vdexInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex", + from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex", to: "/apex/art_boot_images/javalib/x86_64/boot.vdex", }, { - from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex", + from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex", to: "/apex/art_boot_images/javalib/x86_64/boot-core2.vdex", }, }, unstrippedInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat", + from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat", to: "/apex/art_boot_images/javalib/x86_64/boot.oat", }, { - from: "out/soong/test_device/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat", + from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat", to: "/apex/art_boot_images/javalib/x86_64/boot-core2.oat", }, }, @@ -381,49 +381,49 @@ func checkArtBootImageConfig(t *testing.T, result *android.TestResult, mutated b archType: android.X86, dexLocations: []string{"host/linux-x86/apex/com.android.art/javalib/core1.jar", "host/linux-x86/apex/com.android.art/javalib/core2.jar"}, dexLocationsDeps: []string{"host/linux-x86/apex/com.android.art/javalib/core1.jar", "host/linux-x86/apex/com.android.art/javalib/core2.jar"}, - imagePathOnHost: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art", + imagePathOnHost: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art", imagePathOnDevice: "/system/framework/x86/boot.art", imagesDeps: []string{ - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex", }, installs: []normalizedInstall{ { - from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art", + from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art", to: "/apex/art_boot_images/javalib/x86/boot.art", }, { - from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat", + from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat", to: "/apex/art_boot_images/javalib/x86/boot.oat", }, { - from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art", + from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art", to: "/apex/art_boot_images/javalib/x86/boot-core2.art", }, { - from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat", + from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat", to: "/apex/art_boot_images/javalib/x86/boot-core2.oat", }, }, vdexInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex", + from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex", to: "/apex/art_boot_images/javalib/x86/boot.vdex", }, { - from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex", + from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex", to: "/apex/art_boot_images/javalib/x86/boot-core2.vdex", }, }, unstrippedInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat", + from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat", to: "/apex/art_boot_images/javalib/x86/boot.oat", }, { - from: "out/soong/test_device/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat", + from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat", to: "/apex/art_boot_images/javalib/x86/boot-core2.oat", }, }, @@ -460,15 +460,15 @@ func checkFrameworkBootImageConfig(t *testing.T, result *android.TestResult, mut expected := &expectedConfig{ name: "boot", stem: "boot", - dir: "out/soong/test_device/dex_bootjars", - symbolsDir: "out/soong/test_device/dex_bootjars_unstripped", + dir: "out/soong/dexpreopt_arm64/dex_bootjars", + symbolsDir: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped", installDirOnDevice: "system/framework", installDirOnHost: "system/framework", profileInstallPathInApex: "", modules: android.CreateTestConfiguredJarList([]string{"platform:framework"}), - dexPaths: []string{"out/soong/test_device/dex_bootjars_input/framework.jar"}, - dexPathsDeps: []string{"out/soong/test_device/dex_artjars_input/core1.jar", "out/soong/test_device/dex_artjars_input/core2.jar", "out/soong/test_device/dex_bootjars_input/framework.jar"}, - zip: "out/soong/test_device/dex_bootjars/boot.zip", + dexPaths: []string{"out/soong/dexpreopt_arm64/dex_bootjars_input/framework.jar"}, + dexPathsDeps: []string{"out/soong/dexpreopt_arm64/dex_artjars_input/core1.jar", "out/soong/dexpreopt_arm64/dex_artjars_input/core2.jar", "out/soong/dexpreopt_arm64/dex_bootjars_input/framework.jar"}, + zip: "out/soong/dexpreopt_arm64/dex_bootjars/boot.zip", variants: []*expectedVariant{ { archType: android.Arm64, @@ -478,41 +478,41 @@ func checkFrameworkBootImageConfig(t *testing.T, result *android.TestResult, mut "/apex/com.android.art/javalib/core2.jar", "/system/framework/framework.jar", }, - imagePathOnHost: "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.art", + imagePathOnHost: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.art", imagePathOnDevice: "/system/framework/arm64/boot-framework.art", imagesDeps: []string{ - "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.art", - "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.oat", - "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.vdex", + "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.art", + "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.oat", + "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.vdex", }, - baseImages: []string{"out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art"}, + baseImages: []string{"out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art"}, baseImagesDeps: []string{ - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex", }, installs: []normalizedInstall{ { - from: "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.art", + from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.art", to: "/system/framework/arm64/boot-framework.art", }, { - from: "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.oat", + from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.oat", to: "/system/framework/arm64/boot-framework.oat", }, }, vdexInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.vdex", + from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.vdex", to: "/system/framework/arm64/boot-framework.vdex", }, }, unstrippedInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_bootjars_unstripped/android/system/framework/arm64/boot-framework.oat", + from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm64/boot-framework.oat", to: "/system/framework/arm64/boot-framework.oat", }, }, @@ -526,41 +526,41 @@ func checkFrameworkBootImageConfig(t *testing.T, result *android.TestResult, mut "/apex/com.android.art/javalib/core2.jar", "/system/framework/framework.jar", }, - imagePathOnHost: "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.art", + imagePathOnHost: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.art", imagePathOnDevice: "/system/framework/arm/boot-framework.art", imagesDeps: []string{ - "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.art", - "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.oat", - "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.vdex", + "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.art", + "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.oat", + "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.vdex", }, - baseImages: []string{"out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art"}, + baseImages: []string{"out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art"}, baseImagesDeps: []string{ - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex", }, installs: []normalizedInstall{ { - from: "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.art", + from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.art", to: "/system/framework/arm/boot-framework.art", }, { - from: "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.oat", + from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.oat", to: "/system/framework/arm/boot-framework.oat", }, }, vdexInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.vdex", + from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.vdex", to: "/system/framework/arm/boot-framework.vdex", }, }, unstrippedInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_bootjars_unstripped/android/system/framework/arm/boot-framework.oat", + from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm/boot-framework.oat", to: "/system/framework/arm/boot-framework.oat", }, }, @@ -574,41 +574,41 @@ func checkFrameworkBootImageConfig(t *testing.T, result *android.TestResult, mut "host/linux-x86/apex/com.android.art/javalib/core2.jar", "host/linux-x86/system/framework/framework.jar", }, - imagePathOnHost: "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art", + imagePathOnHost: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art", imagePathOnDevice: "/system/framework/x86_64/boot-framework.art", imagesDeps: []string{ - "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art", - "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat", - "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex", + "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art", + "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat", + "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex", }, - baseImages: []string{"out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art"}, + baseImages: []string{"out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art"}, baseImagesDeps: []string{ - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex", }, installs: []normalizedInstall{ { - from: "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art", + from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art", to: "/system/framework/x86_64/boot-framework.art", }, { - from: "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat", + from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat", to: "/system/framework/x86_64/boot-framework.oat", }, }, vdexInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex", + from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex", to: "/system/framework/x86_64/boot-framework.vdex", }, }, unstrippedInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_bootjars_unstripped/linux_glibc/system/framework/x86_64/boot-framework.oat", + from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86_64/boot-framework.oat", to: "/system/framework/x86_64/boot-framework.oat", }, }, @@ -622,41 +622,41 @@ func checkFrameworkBootImageConfig(t *testing.T, result *android.TestResult, mut "host/linux-x86/apex/com.android.art/javalib/core2.jar", "host/linux-x86/system/framework/framework.jar", }, - imagePathOnHost: "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art", + imagePathOnHost: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art", imagePathOnDevice: "/system/framework/x86/boot-framework.art", imagesDeps: []string{ - "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art", - "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat", - "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex", + "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art", + "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat", + "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex", }, - baseImages: []string{"out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art"}, + baseImages: []string{"out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art"}, baseImagesDeps: []string{ - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex", }, installs: []normalizedInstall{ { - from: "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art", + from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art", to: "/system/framework/x86/boot-framework.art", }, { - from: "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat", + from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat", to: "/system/framework/x86/boot-framework.oat", }, }, vdexInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex", + from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex", to: "/system/framework/x86/boot-framework.vdex", }, }, unstrippedInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_bootjars_unstripped/linux_glibc/system/framework/x86/boot-framework.oat", + from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86/boot-framework.oat", to: "/system/framework/x86/boot-framework.oat", }, }, @@ -664,8 +664,8 @@ func checkFrameworkBootImageConfig(t *testing.T, result *android.TestResult, mut }, }, profileInstalls: []normalizedInstall{ - {from: "out/soong/test_device/dex_bootjars/boot.bprof", to: "/system/etc/boot-image.bprof"}, - {from: "out/soong/test_device/dex_bootjars/boot.prof", to: "/system/etc/boot-image.prof"}, + {from: "out/soong/dexpreopt_arm64/dex_bootjars/boot.bprof", to: "/system/etc/boot-image.bprof"}, + {from: "out/soong/dexpreopt_arm64/dex_bootjars/boot.prof", to: "/system/etc/boot-image.prof"}, }, profileLicenseMetadataFile: expectedLicenseMetadataFile, } @@ -691,8 +691,8 @@ func CheckMainlineBootImageConfig(t *testing.T, result *android.TestResult) { expected := &expectedConfig{ name: "mainline", stem: "boot", - dir: "out/soong/test_device/dex_mainlinejars", - symbolsDir: "out/soong/test_device/dex_mainlinejars_unstripped", + dir: "out/soong/dexpreopt_arm64/dex_mainlinejars", + symbolsDir: "out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped", installDirOnDevice: "system/framework", installDirOnHost: "system/framework", profileInstallPathInApex: "", @@ -701,17 +701,17 @@ func CheckMainlineBootImageConfig(t *testing.T, result *android.TestResult) { "com.android.bar:framework-bar", }), dexPaths: []string{ - "out/soong/test_device/dex_mainlinejars_input/framework-foo.jar", - "out/soong/test_device/dex_mainlinejars_input/framework-bar.jar", + "out/soong/dexpreopt_arm64/dex_mainlinejars_input/framework-foo.jar", + "out/soong/dexpreopt_arm64/dex_mainlinejars_input/framework-bar.jar", }, dexPathsDeps: []string{ - "out/soong/test_device/dex_artjars_input/core1.jar", - "out/soong/test_device/dex_artjars_input/core2.jar", - "out/soong/test_device/dex_bootjars_input/framework.jar", - "out/soong/test_device/dex_mainlinejars_input/framework-foo.jar", - "out/soong/test_device/dex_mainlinejars_input/framework-bar.jar", + "out/soong/dexpreopt_arm64/dex_artjars_input/core1.jar", + "out/soong/dexpreopt_arm64/dex_artjars_input/core2.jar", + "out/soong/dexpreopt_arm64/dex_bootjars_input/framework.jar", + "out/soong/dexpreopt_arm64/dex_mainlinejars_input/framework-foo.jar", + "out/soong/dexpreopt_arm64/dex_mainlinejars_input/framework-bar.jar", }, - zip: "out/soong/test_device/dex_mainlinejars/mainline.zip", + zip: "out/soong/dexpreopt_arm64/dex_mainlinejars/mainline.zip", variants: []*expectedVariant{ { archType: android.Arm64, @@ -726,47 +726,47 @@ func CheckMainlineBootImageConfig(t *testing.T, result *android.TestResult) { "/apex/com.android.foo/javalib/framework-foo.jar", "/apex/com.android.bar/javalib/framework-bar.jar", }, - imagePathOnHost: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art", + imagePathOnHost: "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art", imagePathOnDevice: "/system/framework/arm64/boot-framework-foo.art", imagesDeps: []string{ - "out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art", - "out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.oat", - "out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.vdex", + "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art", + "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.oat", + "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.vdex", }, baseImages: []string{ - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art", - "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.art", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art", + "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.art", }, baseImagesDeps: []string{ - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex", - "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.art", - "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.oat", - "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex", + "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.art", + "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.oat", + "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.vdex", }, installs: []normalizedInstall{ { - from: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art", + from: "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art", to: "/system/framework/arm64/boot-framework-foo.art", }, { - from: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.oat", + from: "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.oat", to: "/system/framework/arm64/boot-framework-foo.oat", }, }, vdexInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.vdex", + from: "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.vdex", to: "/system/framework/arm64/boot-framework-foo.vdex", }, }, unstrippedInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_mainlinejars_unstripped/android/system/framework/arm64/boot-framework-foo.oat", + from: "out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/android/system/framework/arm64/boot-framework-foo.oat", to: "/system/framework/arm64/boot-framework-foo.oat", }, }, @@ -785,47 +785,47 @@ func CheckMainlineBootImageConfig(t *testing.T, result *android.TestResult) { "/apex/com.android.foo/javalib/framework-foo.jar", "/apex/com.android.bar/javalib/framework-bar.jar", }, - imagePathOnHost: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art", + imagePathOnHost: "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art", imagePathOnDevice: "/system/framework/arm/boot-framework-foo.art", imagesDeps: []string{ - "out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art", - "out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.oat", - "out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.vdex", + "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art", + "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.oat", + "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.vdex", }, baseImages: []string{ - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art", - "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.art", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art", + "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.art", }, baseImagesDeps: []string{ - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat", - "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex", - "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.art", - "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.oat", - "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat", + "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex", + "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.art", + "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.oat", + "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.vdex", }, installs: []normalizedInstall{ { - from: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art", + from: "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art", to: "/system/framework/arm/boot-framework-foo.art", }, { - from: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.oat", + from: "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.oat", to: "/system/framework/arm/boot-framework-foo.oat", }, }, vdexInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.vdex", + from: "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.vdex", to: "/system/framework/arm/boot-framework-foo.vdex", }, }, unstrippedInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_mainlinejars_unstripped/android/system/framework/arm/boot-framework-foo.oat", + from: "out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/android/system/framework/arm/boot-framework-foo.oat", to: "/system/framework/arm/boot-framework-foo.oat", }, }, @@ -844,47 +844,47 @@ func CheckMainlineBootImageConfig(t *testing.T, result *android.TestResult) { "host/linux-x86/apex/com.android.foo/javalib/framework-foo.jar", "host/linux-x86/apex/com.android.bar/javalib/framework-bar.jar", }, - imagePathOnHost: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art", + imagePathOnHost: "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art", imagePathOnDevice: "/system/framework/x86_64/boot-framework-foo.art", imagesDeps: []string{ - "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art", - "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.oat", - "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.vdex", + "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art", + "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.oat", + "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.vdex", }, baseImages: []string{ - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art", - "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art", + "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art", }, baseImagesDeps: []string{ - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex", - "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art", - "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat", - "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex", + "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art", + "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat", + "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex", }, installs: []normalizedInstall{ { - from: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art", + from: "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art", to: "/system/framework/x86_64/boot-framework-foo.art", }, { - from: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.oat", + from: "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.oat", to: "/system/framework/x86_64/boot-framework-foo.oat", }, }, vdexInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.vdex", + from: "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.vdex", to: "/system/framework/x86_64/boot-framework-foo.vdex", }, }, unstrippedInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86_64/boot-framework-foo.oat", + from: "out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86_64/boot-framework-foo.oat", to: "/system/framework/x86_64/boot-framework-foo.oat", }, }, @@ -903,47 +903,47 @@ func CheckMainlineBootImageConfig(t *testing.T, result *android.TestResult) { "host/linux-x86/apex/com.android.foo/javalib/framework-foo.jar", "host/linux-x86/apex/com.android.bar/javalib/framework-bar.jar", }, - imagePathOnHost: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art", + imagePathOnHost: "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art", imagePathOnDevice: "/system/framework/x86/boot-framework-foo.art", imagesDeps: []string{ - "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art", - "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.oat", - "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.vdex", + "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art", + "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.oat", + "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.vdex", }, baseImages: []string{ - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art", - "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art", + "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art", }, baseImagesDeps: []string{ - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat", - "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex", - "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art", - "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat", - "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat", + "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex", + "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art", + "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat", + "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex", }, installs: []normalizedInstall{ { - from: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art", + from: "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art", to: "/system/framework/x86/boot-framework-foo.art", }, { - from: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.oat", + from: "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.oat", to: "/system/framework/x86/boot-framework-foo.oat", }, }, vdexInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.vdex", + from: "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.vdex", to: "/system/framework/x86/boot-framework-foo.vdex", }, }, unstrippedInstalls: []normalizedInstall{ { - from: "out/soong/test_device/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86/boot-framework-foo.oat", + from: "out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86/boot-framework-foo.oat", to: "/system/framework/x86/boot-framework-foo.oat", }, }, @@ -1056,34 +1056,34 @@ func checkDexpreoptMakeVars(t *testing.T, result *android.TestResult, expectedLi fmt.Fprintf(out, "%s=%s\n", v.Name(), android.StringRelativeToTop(result.Config, v.Value())) } format := ` -DEXPREOPT_BOOTCLASSPATH_DEX_FILES=out/soong/test_device/dex_artjars_input/core1.jar out/soong/test_device/dex_artjars_input/core2.jar out/soong/test_device/dex_bootjars_input/framework.jar +DEXPREOPT_BOOTCLASSPATH_DEX_FILES=out/soong/dexpreopt_arm64/dex_artjars_input/core1.jar out/soong/dexpreopt_arm64/dex_artjars_input/core2.jar out/soong/dexpreopt_arm64/dex_bootjars_input/framework.jar DEXPREOPT_BOOTCLASSPATH_DEX_LOCATIONS=/apex/com.android.art/javalib/core1.jar /apex/com.android.art/javalib/core2.jar /system/framework/framework.jar DEXPREOPT_BOOT_JARS_MODULES=platform:framework DEXPREOPT_GEN=out/host/linux-x86/bin/dexpreopt_gen -DEXPREOPT_IMAGE_BUILT_INSTALLED_art_arm=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art:/apex/art_boot_images/javalib/arm/boot.art out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat:/apex/art_boot_images/javalib/arm/boot.oat out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art:/apex/art_boot_images/javalib/arm/boot-core2.art out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat:/apex/art_boot_images/javalib/arm/boot-core2.oat -DEXPREOPT_IMAGE_BUILT_INSTALLED_art_arm64=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art:/apex/art_boot_images/javalib/arm64/boot.art out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat:/apex/art_boot_images/javalib/arm64/boot.oat out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art:/apex/art_boot_images/javalib/arm64/boot-core2.art out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat:/apex/art_boot_images/javalib/arm64/boot-core2.oat -DEXPREOPT_IMAGE_BUILT_INSTALLED_art_host_x86=out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art:/apex/art_boot_images/javalib/x86/boot.art out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat:/apex/art_boot_images/javalib/x86/boot.oat out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art:/apex/art_boot_images/javalib/x86/boot-core2.art out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat:/apex/art_boot_images/javalib/x86/boot-core2.oat -DEXPREOPT_IMAGE_BUILT_INSTALLED_art_host_x86_64=out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art:/apex/art_boot_images/javalib/x86_64/boot.art out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat:/apex/art_boot_images/javalib/x86_64/boot.oat out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art:/apex/art_boot_images/javalib/x86_64/boot-core2.art out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat:/apex/art_boot_images/javalib/x86_64/boot-core2.oat -DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_arm=out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.art:/system/framework/arm/boot-framework.art out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.oat:/system/framework/arm/boot-framework.oat -DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_arm64=out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.art:/system/framework/arm64/boot-framework.art out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.oat:/system/framework/arm64/boot-framework.oat -DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_host_x86=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art:/system/framework/x86/boot-framework.art out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat:/system/framework/x86/boot-framework.oat -DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_host_x86_64=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art:/system/framework/x86_64/boot-framework.art out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat:/system/framework/x86_64/boot-framework.oat -DEXPREOPT_IMAGE_BUILT_INSTALLED_mainline_arm=out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art:/system/framework/arm/boot-framework-foo.art out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.oat:/system/framework/arm/boot-framework-foo.oat -DEXPREOPT_IMAGE_BUILT_INSTALLED_mainline_arm64=out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art:/system/framework/arm64/boot-framework-foo.art out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.oat:/system/framework/arm64/boot-framework-foo.oat -DEXPREOPT_IMAGE_BUILT_INSTALLED_mainline_host_x86=out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art:/system/framework/x86/boot-framework-foo.art out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.oat:/system/framework/x86/boot-framework-foo.oat -DEXPREOPT_IMAGE_BUILT_INSTALLED_mainline_host_x86_64=out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art:/system/framework/x86_64/boot-framework-foo.art out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.oat:/system/framework/x86_64/boot-framework-foo.oat -DEXPREOPT_IMAGE_DEPS_art_arm=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex -DEXPREOPT_IMAGE_DEPS_art_arm64=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex -DEXPREOPT_IMAGE_DEPS_art_host_x86=out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex -DEXPREOPT_IMAGE_DEPS_art_host_x86_64=out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex -DEXPREOPT_IMAGE_DEPS_boot_arm=out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.art out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.oat out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.vdex -DEXPREOPT_IMAGE_DEPS_boot_arm64=out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.art out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.oat out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.vdex -DEXPREOPT_IMAGE_DEPS_boot_host_x86=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex -DEXPREOPT_IMAGE_DEPS_boot_host_x86_64=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex -DEXPREOPT_IMAGE_DEPS_mainline_arm=out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.oat out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.vdex -DEXPREOPT_IMAGE_DEPS_mainline_arm64=out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.oat out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.vdex -DEXPREOPT_IMAGE_DEPS_mainline_host_x86=out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.oat out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.vdex -DEXPREOPT_IMAGE_DEPS_mainline_host_x86_64=out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.oat out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.vdex +DEXPREOPT_IMAGE_BUILT_INSTALLED_art_arm=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art:/apex/art_boot_images/javalib/arm/boot.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat:/apex/art_boot_images/javalib/arm/boot.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art:/apex/art_boot_images/javalib/arm/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat:/apex/art_boot_images/javalib/arm/boot-core2.oat +DEXPREOPT_IMAGE_BUILT_INSTALLED_art_arm64=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art:/apex/art_boot_images/javalib/arm64/boot.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat:/apex/art_boot_images/javalib/arm64/boot.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art:/apex/art_boot_images/javalib/arm64/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat:/apex/art_boot_images/javalib/arm64/boot-core2.oat +DEXPREOPT_IMAGE_BUILT_INSTALLED_art_host_x86=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art:/apex/art_boot_images/javalib/x86/boot.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat:/apex/art_boot_images/javalib/x86/boot.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art:/apex/art_boot_images/javalib/x86/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat:/apex/art_boot_images/javalib/x86/boot-core2.oat +DEXPREOPT_IMAGE_BUILT_INSTALLED_art_host_x86_64=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art:/apex/art_boot_images/javalib/x86_64/boot.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat:/apex/art_boot_images/javalib/x86_64/boot.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art:/apex/art_boot_images/javalib/x86_64/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat:/apex/art_boot_images/javalib/x86_64/boot-core2.oat +DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_arm=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.art:/system/framework/arm/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.oat:/system/framework/arm/boot-framework.oat +DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_arm64=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.art:/system/framework/arm64/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.oat:/system/framework/arm64/boot-framework.oat +DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_host_x86=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art:/system/framework/x86/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat:/system/framework/x86/boot-framework.oat +DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_host_x86_64=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art:/system/framework/x86_64/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat:/system/framework/x86_64/boot-framework.oat +DEXPREOPT_IMAGE_BUILT_INSTALLED_mainline_arm=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art:/system/framework/arm/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.oat:/system/framework/arm/boot-framework-foo.oat +DEXPREOPT_IMAGE_BUILT_INSTALLED_mainline_arm64=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art:/system/framework/arm64/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.oat:/system/framework/arm64/boot-framework-foo.oat +DEXPREOPT_IMAGE_BUILT_INSTALLED_mainline_host_x86=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art:/system/framework/x86/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.oat:/system/framework/x86/boot-framework-foo.oat +DEXPREOPT_IMAGE_BUILT_INSTALLED_mainline_host_x86_64=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art:/system/framework/x86_64/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.oat:/system/framework/x86_64/boot-framework-foo.oat +DEXPREOPT_IMAGE_DEPS_art_arm=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex +DEXPREOPT_IMAGE_DEPS_art_arm64=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex +DEXPREOPT_IMAGE_DEPS_art_host_x86=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex +DEXPREOPT_IMAGE_DEPS_art_host_x86_64=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex +DEXPREOPT_IMAGE_DEPS_boot_arm=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.vdex +DEXPREOPT_IMAGE_DEPS_boot_arm64=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.vdex +DEXPREOPT_IMAGE_DEPS_boot_host_x86=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex +DEXPREOPT_IMAGE_DEPS_boot_host_x86_64=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex +DEXPREOPT_IMAGE_DEPS_mainline_arm=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.oat out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.vdex +DEXPREOPT_IMAGE_DEPS_mainline_arm64=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.oat out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.vdex +DEXPREOPT_IMAGE_DEPS_mainline_host_x86=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.oat out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.vdex +DEXPREOPT_IMAGE_DEPS_mainline_host_x86_64=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.oat out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.vdex DEXPREOPT_IMAGE_LICENSE_METADATA_art_arm=%[1]s DEXPREOPT_IMAGE_LICENSE_METADATA_art_arm64=%[1]s DEXPREOPT_IMAGE_LICENSE_METADATA_art_host_x86=%[1]s @@ -1099,51 +1099,51 @@ DEXPREOPT_IMAGE_LICENSE_METADATA_mainline_host_x86_64=out/soong/.intermediates/f DEXPREOPT_IMAGE_LOCATIONS_ON_DEVICEart=/system/framework/boot.art DEXPREOPT_IMAGE_LOCATIONS_ON_DEVICEboot=/system/framework/boot.art:/system/framework/boot-framework.art DEXPREOPT_IMAGE_LOCATIONS_ON_DEVICEmainline=/system/framework/boot.art:/system/framework/boot-framework.art:/system/framework/boot-framework-foo.art -DEXPREOPT_IMAGE_LOCATIONS_ON_HOSTart=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/boot.art -DEXPREOPT_IMAGE_LOCATIONS_ON_HOSTboot=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/boot.art:out/soong/test_device/dex_bootjars/android/system/framework/boot-framework.art -DEXPREOPT_IMAGE_LOCATIONS_ON_HOSTmainline=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/boot.art:out/soong/test_device/dex_bootjars/android/system/framework/boot-framework.art:out/soong/test_device/dex_mainlinejars/android/system/framework/boot-framework-foo.art +DEXPREOPT_IMAGE_LOCATIONS_ON_HOSTart=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/boot.art +DEXPREOPT_IMAGE_LOCATIONS_ON_HOSTboot=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/boot.art:out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/boot-framework.art +DEXPREOPT_IMAGE_LOCATIONS_ON_HOSTmainline=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/boot.art:out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/boot-framework.art:out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/boot-framework-foo.art DEXPREOPT_IMAGE_NAMES=art boot mainline -DEXPREOPT_IMAGE_PROFILE_BUILT_INSTALLED=out/soong/test_device/dex_bootjars/boot.bprof:/system/etc/boot-image.bprof out/soong/test_device/dex_bootjars/boot.prof:/system/etc/boot-image.prof +DEXPREOPT_IMAGE_PROFILE_BUILT_INSTALLED=out/soong/dexpreopt_arm64/dex_bootjars/boot.bprof:/system/etc/boot-image.bprof out/soong/dexpreopt_arm64/dex_bootjars/boot.prof:/system/etc/boot-image.prof DEXPREOPT_IMAGE_PROFILE_LICENSE_METADATA=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic -DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_arm=out/soong/test_device/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot.oat:/apex/art_boot_images/javalib/arm/boot.oat out/soong/test_device/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot-core2.oat:/apex/art_boot_images/javalib/arm/boot-core2.oat -DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_arm64=out/soong/test_device/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot.oat:/apex/art_boot_images/javalib/arm64/boot.oat out/soong/test_device/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot-core2.oat:/apex/art_boot_images/javalib/arm64/boot-core2.oat -DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_host_x86=out/soong/test_device/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat:/apex/art_boot_images/javalib/x86/boot.oat out/soong/test_device/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat:/apex/art_boot_images/javalib/x86/boot-core2.oat -DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_host_x86_64=out/soong/test_device/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat:/apex/art_boot_images/javalib/x86_64/boot.oat out/soong/test_device/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat:/apex/art_boot_images/javalib/x86_64/boot-core2.oat -DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_arm=out/soong/test_device/dex_bootjars_unstripped/android/system/framework/arm/boot-framework.oat:/system/framework/arm/boot-framework.oat -DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_arm64=out/soong/test_device/dex_bootjars_unstripped/android/system/framework/arm64/boot-framework.oat:/system/framework/arm64/boot-framework.oat -DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_host_x86=out/soong/test_device/dex_bootjars_unstripped/linux_glibc/system/framework/x86/boot-framework.oat:/system/framework/x86/boot-framework.oat -DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_host_x86_64=out/soong/test_device/dex_bootjars_unstripped/linux_glibc/system/framework/x86_64/boot-framework.oat:/system/framework/x86_64/boot-framework.oat -DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_mainline_arm=out/soong/test_device/dex_mainlinejars_unstripped/android/system/framework/arm/boot-framework-foo.oat:/system/framework/arm/boot-framework-foo.oat -DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_mainline_arm64=out/soong/test_device/dex_mainlinejars_unstripped/android/system/framework/arm64/boot-framework-foo.oat:/system/framework/arm64/boot-framework-foo.oat -DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_mainline_host_x86=out/soong/test_device/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86/boot-framework-foo.oat:/system/framework/x86/boot-framework-foo.oat -DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_mainline_host_x86_64=out/soong/test_device/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86_64/boot-framework-foo.oat:/system/framework/x86_64/boot-framework-foo.oat -DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_arm=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex:/apex/art_boot_images/javalib/arm/boot.vdex out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex:/apex/art_boot_images/javalib/arm/boot-core2.vdex -DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_arm64=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex:/apex/art_boot_images/javalib/arm64/boot.vdex out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex:/apex/art_boot_images/javalib/arm64/boot-core2.vdex -DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_host_x86=out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex:/apex/art_boot_images/javalib/x86/boot.vdex out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex:/apex/art_boot_images/javalib/x86/boot-core2.vdex -DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_host_x86_64=out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex:/apex/art_boot_images/javalib/x86_64/boot.vdex out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex:/apex/art_boot_images/javalib/x86_64/boot-core2.vdex -DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_arm=out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.vdex:/system/framework/arm/boot-framework.vdex -DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_arm64=out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.vdex:/system/framework/arm64/boot-framework.vdex -DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_host_x86=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex:/system/framework/x86/boot-framework.vdex -DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_host_x86_64=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex:/system/framework/x86_64/boot-framework.vdex -DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_mainline_arm=out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.vdex:/system/framework/arm/boot-framework-foo.vdex -DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_mainline_arm64=out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.vdex:/system/framework/arm64/boot-framework-foo.vdex -DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_mainline_host_x86=out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.vdex:/system/framework/x86/boot-framework-foo.vdex -DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_mainline_host_x86_64=out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.vdex:/system/framework/x86_64/boot-framework-foo.vdex -DEXPREOPT_IMAGE_ZIP_art=out/soong/test_device/dex_artjars/art.zip -DEXPREOPT_IMAGE_ZIP_boot=out/soong/test_device/dex_bootjars/boot.zip -DEXPREOPT_IMAGE_ZIP_mainline=out/soong/test_device/dex_mainlinejars/mainline.zip -DEXPREOPT_IMAGE_art_arm=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art -DEXPREOPT_IMAGE_art_arm64=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art -DEXPREOPT_IMAGE_art_host_x86=out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art -DEXPREOPT_IMAGE_art_host_x86_64=out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art -DEXPREOPT_IMAGE_boot_arm=out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.art -DEXPREOPT_IMAGE_boot_arm64=out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.art -DEXPREOPT_IMAGE_boot_host_x86=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art -DEXPREOPT_IMAGE_boot_host_x86_64=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art -DEXPREOPT_IMAGE_mainline_arm=out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art -DEXPREOPT_IMAGE_mainline_arm64=out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art -DEXPREOPT_IMAGE_mainline_host_x86=out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art -DEXPREOPT_IMAGE_mainline_host_x86_64=out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art +DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_arm=out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot.oat:/apex/art_boot_images/javalib/arm/boot.oat out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot-core2.oat:/apex/art_boot_images/javalib/arm/boot-core2.oat +DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_arm64=out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot.oat:/apex/art_boot_images/javalib/arm64/boot.oat out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot-core2.oat:/apex/art_boot_images/javalib/arm64/boot-core2.oat +DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_host_x86=out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat:/apex/art_boot_images/javalib/x86/boot.oat out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat:/apex/art_boot_images/javalib/x86/boot-core2.oat +DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_host_x86_64=out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat:/apex/art_boot_images/javalib/x86_64/boot.oat out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat:/apex/art_boot_images/javalib/x86_64/boot-core2.oat +DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_arm=out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm/boot-framework.oat:/system/framework/arm/boot-framework.oat +DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_arm64=out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm64/boot-framework.oat:/system/framework/arm64/boot-framework.oat +DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_host_x86=out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86/boot-framework.oat:/system/framework/x86/boot-framework.oat +DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_host_x86_64=out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86_64/boot-framework.oat:/system/framework/x86_64/boot-framework.oat +DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_mainline_arm=out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/android/system/framework/arm/boot-framework-foo.oat:/system/framework/arm/boot-framework-foo.oat +DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_mainline_arm64=out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/android/system/framework/arm64/boot-framework-foo.oat:/system/framework/arm64/boot-framework-foo.oat +DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_mainline_host_x86=out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86/boot-framework-foo.oat:/system/framework/x86/boot-framework-foo.oat +DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_mainline_host_x86_64=out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86_64/boot-framework-foo.oat:/system/framework/x86_64/boot-framework-foo.oat +DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_arm=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex:/apex/art_boot_images/javalib/arm/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex:/apex/art_boot_images/javalib/arm/boot-core2.vdex +DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_arm64=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex:/apex/art_boot_images/javalib/arm64/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex:/apex/art_boot_images/javalib/arm64/boot-core2.vdex +DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_host_x86=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex:/apex/art_boot_images/javalib/x86/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex:/apex/art_boot_images/javalib/x86/boot-core2.vdex +DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_host_x86_64=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex:/apex/art_boot_images/javalib/x86_64/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex:/apex/art_boot_images/javalib/x86_64/boot-core2.vdex +DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_arm=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.vdex:/system/framework/arm/boot-framework.vdex +DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_arm64=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.vdex:/system/framework/arm64/boot-framework.vdex +DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_host_x86=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex:/system/framework/x86/boot-framework.vdex +DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_host_x86_64=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex:/system/framework/x86_64/boot-framework.vdex +DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_mainline_arm=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.vdex:/system/framework/arm/boot-framework-foo.vdex +DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_mainline_arm64=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.vdex:/system/framework/arm64/boot-framework-foo.vdex +DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_mainline_host_x86=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.vdex:/system/framework/x86/boot-framework-foo.vdex +DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_mainline_host_x86_64=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.vdex:/system/framework/x86_64/boot-framework-foo.vdex +DEXPREOPT_IMAGE_ZIP_art=out/soong/dexpreopt_arm64/dex_artjars/art.zip +DEXPREOPT_IMAGE_ZIP_boot=out/soong/dexpreopt_arm64/dex_bootjars/boot.zip +DEXPREOPT_IMAGE_ZIP_mainline=out/soong/dexpreopt_arm64/dex_mainlinejars/mainline.zip +DEXPREOPT_IMAGE_art_arm=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art +DEXPREOPT_IMAGE_art_arm64=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art +DEXPREOPT_IMAGE_art_host_x86=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art +DEXPREOPT_IMAGE_art_host_x86_64=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art +DEXPREOPT_IMAGE_boot_arm=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.art +DEXPREOPT_IMAGE_boot_arm64=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.art +DEXPREOPT_IMAGE_boot_host_x86=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art +DEXPREOPT_IMAGE_boot_host_x86_64=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art +DEXPREOPT_IMAGE_mainline_arm=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art +DEXPREOPT_IMAGE_mainline_arm64=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art +DEXPREOPT_IMAGE_mainline_host_x86=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art +DEXPREOPT_IMAGE_mainline_host_x86_64=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art ` expected := strings.TrimSpace(fmt.Sprintf(format, expectedLicenseMetadataFile)) actual := strings.TrimSpace(out.String()) diff --git a/java/java.go b/java/java.go index fe4df7520..d3e74fd1c 100644 --- a/java/java.go +++ b/java/java.go @@ -815,7 +815,10 @@ func (p *librarySdkMemberProperties) PopulateFromVariant(ctx android.SdkMemberCo // If the min_sdk_version was set then add the canonical representation of the API level to the // snapshot. if j.deviceProperties.Min_sdk_version != nil { - canonical := android.ReplaceFinalizedCodenames(ctx.SdkModuleContext().Config(), j.minSdkVersion.String()) + canonical, err := android.ReplaceFinalizedCodenames(ctx.SdkModuleContext().Config(), j.minSdkVersion.String()) + if err != nil { + ctx.ModuleErrorf("%s", err) + } p.MinSdkVersion = proptools.StringPtr(canonical) } @@ -2839,7 +2842,7 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext) return android.IsConvertedToAidlLibrary(ctx, src.OriginalModuleName) }) - apexAvailableTags := android.ApexAvailableTags(ctx.Module()) + apexAvailableTags := android.ApexAvailableTagsWithoutTestApexes(ctx, ctx.Module()) if !aidlSrcs.IsEmpty() { aidlLibName := m.Name() + "_aidl_library" diff --git a/sdk/update.go b/sdk/update.go index d98ab683d..d3c59b0e4 100644 --- a/sdk/update.go +++ b/sdk/update.go @@ -1963,6 +1963,10 @@ type memberContext struct { requiredTraits android.SdkMemberTraitSet } +func (m *memberContext) ModuleErrorf(fmt string, args ...interface{}) { + m.sdkMemberContext.ModuleErrorf(fmt, args...) +} + func (m *memberContext) SdkModuleContext() android.ModuleContext { return m.sdkMemberContext } diff --git a/starlark_fmt/format.go b/starlark_fmt/format.go index a97f71b87..42095075c 100644 --- a/starlark_fmt/format.go +++ b/starlark_fmt/format.go @@ -99,6 +99,16 @@ func PrintStringIntDict(dict map[string]int, indentLevel int) string { return PrintDict(valDict, indentLevel) } +// PrintStringStringDict returns a Starlark-compatible string formatted as dictionary with +// string keys and string values. +func PrintStringStringDict(dict map[string]string, indentLevel int) string { + valDict := make(map[string]string, len(dict)) + for k, v := range dict { + valDict[k] = fmt.Sprintf(`"%s"`, v) + } + return PrintDict(valDict, indentLevel) +} + // PrintDict returns a starlark-compatible string containing a dictionary with string keys and // values printed with no additional formatting. func PrintDict(dict map[string]string, indentLevel int) string { diff --git a/ui/build/upload.go b/ui/build/upload.go index 9959e6f9c..1e6d94aad 100644 --- a/ui/build/upload.go +++ b/ui/build/upload.go @@ -138,6 +138,9 @@ func parsePhaseTiming(line string) bazel_metrics_proto.PhaseTiming { return phaseTiming } +// This method takes a file created by bazel's --analyze-profile mode and +// writes bazel metrics data to the provided filepath. +// TODO(b/279987768) - move this outside of upload.go func processBazelMetrics(bazelProfileFile string, bazelMetricsFile string, ctx Context) { if bazelProfileFile == "" { return @@ -189,12 +192,13 @@ func UploadMetrics(ctx Context, config Config, simpleOutput bool, buildStarted t defer ctx.EndTrace() uploader := config.MetricsUploaderApp() + processBazelMetrics(bazelProfileFile, bazelMetricsFile, ctx) + if uploader == "" { // If the uploader path was not specified, no metrics shall be uploaded. return } - processBazelMetrics(bazelProfileFile, bazelMetricsFile, ctx) // Several of the files might be directories. metricsFiles := pruneMetricsFiles(paths) if len(metricsFiles) == 0 { diff --git a/ui/metrics/bazel_metrics_proto/bazel_metrics.pb.go b/ui/metrics/bazel_metrics_proto/bazel_metrics.pb.go index f8b8fd6c6..bf5e80bec 100644 --- a/ui/metrics/bazel_metrics_proto/bazel_metrics.pb.go +++ b/ui/metrics/bazel_metrics_proto/bazel_metrics.pb.go @@ -14,8 +14,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 -// protoc v3.21.7 +// protoc-gen-go v1.30.0 +// protoc v3.21.12 // source: bazel_metrics.proto package bazel_metrics_proto @@ -41,6 +41,7 @@ type BazelMetrics struct { PhaseTimings []*PhaseTiming `protobuf:"bytes,1,rep,name=phase_timings,json=phaseTimings,proto3" json:"phase_timings,omitempty"` Total *int64 `protobuf:"varint,2,opt,name=total,proto3,oneof" json:"total,omitempty"` + ExitCode *int32 `protobuf:"varint,3,opt,name=exit_code,json=exitCode,proto3,oneof" json:"exit_code,omitempty"` } func (x *BazelMetrics) Reset() { @@ -89,6 +90,13 @@ func (x *BazelMetrics) GetTotal() int64 { return 0 } +func (x *BazelMetrics) GetExitCode() int32 { + if x != nil && x.ExitCode != nil { + return *x.ExitCode + } + return 0 +} + type PhaseTiming struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -161,15 +169,18 @@ var file_bazel_metrics_proto_rawDesc = []byte{ 0x0a, 0x13, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x19, 0x73, 0x6f, 0x6f, 0x6e, 0x67, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x22, 0x80, 0x01, 0x0a, 0x0c, 0x42, 0x61, 0x7a, 0x65, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x22, 0xb0, 0x01, 0x0a, 0x0c, 0x42, 0x61, 0x7a, 0x65, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x4b, 0x0a, 0x0d, 0x70, 0x68, 0x61, 0x73, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x6f, 0x6f, 0x6e, 0x67, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x52, 0x0c, 0x70, 0x68, 0x61, 0x73, 0x65, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, - 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x22, 0xd1, 0x01, 0x0a, 0x0b, 0x50, 0x68, 0x61, 0x73, 0x65, 0x54, 0x69, 0x6d, + 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x65, 0x78, 0x69, + 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x08, + 0x65, 0x78, 0x69, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x63, + 0x6f, 0x64, 0x65, 0x22, 0xd1, 0x01, 0x0a, 0x0b, 0x50, 0x68, 0x61, 0x73, 0x65, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x68, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x70, 0x68, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0e, 0x64, 0x75, 0x72, 0x61, 0x74, diff --git a/ui/metrics/bazel_metrics_proto/bazel_metrics.proto b/ui/metrics/bazel_metrics_proto/bazel_metrics.proto index 57eed4c28..90730809c 100644 --- a/ui/metrics/bazel_metrics_proto/bazel_metrics.proto +++ b/ui/metrics/bazel_metrics_proto/bazel_metrics.proto @@ -20,6 +20,7 @@ option go_package = "android/soong/ui/metrics/bazel_metrics_proto"; message BazelMetrics { repeated PhaseTiming phase_timings = 1; optional int64 total = 2; + optional int32 exit_code = 3; } message PhaseTiming { |