diff options
| -rw-r--r-- | aconfig/codegen/aconfig_declarations_group.go | 55 | ||||
| -rw-r--r-- | aconfig/codegen/java_aconfig_library.go | 8 | ||||
| -rw-r--r-- | android/config.go | 80 | ||||
| -rw-r--r-- | android/selects_test.go | 25 | ||||
| -rw-r--r-- | android/testing.go | 12 | ||||
| -rw-r--r-- | cc/compiler.go | 11 | ||||
| -rw-r--r-- | cc/lto.go | 11 | ||||
| -rw-r--r-- | java/platform_compat_config.go | 2 |
8 files changed, 64 insertions, 140 deletions
diff --git a/aconfig/codegen/aconfig_declarations_group.go b/aconfig/codegen/aconfig_declarations_group.go index 33c20cdb2..13daf470b 100644 --- a/aconfig/codegen/aconfig_declarations_group.go +++ b/aconfig/codegen/aconfig_declarations_group.go @@ -39,11 +39,6 @@ type AconfigDeclarationsGroup struct { android.DefaultableModuleBase properties AconfigDeclarationsGroupProperties - - aconfigDeclarationNames []string - intermediateCacheOutputPaths android.Paths - javaSrcjars android.Paths - modeInfos map[string]android.ModeInfo } type AconfigDeclarationsGroupProperties struct { @@ -76,53 +71,45 @@ func (adg *AconfigDeclarationsGroup) DepsMutator(ctx android.BottomUpMutatorCont ctx.AddDependency(ctx.Module(), rustAconfigLibraryTag, adg.properties.Rust_aconfig_libraries...) } -func (adg *AconfigDeclarationsGroup) VisitDeps(ctx android.ModuleContext) { - adg.modeInfos = make(map[string]android.ModeInfo) +func (adg *AconfigDeclarationsGroup) GenerateAndroidBuildActions(ctx android.ModuleContext) { + modeInfos := make(map[string]android.ModeInfo) + var aconfigDeclarationNames []string + var intermediateCacheOutputPaths android.Paths + var javaSrcjars android.Paths ctx.VisitDirectDeps(func(dep android.Module) { tag := ctx.OtherModuleDependencyTag(dep) if provider, ok := android.OtherModuleProvider(ctx, dep, android.CodegenInfoProvider); ok { // aconfig declaration names and cache files are collected for all aconfig library dependencies - adg.aconfigDeclarationNames = append(adg.aconfigDeclarationNames, provider.AconfigDeclarations...) - adg.intermediateCacheOutputPaths = append(adg.intermediateCacheOutputPaths, provider.IntermediateCacheOutputPaths...) + aconfigDeclarationNames = append(aconfigDeclarationNames, provider.AconfigDeclarations...) + intermediateCacheOutputPaths = append(intermediateCacheOutputPaths, provider.IntermediateCacheOutputPaths...) switch tag { case aconfigDeclarationsGroupTag: // Will retrieve outputs from another language codegen modules when support is added - adg.javaSrcjars = append(adg.javaSrcjars, provider.Srcjars...) - maps.Copy(adg.modeInfos, provider.ModeInfos) + javaSrcjars = append(javaSrcjars, provider.Srcjars...) + maps.Copy(modeInfos, provider.ModeInfos) case javaAconfigLibraryTag: - adg.javaSrcjars = append(adg.javaSrcjars, provider.Srcjars...) - maps.Copy(adg.modeInfos, provider.ModeInfos) + javaSrcjars = append(javaSrcjars, provider.Srcjars...) + maps.Copy(modeInfos, provider.ModeInfos) case ccAconfigLibraryTag: - maps.Copy(adg.modeInfos, provider.ModeInfos) + maps.Copy(modeInfos, provider.ModeInfos) case rustAconfigLibraryTag: - maps.Copy(adg.modeInfos, provider.ModeInfos) + maps.Copy(modeInfos, provider.ModeInfos) } } }) -} -func (adg *AconfigDeclarationsGroup) GenerateAndroidBuildActions(ctx android.ModuleContext) { - adg.VisitDeps(ctx) - adg.aconfigDeclarationNames = android.FirstUniqueStrings(adg.aconfigDeclarationNames) - adg.intermediateCacheOutputPaths = android.FirstUniquePaths(adg.intermediateCacheOutputPaths) + aconfigDeclarationNames = android.FirstUniqueStrings(aconfigDeclarationNames) + intermediateCacheOutputPaths = android.FirstUniquePaths(intermediateCacheOutputPaths) android.SetProvider(ctx, android.CodegenInfoProvider, android.CodegenInfo{ - AconfigDeclarations: adg.aconfigDeclarationNames, - IntermediateCacheOutputPaths: adg.intermediateCacheOutputPaths, - Srcjars: adg.javaSrcjars, - ModeInfos: adg.modeInfos, + AconfigDeclarations: aconfigDeclarationNames, + IntermediateCacheOutputPaths: intermediateCacheOutputPaths, + Srcjars: javaSrcjars, + ModeInfos: modeInfos, }) - ctx.SetOutputFiles(adg.intermediateCacheOutputPaths, "") - ctx.SetOutputFiles(adg.javaSrcjars, ".srcjars") -} - -func (adg *AconfigDeclarationsGroup) Srcjars() android.Paths { - return adg.javaSrcjars -} - -func (adg *AconfigDeclarationsGroup) AconfigDeclarations() []string { - return adg.aconfigDeclarationNames + ctx.SetOutputFiles(intermediateCacheOutputPaths, "") + ctx.SetOutputFiles(javaSrcjars, ".srcjars") } diff --git a/aconfig/codegen/java_aconfig_library.go b/aconfig/codegen/java_aconfig_library.go index 9f42e21de..673ac2afe 100644 --- a/aconfig/codegen/java_aconfig_library.go +++ b/aconfig/codegen/java_aconfig_library.go @@ -15,8 +15,6 @@ package codegen import ( - "fmt" - "android/soong/android" "android/soong/java" @@ -80,7 +78,7 @@ func (callbacks *JavaAconfigDeclarationsLibraryCallbacks) GenerateSourceJarBuild // Get the values that came from the global RELEASE_ACONFIG_VALUE_SETS flag declarationsModules := ctx.GetDirectDepsWithTag(declarationsTag) if len(declarationsModules) != 1 { - panic(fmt.Errorf("Exactly one aconfig_declarations property required")) + panic("Exactly one aconfig_declarations property required") } declarations, _ := android.OtherModuleProvider(ctx, declarationsModules[0], android.AconfigDeclarationsProviderKey) @@ -133,10 +131,6 @@ func (callbacks *JavaAconfigDeclarationsLibraryCallbacks) GenerateSourceJarBuild return srcJarPath, declarations.IntermediateCacheOutputPath } -func (callbacks *JavaAconfigDeclarationsLibraryCallbacks) AconfigDeclarations() *string { - return proptools.StringPtr(callbacks.properties.Aconfig_declarations) -} - func isModeSupported(mode string) bool { return android.InList(mode, aconfigSupportedModes) } diff --git a/android/config.go b/android/config.go index a18cb8be8..da76f0dd2 100644 --- a/android/config.go +++ b/android/config.go @@ -22,7 +22,6 @@ import ( "fmt" "os" "path/filepath" - "reflect" "runtime" "strconv" "strings" @@ -37,9 +36,7 @@ import ( "github.com/google/blueprint/proptools" "android/soong/android/soongconfig" - "android/soong/bazel" "android/soong/remoteexec" - "android/soong/starlark_fmt" ) // Bool re-exports proptools.Bool for the android package. @@ -413,7 +410,7 @@ func loadFromConfigFile(configurable *ProductVariables, filename string) error { proptools.StringPtr(String(configurable.Platform_sdk_codename)) } - return saveToBazelConfigFile(configurable, filepath.Dir(filename)) + return nil } // atomically writes the config file in case two copies of soong_build are running simultaneously @@ -447,81 +444,6 @@ func saveToConfigFile(config *ProductVariables, filename string) error { return nil } -type productVariableStarlarkRepresentation struct { - soongType string - selectable bool - archVariant bool -} - -func saveToBazelConfigFile(config *ProductVariables, outDir string) error { - dir := filepath.Join(outDir, bazel.SoongInjectionDirName, "product_config") - err := createDirIfNonexistent(dir, os.ModePerm) - if err != nil { - return fmt.Errorf("Could not create dir %s: %s", dir, err) - } - - allProductVariablesType := reflect.TypeOf((*ProductVariables)(nil)).Elem() - productVariablesInfo := make(map[string]productVariableStarlarkRepresentation) - p := variableProperties{} - t := reflect.TypeOf(p.Product_variables) - for i := 0; i < t.NumField(); i++ { - f := t.Field(i) - archVariant := proptools.HasTag(f, "android", "arch_variant") - if mainProductVariablesStructField, ok := allProductVariablesType.FieldByName(f.Name); ok { - productVariablesInfo[f.Name] = productVariableStarlarkRepresentation{ - soongType: stringRepresentationOfSimpleType(mainProductVariablesStructField.Type), - selectable: true, - archVariant: archVariant, - } - } else { - panic("Unknown variable " + f.Name) - } - } - - err = pathtools.WriteFileIfChanged(filepath.Join(dir, "product_variable_constants.bzl"), []byte(fmt.Sprintf(` -# product_var_constant_info is a map of product variables to information about them. The fields are: -# - soongType: The type of the product variable as it appears in soong's ProductVariables struct. -# examples are string, bool, int, *bool, *string, []string, etc. This may be an overly -# conservative estimation of the type, for example a *bool could oftentimes just be a -# bool that defaults to false. -# - selectable: if this product variable can be selected on in Android.bp/build files. This means -# it's listed in the "variableProperties" soong struct. Currently all variables in -# this list are selectable because we only need the selectable ones at the moment, -# but the list may be expanded later. -# - archVariant: If the variable is tagged as arch variant in the "variableProperties" struct. -product_var_constant_info = %s -product_var_constraints = [k for k, v in product_var_constant_info.items() if v.selectable] -arch_variant_product_var_constraints = [k for k, v in product_var_constant_info.items() if v.selectable and v.archVariant] -`, starlark_fmt.PrintAny(productVariablesInfo, 0))), 0644) - if err != nil { - return fmt.Errorf("Could not write .bzl config file %s", err) - } - err = pathtools.WriteFileIfChanged(filepath.Join(dir, "BUILD"), - []byte(bazel.GeneratedBazelFileWarning), 0644) - if err != nil { - return fmt.Errorf("Could not write BUILD config file %s", err) - } - - return nil -} - -func stringRepresentationOfSimpleType(ty reflect.Type) string { - switch ty.Kind() { - case reflect.String: - return "string" - case reflect.Bool: - return "bool" - case reflect.Int: - return "int" - case reflect.Slice: - return "[]" + stringRepresentationOfSimpleType(ty.Elem()) - case reflect.Pointer: - return "*" + stringRepresentationOfSimpleType(ty.Elem()) - default: - panic("unimplemented type: " + ty.Kind().String()) - } -} - // NullConfig returns a mostly empty Config for use by standalone tools like dexpreopt_gen that // use the android package. func NullConfig(outDir, soongOutDir string) Config { diff --git a/android/selects_test.go b/android/selects_test.go index 6f980ce4c..3093deb11 100644 --- a/android/selects_test.go +++ b/android/selects_test.go @@ -778,6 +778,27 @@ func TestSelects(t *testing.T) { my_string_list: &[]string{"a.cpp", "b.cpp", "c.cpp"}, }, }, + { + name: "Test AppendSimpleValue", + bp: ` + my_module_type { + name: "foo", + my_string_list: ["a.cpp"] + select(soong_config_variable("my_namespace", "my_variable"), { + "a": ["a.cpp"], + "b": ["b.cpp"], + default: ["c.cpp"], + }), + } + `, + vendorVars: map[string]map[string]string{ + "selects_test": { + "append_to_string_list": "foo.cpp", + }, + }, + provider: selectsTestProvider{ + my_string_list: &[]string{"a.cpp", "c.cpp", "foo.cpp"}, + }, + }, } for _, tc := range testCases { @@ -892,6 +913,10 @@ func optionalToPtr[T any](o proptools.ConfigurableOptional[T]) *T { } func (p *selectsMockModule) GenerateAndroidBuildActions(ctx ModuleContext) { + toAppend := ctx.Config().VendorConfig("selects_test").String("append_to_string_list") + if toAppend != "" { + p.properties.My_string_list.AppendSimpleValue([]string{toAppend}) + } SetProvider(ctx, selectsTestProviderKey, selectsTestProvider{ my_bool: optionalToPtr(p.properties.My_bool.Get(ctx)), my_string: optionalToPtr(p.properties.My_string.Get(ctx)), diff --git a/android/testing.go b/android/testing.go index 6518f4a53..6fb2997cb 100644 --- a/android/testing.go +++ b/android/testing.go @@ -1014,10 +1014,18 @@ func (m TestingModule) VariablesForTestsRelativeToTop() map[string]string { return normalizeStringMapRelativeToTop(m.config, m.module.VariablesForTests()) } -// OutputFiles calls OutputFileProducer.OutputFiles on the encapsulated module, exits the test -// immediately if there is an error and otherwise returns the result of calling Paths.RelativeToTop +// OutputFiles first checks if module base outputFiles property has any output +// files can be used to return. +// If not, it calls OutputFileProducer.OutputFiles on the +// encapsulated module, exits the test immediately if there is an error and +// otherwise returns the result of calling Paths.RelativeToTop // on the returned Paths. func (m TestingModule) OutputFiles(t *testing.T, tag string) Paths { + // TODO: add non-empty-string tag case and remove OutputFileProducer part + if tag == "" && m.module.base().outputFiles.DefaultOutputFiles != nil { + return m.module.base().outputFiles.DefaultOutputFiles.RelativeToTop() + } + producer, ok := m.module.(OutputFileProducer) if !ok { t.Fatalf("%q must implement OutputFileProducer\n", m.module.Name()) diff --git a/cc/compiler.go b/cc/compiler.go index 69163945d..d8446fb84 100644 --- a/cc/compiler.go +++ b/cc/compiler.go @@ -172,12 +172,6 @@ type BaseCompilerProperties struct { Target_api *string } - Debug, Release struct { - // list of module-specific flags that will be used for C and C++ compiles in debug or - // release builds - Cflags []string `android:"arch_variant"` - } `android:"arch_variant"` - Target struct { Vendor, Product struct { // list of source files that should only be used in vendor or @@ -479,11 +473,6 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps ctx.ModuleErrorf("%s", err) } - CheckBadCompilerFlags(ctx, "release.cflags", compiler.Properties.Release.Cflags) - - // TODO: debug - flags.Local.CFlags = append(flags.Local.CFlags, esc(compiler.Properties.Release.Cflags)...) - if !ctx.DeviceConfig().BuildBrokenClangCFlags() && len(compiler.Properties.Clang_cflags) != 0 { ctx.PropertyErrorf("clang_cflags", "property is deprecated, see Changes.md file") } else { @@ -54,6 +54,9 @@ type LTOProperties struct { // Use -fwhole-program-vtables cflag. Whole_program_vtables *bool + + // Use --lto-O0 flag. + Lto_O0 *bool } type lto struct { @@ -106,12 +109,8 @@ func (lto *lto) flags(ctx ModuleContext, flags Flags) Flags { ltoCFlags := []string{"-flto=thin", "-fsplit-lto-unit"} var ltoLdFlags []string - // The module did not explicitly turn on LTO. Only leverage LTO's - // better dead code elimination and CFG simplification, but do - // not perform costly optimizations for a balance between compile - // time, binary size and performance. - // Apply the same for Eng builds as well. - if !lto.ThinLTO() || ctx.Config().Eng() { + // Do not perform costly LTO optimizations for Eng builds. + if Bool(lto.Properties.Lto_O0) || ctx.Config().Eng() { ltoLdFlags = append(ltoLdFlags, "-Wl,--lto-O0") } diff --git a/java/platform_compat_config.go b/java/platform_compat_config.go index 99fa092be..49756dd99 100644 --- a/java/platform_compat_config.go +++ b/java/platform_compat_config.go @@ -266,7 +266,7 @@ func (p *platformCompatConfigSingleton) GenerateBuildActions(ctx android.Singlet func (p *platformCompatConfigSingleton) MakeVars(ctx android.MakeVarsContext) { if p.metadata != nil { - ctx.Strict("INTERNAL_PLATFORM_MERGED_COMPAT_CONFIG", p.metadata.String()) + ctx.DistForGoal("droidcore", p.metadata) } } |