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

Commit 2e557296 authored by LaMont Jones's avatar LaMont Jones Committed by Gerrit Code Review
Browse files

Merge "Readd support for PRODUCT_RELEASE_CONFIG_MAPS" into main

parents 29f5f257 9a912861
Loading
Loading
Loading
Loading
+18 −6
Original line number Diff line number Diff line
@@ -182,8 +182,12 @@ func main() {
		CriticalPath: criticalPath,
	}}

	freshConfig := func() build.Config {
		config := c.config(buildCtx, args...)
		config.SetLogsPrefix(c.logsPrefix)
		return config
	}
	config := freshConfig()
	logsDir := config.LogsDir()
	buildStarted = config.BuildStartedTimeOrDefault(buildStarted)

@@ -213,6 +217,15 @@ func main() {
		log.Verbosef("  [%d] %s", i, arg)
	}

	// We need to call preProductConfigSetup before we can do product config, which is how we get
	// PRODUCT_CONFIG_RELEASE_MAPS set for the final product config for the build.
	// When product config uses a declarative language, we won't need to rerun product config.
	preProductConfigSetup(buildCtx, config)
	if build.SetProductReleaseConfigMaps(buildCtx, config) {
		log.Verbose("Product release config maps found\n")
		config = freshConfig()
	}

	defer func() {
		stat.Finish()
		criticalPath.WriteToMetrics(met)
@@ -225,7 +238,9 @@ func main() {

}

func logAndSymlinkSetup(buildCtx build.Context, config build.Config) {
// This function must not modify config, since product config may cause us to recreate the config,
// and we won't call this function a second time.
func preProductConfigSetup(buildCtx build.Context, config build.Config) {
	log := buildCtx.ContextImpl.Logger
	logsPrefix := config.GetLogsPrefix()
	build.SetupOutDir(buildCtx, config)
@@ -311,7 +326,6 @@ func removeBadTargetRename(ctx build.Context, config build.Config) {
}

func dumpVar(ctx build.Context, config build.Config, args []string) {
	logAndSymlinkSetup(ctx, config)
	flags := flag.NewFlagSet("dumpvar", flag.ExitOnError)
	flags.SetOutput(ctx.Writer)

@@ -364,7 +378,6 @@ func dumpVar(ctx build.Context, config build.Config, args []string) {
}

func dumpVars(ctx build.Context, config build.Config, args []string) {
	logAndSymlinkSetup(ctx, config)

	flags := flag.NewFlagSet("dumpvars", flag.ExitOnError)
	flags.SetOutput(ctx.Writer)
@@ -544,7 +557,6 @@ func buildActionConfig(ctx build.Context, args ...string) build.Config {
}

func runMake(ctx build.Context, config build.Config, _ []string) {
	logAndSymlinkSetup(ctx, config)
	logsDir := config.LogsDir()
	if config.IsVerbose() {
		writer := ctx.Writer
+37 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import (
	"time"

	"android/soong/shared"
	"android/soong/ui/metrics"

	"google.golang.org/protobuf/proto"

@@ -461,6 +462,42 @@ func NewBuildActionConfig(action BuildAction, dir string, ctx Context, args ...s
	return NewConfig(ctx, getConfigArgs(action, dir, ctx, args)...)
}

// Prepare for getting make variables.  For them to be accurate, we need to have
// obtained PRODUCT_RELEASE_CONFIG_MAPS.
//
// Returns:
//
//	Whether config should be called again.
//
// TODO: when converting product config to a declarative language, make sure
// that PRODUCT_RELEASE_CONFIG_MAPS is properly handled as a separate step in
// that process.
func SetProductReleaseConfigMaps(ctx Context, config Config) bool {
	ctx.BeginTrace(metrics.RunKati, "SetProductReleaseConfigMaps")
	defer ctx.EndTrace()

	if config.SkipConfig() {
		// This duplicates the logic from Build to skip product config
		// if the user has explicitly said to.
		return false
	}

	releaseConfigVars := []string{
		"PRODUCT_RELEASE_CONFIG_MAPS",
	}

	origValue, _ := config.environ.Get("PRODUCT_RELEASE_CONFIG_MAPS")
	// Get the PRODUCT_RELEASE_CONFIG_MAPS for this product, to avoid polluting the environment
	// when we run product config to get the rest of the make vars.
	releaseMapVars, err := dumpMakeVars(ctx, config, nil, releaseConfigVars, false, "")
	if err != nil {
		ctx.Fatalln("Error getting PRODUCT_RELEASE_CONFIG_MAPS:", err)
	}
	productReleaseConfigMaps := releaseMapVars["PRODUCT_RELEASE_CONFIG_MAPS"]
	os.Setenv("PRODUCT_RELEASE_CONFIG_MAPS", productReleaseConfigMaps)
	return origValue != productReleaseConfigMaps
}

// storeConfigMetrics selects a set of configuration information and store in
// the metrics system for further analysis.
func storeConfigMetrics(ctx Context, config Config) {
+3 −0
Original line number Diff line number Diff line
@@ -191,6 +191,9 @@ func runMakeProductConfig(ctx Context, config Config) {
		"TARGET_BUILD_APPS",
		"TARGET_BUILD_UNBUNDLED",

		// Additional release config maps
		"PRODUCT_RELEASE_CONFIG_MAPS",

		// compiler wrappers set up by make
		"CC_WRAPPER",
		"CXX_WRAPPER",