diff options
Diffstat (limited to 'android/variable.go')
-rw-r--r-- | android/variable.go | 232 |
1 files changed, 172 insertions, 60 deletions
diff --git a/android/variable.go b/android/variable.go index 34d145e8a..f152ad206 100644 --- a/android/variable.go +++ b/android/variable.go @@ -24,11 +24,17 @@ import ( ) func init() { - PreDepsMutators(func(ctx RegisterMutatorsContext) { + registerVariableBuildComponents(InitRegistrationContext) +} + +func registerVariableBuildComponents(ctx RegistrationContext) { + ctx.PreDepsMutators(func(ctx RegisterMutatorsContext) { ctx.BottomUp("variable", VariableMutator).Parallel() }) } +var PrepareForTestWithVariables = FixtureRegisterWithContext(registerVariableBuildComponents) + type variableProperties struct { Product_variables struct { Platform_sdk_version struct { @@ -49,6 +55,14 @@ type variableProperties struct { Exclude_static_libs []string `android:"arch_variant"` } `android:"arch_variant"` + Malloc_zero_contents struct { + Cflags []string `android:"arch_variant"` + } `android:"arch_variant"` + + Malloc_pattern_fill_contents struct { + Cflags []string `android:"arch_variant"` + } `android:"arch_variant"` + Safestack struct { Cflags []string `android:"arch_variant"` } `android:"arch_variant"` @@ -82,6 +96,11 @@ type variableProperties struct { Required []string Host_required []string Target_required []string + Strip struct { + All *bool + Keep_symbols *bool + Keep_symbols_and_debug_frame *bool + } } // eng is true for -eng builds, and can be used to turn on additionaly heavyweight debugging @@ -95,6 +114,9 @@ type variableProperties struct { Sanitize struct { Address *bool } + Optimize struct { + Enabled *bool + } } Pdk struct { @@ -105,27 +127,21 @@ type variableProperties struct { Cppflags []string } - Use_lmkd_stats_log struct { - Cflags []string - } - Arc struct { - Cflags []string - Exclude_srcs []string - Include_dirs []string - Shared_libs []string - Static_libs []string - Srcs []string - } + Cflags []string `android:"arch_variant"` + Exclude_srcs []string `android:"arch_variant"` + Header_libs []string `android:"arch_variant"` + Include_dirs []string `android:"arch_variant"` + Shared_libs []string `android:"arch_variant"` + Static_libs []string `android:"arch_variant"` + Srcs []string `android:"arch_variant"` + Whole_static_libs []string `android:"arch_variant"` + } `android:"arch_variant"` Flatten_apex struct { Enabled *bool } - Experimental_mte struct { - Cflags []string `android:"arch_variant"` - } `android:"arch_variant"` - Native_coverage struct { Src *string `android:"arch_variant"` Srcs []string `android:"arch_variant"` @@ -151,9 +167,9 @@ type variableProperties struct { } Device_support_hwfde struct { - Cflags []string - Header_libs []string - Shared_libs []string + Cflags []string + Header_libs []string + Shared_libs []string } Device_support_hwfde_perf struct { @@ -183,16 +199,17 @@ type productVariables struct { Platform_min_supported_target_sdk_version *string `json:",omitempty"` Platform_base_os *string `json:",omitempty"` - DeviceName *string `json:",omitempty"` - DeviceArch *string `json:",omitempty"` - DeviceArchVariant *string `json:",omitempty"` - DeviceCpuVariant *string `json:",omitempty"` - DeviceAbi []string `json:",omitempty"` - DeviceVndkVersion *string `json:",omitempty"` - DeviceSystemSdkVersions []string `json:",omitempty"` + DeviceName *string `json:",omitempty"` + DeviceArch *string `json:",omitempty"` + DeviceArchVariant *string `json:",omitempty"` + DeviceCpuVariant *string `json:",omitempty"` + DeviceAbi []string `json:",omitempty"` + DeviceVndkVersion *string `json:",omitempty"` + DeviceCurrentApiLevelForVendorModules *string `json:",omitempty"` + DeviceSystemSdkVersions []string `json:",omitempty"` RecoverySnapshotVersion *string `json:",omitempty"` - RamdiskSnapshotVersion *string `json:",omitempty"` + RamdiskSnapshotVersion *string `json:",omitempty"` DeviceSecondaryArch *string `json:",omitempty"` DeviceSecondaryArchVariant *string `json:",omitempty"` @@ -218,11 +235,9 @@ type productVariables struct { CrossHostArch *string `json:",omitempty"` CrossHostSecondaryArch *string `json:",omitempty"` - DeviceResourceOverlays []string `json:",omitempty"` - ProductResourceOverlays []string `json:",omitempty"` - EnforceRROTargets []string `json:",omitempty"` - // TODO(b/150820813) Some modules depend on static overlay, remove this after eliminating the dependency. - EnforceRROExemptedTargets []string `json:",omitempty"` + DeviceResourceOverlays []string `json:",omitempty"` + ProductResourceOverlays []string `json:",omitempty"` + EnforceRROTargets []string `json:",omitempty"` EnforceRROExcludedOverlays []string `json:",omitempty"` AAPTCharacteristics *string `json:",omitempty"` @@ -234,14 +249,20 @@ type productVariables struct { AppsDefaultVersionName *string `json:",omitempty"` - Real_hal *bool `json:",omitempty"` - Qmaa_hal *bool `json:",omitempty"` - Device_support_hwfde *bool `json:",omitempty"` - Device_support_hwfde_perf *bool `json:",omitempty"` + Real_hal *bool `json:",omitempty"` + Qmaa_hal *bool `json:",omitempty"` + Device_support_hwfde *bool `json:",omitempty"` + Device_support_hwfde_perf *bool `json:",omitempty"` Allow_missing_dependencies *bool `json:",omitempty"` Unbundled_build *bool `json:",omitempty"` + Unbundled_build_apps *bool `json:",omitempty"` + Unbundled_build_image *bool `json:",omitempty"` Unbundled_build_sdks_from_source *bool `json:",omitempty"` + Always_use_prebuilt_sdks *bool `json:",omitempty"` + Skip_boot_jars_check *bool `json:",omitempty"` Malloc_not_svelte *bool `json:",omitempty"` + Malloc_zero_contents *bool `json:",omitempty"` + Malloc_pattern_fill_contents *bool `json:",omitempty"` Safestack *bool `json:",omitempty"` HostStaticBinaries *bool `json:",omitempty"` Binder32bit *bool `json:",omitempty"` @@ -256,7 +277,6 @@ type productVariables struct { Enforce_vintf_manifest *bool `json:",omitempty"` Pdk *bool `json:",omitempty"` Uml *bool `json:",omitempty"` - Use_lmkd_stats_log *bool `json:",omitempty"` Arc *bool `json:",omitempty"` MinimizeJavaDebugInfo *bool `json:",omitempty"` @@ -265,8 +285,8 @@ type productVariables struct { UncompressPrivAppDex *bool `json:",omitempty"` ModulesLoadedByPrivilegedModules []string `json:",omitempty"` - BootJars []string `json:",omitempty"` - UpdatableBootJars []string `json:",omitempty"` + BootJars ConfiguredJarList `json:",omitempty"` + UpdatableBootJars ConfiguredJarList `json:",omitempty"` IntegerOverflowExcludePaths []string `json:",omitempty"` IntegerOverflowIncludePaths []string `json:",omitempty"` @@ -280,7 +300,9 @@ type productVariables struct { DisableScudo *bool `json:",omitempty"` - Experimental_mte *bool `json:",omitempty"` + MemtagHeapExcludePaths []string `json:",omitempty"` + MemtagHeapAsyncIncludePaths []string `json:",omitempty"` + MemtagHeapSyncIncludePaths []string `json:",omitempty"` VendorPath *string `json:",omitempty"` OdmPath *string `json:",omitempty"` @@ -303,10 +325,6 @@ type productVariables struct { // Set by NewConfig Native_coverage *bool - DevicePrefer32BitApps *bool `json:",omitempty"` - DevicePrefer32BitExecutables *bool `json:",omitempty"` - HostPrefer32BitExecutables *bool `json:",omitempty"` - SanitizeHost []string `json:",omitempty"` SanitizeDevice []string `json:",omitempty"` SanitizeDeviceDiag []string `json:",omitempty"` @@ -344,25 +362,32 @@ type productVariables struct { VendorSnapshotDirsExcluded []string `json:",omitempty"` RecoverySnapshotDirsExcluded []string `json:",omitempty"` RecoverySnapshotDirsIncluded []string `json:",omitempty"` + RamdiskSnapshotDirsExcluded []string `json:",omitempty"` + RamdiskSnapshotDirsIncluded []string `json:",omitempty"` BoardVendorSepolicyDirs []string `json:",omitempty"` BoardOdmSepolicyDirs []string `json:",omitempty"` - BoardPlatPublicSepolicyDirs []string `json:",omitempty"` - BoardPlatPrivateSepolicyDirs []string `json:",omitempty"` + BoardReqdMaskPolicy []string `json:",omitempty"` + SystemExtPublicSepolicyDirs []string `json:",omitempty"` + SystemExtPrivateSepolicyDirs []string `json:",omitempty"` BoardSepolicyM4Defs []string `json:",omitempty"` - BoardVndkRuntimeDisable *bool `json:",omitempty"` + BoardSepolicyVers *string `json:",omitempty"` + PlatformSepolicyVersion *string `json:",omitempty"` VendorVars map[string]map[string]string `json:",omitempty"` - Ndk_abis *bool `json:",omitempty"` - Exclude_draft_ndk_apis *bool `json:",omitempty"` + Ndk_abis *bool `json:",omitempty"` - Flatten_apex *bool `json:",omitempty"` - Aml_abis *bool `json:",omitempty"` + Flatten_apex *bool `json:",omitempty"` + ForceApexSymlinkOptimization *bool `json:",omitempty"` + CompressedApex *bool `json:",omitempty"` + Aml_abis *bool `json:",omitempty"` DexpreoptGlobalConfig *string `json:",omitempty"` + WithDexpreopt bool `json:",omitempty"` + ManifestPackageNameOverrides []string `json:",omitempty"` CertificateOverrides []string `json:",omitempty"` PackageNameOverrides []string `json:",omitempty"` @@ -376,7 +401,6 @@ type productVariables struct { ProductPublicSepolicyDirs []string `json:",omitempty"` ProductPrivateSepolicyDirs []string `json:",omitempty"` - ProductCompatibleProperty *bool `json:",omitempty"` ProductVndkVersion *string `json:",omitempty"` @@ -386,11 +410,35 @@ type productVariables struct { EnforceProductPartitionInterface *bool `json:",omitempty"` + EnforceInterPartitionJavaSdkLibrary *bool `json:",omitempty"` + InterPartitionJavaLibraryAllowList []string `json:",omitempty"` + InstallExtraFlattenedApexes *bool `json:",omitempty"` BoardUsesRecoveryAsBoot *bool `json:",omitempty"` + BoardUsesRamdiskAsBoot *bool `json:",omitempty"` + + BoardKernelBinaries []string `json:",omitempty"` + BoardKernelModuleInterfaceVersions []string `json:",omitempty"` + + BoardMoveRecoveryResourcesToVendorBoot *bool `json:",omitempty"` + BoardMoveRamdiskResourcesToVendorBoot *bool `json:",omitempty"` PrebuiltHiddenApiDir *string `json:",omitempty"` + + ShippingApiLevel *string `json:",omitempty"` + + BuildBrokenEnforceSyspropOwner bool `json:",omitempty"` + BuildBrokenTrebleSyspropNeverallow bool `json:",omitempty"` + BuildBrokenVendorPropertyNamespace bool `json:",omitempty"` + + BuildDebugfsRestrictionsEnabled bool `json:",omitempty"` + + RequiresInsecureExecmemForSwiftshader bool `json:",omitempty"` + + SelinuxIgnoreNeverallows bool `json:",omitempty"` + + SepolicySplit bool `json:",omitempty"` } func boolPtr(v bool) *bool { @@ -409,12 +457,12 @@ func (v *productVariables) SetDefaultConfig() { *v = productVariables{ BuildNumberFile: stringPtr("build_number.txt"), - Platform_version_name: stringPtr("Q"), - Platform_sdk_version: intPtr(28), - Platform_sdk_codename: stringPtr("Q"), + Platform_version_name: stringPtr("S"), + Platform_sdk_version: intPtr(30), + Platform_sdk_codename: stringPtr("S"), Platform_sdk_final: boolPtr(false), - Platform_version_active_codenames: []string{"Q"}, - Platform_vndk_version: stringPtr("Q"), + Platform_version_active_codenames: []string{"S"}, + Platform_vndk_version: stringPtr("S"), HostArch: stringPtr("x86_64"), HostSecondaryArch: stringPtr("x86"), @@ -433,8 +481,13 @@ func (v *productVariables) SetDefaultConfig() { AAPTCharacteristics: stringPtr("nosdcard"), AAPTPrebuiltDPI: []string{"xhdpi", "xxhdpi"}, - Malloc_not_svelte: boolPtr(true), - Safestack: boolPtr(false), + Malloc_not_svelte: boolPtr(true), + Malloc_zero_contents: boolPtr(true), + Malloc_pattern_fill_contents: boolPtr(false), + Safestack: boolPtr(false), + + BootJars: ConfiguredJarList{apexes: []string{}, jars: []string{}}, + UpdatableBootJars: ConfiguredJarList{apexes: []string{}, jars: []string{}}, } if runtime.GOOS == "linux" { @@ -444,6 +497,63 @@ func (v *productVariables) SetDefaultConfig() { } } +// ProductConfigContext requires the access to the Module to get product config properties. +type ProductConfigContext interface { + Module() Module +} + +// ProductConfigProperty contains the information for a single property (may be a struct) paired +// with the appropriate ProductConfigVariable. +type ProductConfigProperty struct { + ProductConfigVariable string + Property interface{} +} + +// ProductConfigProperties is a map of property name to a slice of ProductConfigProperty such that +// all it all product variable-specific versions of a property are easily accessed together +type ProductConfigProperties map[string][]ProductConfigProperty + +// ProductVariableProperties returns a ProductConfigProperties containing only the properties which +// have been set for the module in the given context. +func ProductVariableProperties(ctx ProductConfigContext) ProductConfigProperties { + module := ctx.Module() + moduleBase := module.base() + + productConfigProperties := ProductConfigProperties{} + + if moduleBase.variableProperties == nil { + return productConfigProperties + } + + variableValues := reflect.ValueOf(moduleBase.variableProperties).Elem().FieldByName("Product_variables") + for i := 0; i < variableValues.NumField(); i++ { + variableValue := variableValues.Field(i) + // Check if any properties were set for the module + if variableValue.IsZero() { + continue + } + // e.g. Platform_sdk_version, Unbundled_build, Malloc_not_svelte, etc. + productVariableName := variableValues.Type().Field(i).Name + for j := 0; j < variableValue.NumField(); j++ { + property := variableValue.Field(j) + // If the property wasn't set, no need to pass it along + if property.IsZero() { + continue + } + + // e.g. Asflags, Cflags, Enabled, etc. + propertyName := variableValue.Type().Field(j).Name + productConfigProperties[propertyName] = append(productConfigProperties[propertyName], + ProductConfigProperty{ + ProductConfigVariable: productVariableName, + Property: property.Interface(), + }) + } + } + + return productConfigProperties +} + func VariableMutator(mctx BottomUpMutatorContext) { var module Module var ok bool @@ -460,13 +570,15 @@ func VariableMutator(mctx BottomUpMutatorContext) { variableValues := reflect.ValueOf(a.variableProperties).Elem().FieldByName("Product_variables") + productVariables := reflect.ValueOf(mctx.Config().productVariables) + for i := 0; i < variableValues.NumField(); i++ { variableValue := variableValues.Field(i) name := variableValues.Type().Field(i).Name property := "product_variables." + proptools.PropertyNameForField(name) // Check that the variable was set for the product - val := reflect.ValueOf(mctx.Config().productVariables).FieldByName(name) + val := productVariables.FieldByName(name) if !val.IsValid() || val.Kind() != reflect.Ptr || val.IsNil() { continue } |