Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f4cc08e1 authored by LaMont Jones's avatar LaMont Jones
Browse files

Write per-partition build_flags.json

Create build_flags_{partition}-{TARGET_PRODUCT}-{TARGET_RELEASE}.json
in {OUT_DIR}/soong/release-config.

Bug: 328495189
Test: manual
Change-Id: I708c37f9b1216b4283886c98cacaf66bfcd28143
parent 15788829
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -72,6 +72,11 @@ func main() {
	if err != nil {
		panic(err)
	}

	if err = config.WritePartitionBuildFlags(outputDir, product, targetRelease); err != nil {
		panic(err)
	}

	if allMake {
		for k, _ := range configs.ReleaseConfigs {
			makefilePath := filepath.Join(outputDir, fmt.Sprintf("release_config-%s-%s.mk", product, k))
+11 −0
Original line number Diff line number Diff line
@@ -129,3 +129,14 @@ func (fa *FlagArtifact) Marshal() (*rc_proto.FlagArtifact, error) {
		Traces:          fa.Traces,
	}, nil
}

// Marshal the FlagArtifact without Traces.
func (fa *FlagArtifact) MarshalWithoutTraces() (*rc_proto.FlagArtifact, error) {
	if fa.Redacted {
		return nil, nil
	}
	return &rc_proto.FlagArtifact{
		FlagDeclaration: fa.FlagDeclaration,
		Value:           fa.Value,
	}, nil
}
+47 −0
Original line number Diff line number Diff line
@@ -15,7 +15,10 @@
package release_config_lib

import (
	"cmp"
	"fmt"
	"path/filepath"
	"slices"
	"sort"
	"strings"

@@ -67,6 +70,9 @@ type ReleaseConfig struct {

	// We have begun compiling this release config.
	compileInProgress bool

	// Partitioned artifacts for {partition}/etc/build_flags.json
	PartitionBuildFlags map[string]*rc_proto.FlagArtifacts
}

func ReleaseConfigFactory(name string, index int) (c *ReleaseConfig) {
@@ -206,6 +212,34 @@ func (config *ReleaseConfig) GenerateReleaseConfig(configs *ReleaseConfigs) erro
		}
	}

	// Now build the per-partition artifacts
	config.PartitionBuildFlags = make(map[string]*rc_proto.FlagArtifacts)
	addPartitionArtifact := func(container string, artifact *rc_proto.FlagArtifact) {
		if _, ok := config.PartitionBuildFlags[container]; !ok {
			config.PartitionBuildFlags[container] = &rc_proto.FlagArtifacts{}
		}
		config.PartitionBuildFlags[container].FlagArtifacts = append(config.PartitionBuildFlags[container].FlagArtifacts, artifact)
	}
	for _, v := range config.FlagArtifacts {
		container := strings.ToLower(rc_proto.Container_name[int32(v.FlagDeclaration.GetContainer())])
		artifact, err := v.MarshalWithoutTraces()
		if err != nil {
			return err
		}
		switch container {
		case "all":
			for cVal, cName := range rc_proto.Container_name {
				// Skip unspecified, and "ALL", but place the flag in the rest.
				if cVal == 0 || cName == "ALL" {
					continue
				}
				cName = strings.ToLower(cName)
				addPartitionArtifact(cName, artifact)
			}
		default:
			addPartitionArtifact(container, artifact)
		}
	}
	config.ReleaseConfigArtifact = &rc_proto.ReleaseConfigArtifact{
		Name:       proto.String(config.Name),
		OtherNames: config.OtherNames,
@@ -234,3 +268,16 @@ func (config *ReleaseConfig) GenerateReleaseConfig(configs *ReleaseConfigs) erro
	config.compileInProgress = false
	return nil
}

func (config *ReleaseConfig) WritePartitionBuildFlags(outDir, product, targetRelease string) error {
	var err error
	for partition, flags := range config.PartitionBuildFlags {
		slices.SortFunc(flags.FlagArtifacts, func(a, b *rc_proto.FlagArtifact) int {
			return cmp.Compare(*a.FlagDeclaration.Name, *b.FlagDeclaration.Name)
		})
		if err = WriteMessage(filepath.Join(outDir, fmt.Sprintf("build_flags_%s-%s-%s.json", partition, config.Name, product)), flags); err != nil {
			return err
		}
	}
	return nil
}
+147 −79

File changed.

Preview size limit exceeded, changes collapsed.

+5 −0
Original line number Diff line number Diff line
@@ -52,6 +52,11 @@ message flag_artifact {
  repeated tracepoint traces = 8;
}

message flag_artifacts {
  // The artifacts
  repeated flag_artifact flag_artifacts = 1;
}

message release_config_artifact {
  // The name of the release config.
  // See # name for format detail