Add support for PRODUCT_RELEASE_CONFIG_MAPS
This allows product config to determine what build flags are present in a product's build, as well as their value. As product config moves to a declarative specification, this can be handled with less unnecessary work. Bug: b/302593603 Bug: b/308849337 Test: manual Change-Id: If57622059bb7d1c33df7498321db621c0c2d30c0
This commit is contained in:
@@ -31,6 +31,7 @@ import (
|
||||
"time"
|
||||
|
||||
"android/soong/shared"
|
||||
"android/soong/ui/metrics"
|
||||
|
||||
"google.golang.org/protobuf/proto"
|
||||
|
||||
@@ -465,6 +466,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) {
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user