From 09721868dbac6c4fc23bddc747255af679c648bc Mon Sep 17 00:00:00 2001 From: LaMont Jones Date: Tue, 11 Jun 2024 10:30:50 -0700 Subject: [PATCH] release_config: various cleanup - move WriteMakefile to release_config.go - use slices.Sort instead of slices.SortFunc where applicable. - improve error message when inheriting an invalid release config Bug: None Test: manual Change-Id: Id959ddccc75fad912518d5cce8d14da506e0bbea --- cmd/release_config/release_config/main.go | 4 +- .../release_config_lib/flag_artifact.go | 9 ++ .../release_config_lib/release_config.go | 77 ++++++++++++++++- .../release_config_lib/release_configs.go | 86 +------------------ java/base.go | 2 +- 5 files changed, 88 insertions(+), 90 deletions(-) diff --git a/cmd/release_config/release_config/main.go b/cmd/release_config/release_config/main.go index bd4ab4907..d06b2b796 100644 --- a/cmd/release_config/release_config/main.go +++ b/cmd/release_config/release_config/main.go @@ -88,7 +88,7 @@ func main() { return } // Write the makefile where release_config.mk is going to look for it. - err = configs.WriteMakefile(makefilePath, targetRelease) + err = config.WriteMakefile(makefilePath, targetRelease, configs) if err != nil { panic(err) } @@ -97,7 +97,7 @@ func main() { for _, c := range configs.GetSortedReleaseConfigs() { if c.Name != targetRelease { makefilePath = filepath.Join(outputDir, fmt.Sprintf("release_config-%s-%s.varmk", product, c.Name)) - err = configs.WriteMakefile(makefilePath, c.Name) + err = config.WriteMakefile(makefilePath, c.Name, configs) if err != nil { panic(err) } diff --git a/cmd/release_config/release_config_lib/flag_artifact.go b/cmd/release_config/release_config_lib/flag_artifact.go index 6d365952c..ad964e17f 100644 --- a/cmd/release_config/release_config_lib/flag_artifact.go +++ b/cmd/release_config/release_config_lib/flag_artifact.go @@ -82,6 +82,15 @@ func FlagArtifactsFactory(artifactsPath string) *FlagArtifacts { return &ret } +func (fas *FlagArtifacts) SortedFlagNames() []string { + var names []string + for k, _ := range *fas { + names = append(names, k) + } + slices.Sort(names) + return names +} + func (fa *FlagArtifact) GenerateFlagDeclarationArtifact() *rc_proto.FlagDeclarationArtifact { ret := &rc_proto.FlagDeclarationArtifact{ Name: fa.FlagDeclaration.Name, diff --git a/cmd/release_config/release_config_lib/release_config.go b/cmd/release_config/release_config_lib/release_config.go index 02b693c78..f0ce1bb67 100644 --- a/cmd/release_config/release_config_lib/release_config.go +++ b/cmd/release_config/release_config_lib/release_config.go @@ -17,6 +17,7 @@ package release_config_lib import ( "cmp" "fmt" + "os" "path/filepath" "regexp" "slices" @@ -169,8 +170,12 @@ func (config *ReleaseConfig) GenerateReleaseConfig(configs *ReleaseConfigs) erro if err != nil { return err } - iConfig.GenerateReleaseConfig(configs) - if err := config.InheritConfig(iConfig); err != nil { + err = iConfig.GenerateReleaseConfig(configs) + if err != nil { + return err + } + err = config.InheritConfig(iConfig) + if err != nil { return err } } @@ -310,6 +315,74 @@ func (config *ReleaseConfig) GenerateReleaseConfig(configs *ReleaseConfigs) erro return nil } +// Write the makefile for this targetRelease. +func (config *ReleaseConfig) WriteMakefile(outFile, targetRelease string, configs *ReleaseConfigs) error { + makeVars := make(map[string]string) + + myFlagArtifacts := config.FlagArtifacts.Clone() + // Sort the flags by name first. + names := myFlagArtifacts.SortedFlagNames() + partitions := make(map[string][]string) + + vNames := []string{} + addVar := func(name, suffix, value string) { + fullName := fmt.Sprintf("_ALL_RELEASE_FLAGS.%s.%s", name, suffix) + vNames = append(vNames, fullName) + makeVars[fullName] = value + } + + for _, name := range names { + flag := myFlagArtifacts[name] + decl := flag.FlagDeclaration + + for _, container := range decl.Containers { + partitions[container] = append(partitions[container], name) + } + value := MarshalValue(flag.Value) + makeVars[name] = value + addVar(name, "TYPE", ValueType(flag.Value)) + addVar(name, "PARTITIONS", strings.Join(decl.Containers, " ")) + addVar(name, "DEFAULT", MarshalValue(decl.Value)) + addVar(name, "VALUE", value) + addVar(name, "DECLARED_IN", *flag.Traces[0].Source) + addVar(name, "SET_IN", *flag.Traces[len(flag.Traces)-1].Source) + addVar(name, "NAMESPACE", *decl.Namespace) + } + pNames := []string{} + for k := range partitions { + pNames = append(pNames, k) + } + slices.Sort(pNames) + + // Now sort the make variables, and output them. + slices.Sort(vNames) + + // Write the flags as: + // _ALL_RELELASE_FLAGS + // _ALL_RELEASE_FLAGS.PARTITIONS.* + // all _ALL_RELEASE_FLAGS.*, sorted by name + // Final flag values, sorted by name. + data := fmt.Sprintf("# TARGET_RELEASE=%s\n", config.Name) + if targetRelease != config.Name { + data += fmt.Sprintf("# User specified TARGET_RELEASE=%s\n", targetRelease) + } + // As it stands this list is not per-product, but conceptually it is, and will be. + data += fmt.Sprintf("ALL_RELEASE_CONFIGS_FOR_PRODUCT :=$= %s\n", strings.Join(configs.GetAllReleaseNames(), " ")) + data += fmt.Sprintf("_used_files := %s\n", strings.Join(config.GetSortedFileList(), " ")) + data += fmt.Sprintf("_ALL_RELEASE_FLAGS :=$= %s\n", strings.Join(names, " ")) + for _, pName := range pNames { + data += fmt.Sprintf("_ALL_RELEASE_FLAGS.PARTITIONS.%s :=$= %s\n", pName, strings.Join(partitions[pName], " ")) + } + for _, vName := range vNames { + data += fmt.Sprintf("%s :=$= %s\n", vName, makeVars[vName]) + } + data += "\n\n# Values for all build flags\n" + for _, name := range names { + data += fmt.Sprintf("%s :=$= %s\n", name, makeVars[name]) + } + return os.WriteFile(outFile, []byte(data), 0644) +} + func (config *ReleaseConfig) WritePartitionBuildFlags(outDir string) error { var err error for partition, flags := range config.PartitionBuildFlags { diff --git a/cmd/release_config/release_config_lib/release_configs.go b/cmd/release_config/release_config_lib/release_configs.go index 052cde898..f2e138801 100644 --- a/cmd/release_config/release_config_lib/release_configs.go +++ b/cmd/release_config/release_config_lib/release_configs.go @@ -395,94 +395,10 @@ func (configs *ReleaseConfigs) GetAllReleaseNames() []string { allReleaseNames = append(allReleaseNames, v.Name) allReleaseNames = append(allReleaseNames, v.OtherNames...) } - slices.SortFunc(allReleaseNames, func(a, b string) int { - return cmp.Compare(a, b) - }) + slices.Sort(allReleaseNames) return allReleaseNames } -// Write the makefile for this targetRelease. -func (configs *ReleaseConfigs) WriteMakefile(outFile, targetRelease string) error { - makeVars := make(map[string]string) - config, err := configs.GetReleaseConfig(targetRelease) - if err != nil { - return err - } - - myFlagArtifacts := config.FlagArtifacts.Clone() - // Sort the flags by name first. - names := []string{} - for k, _ := range myFlagArtifacts { - names = append(names, k) - } - slices.SortFunc(names, func(a, b string) int { - return cmp.Compare(a, b) - }) - partitions := make(map[string][]string) - - vNames := []string{} - addVar := func(name, suffix, value string) { - fullName := fmt.Sprintf("_ALL_RELEASE_FLAGS.%s.%s", name, suffix) - vNames = append(vNames, fullName) - makeVars[fullName] = value - } - - for _, name := range names { - flag := myFlagArtifacts[name] - decl := flag.FlagDeclaration - - for _, container := range decl.Containers { - partitions[container] = append(partitions[container], name) - } - value := MarshalValue(flag.Value) - makeVars[name] = value - addVar(name, "TYPE", ValueType(flag.Value)) - addVar(name, "PARTITIONS", strings.Join(decl.Containers, " ")) - addVar(name, "DEFAULT", MarshalValue(decl.Value)) - addVar(name, "VALUE", value) - addVar(name, "DECLARED_IN", *flag.Traces[0].Source) - addVar(name, "SET_IN", *flag.Traces[len(flag.Traces)-1].Source) - addVar(name, "NAMESPACE", *decl.Namespace) - } - pNames := []string{} - for k := range partitions { - pNames = append(pNames, k) - } - slices.SortFunc(pNames, func(a, b string) int { - return cmp.Compare(a, b) - }) - - // Now sort the make variables, and output them. - slices.SortFunc(vNames, func(a, b string) int { - return cmp.Compare(a, b) - }) - - // Write the flags as: - // _ALL_RELELASE_FLAGS - // _ALL_RELEASE_FLAGS.PARTITIONS.* - // all _ALL_RELEASE_FLAGS.*, sorted by name - // Final flag values, sorted by name. - data := fmt.Sprintf("# TARGET_RELEASE=%s\n", config.Name) - if targetRelease != config.Name { - data += fmt.Sprintf("# User specified TARGET_RELEASE=%s\n", targetRelease) - } - // As it stands this list is not per-product, but conceptually it is, and will be. - data += fmt.Sprintf("ALL_RELEASE_CONFIGS_FOR_PRODUCT :=$= %s\n", strings.Join(configs.GetAllReleaseNames(), " ")) - data += fmt.Sprintf("_used_files := %s\n", strings.Join(config.GetSortedFileList(), " ")) - data += fmt.Sprintf("_ALL_RELEASE_FLAGS :=$= %s\n", strings.Join(names, " ")) - for _, pName := range pNames { - data += fmt.Sprintf("_ALL_RELEASE_FLAGS.PARTITIONS.%s :=$= %s\n", pName, strings.Join(partitions[pName], " ")) - } - for _, vName := range vNames { - data += fmt.Sprintf("%s :=$= %s\n", vName, makeVars[vName]) - } - data += "\n\n# Values for all build flags\n" - for _, name := range names { - data += fmt.Sprintf("%s :=$= %s\n", name, makeVars[name]) - } - return os.WriteFile(outFile, []byte(data), 0644) -} - func (configs *ReleaseConfigs) GenerateReleaseConfigs(targetRelease string) error { otherNames := make(map[string][]string) for aliasName, aliasTarget := range configs.Aliases { diff --git a/java/base.go b/java/base.go index 1a6584bfb..49214d842 100644 --- a/java/base.go +++ b/java/base.go @@ -2544,7 +2544,7 @@ func collectDirectDepsProviders(ctx android.ModuleContext) (result *JarJarProvid case Implementation: return RenameUseInclude, "info" default: - //fmt.Printf("LJ: %v -> %v StubsLinkType unknown\n", module, m) + //fmt.Printf("collectDirectDepsProviders: %v -> %v StubsLinkType unknown\n", module, m) // Fall through to the heuristic logic. } switch reflect.TypeOf(m).String() {