Merge "Readd support for PRODUCT_RELEASE_CONFIG_MAPS" into main am: 2e55729650
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2818662 Change-Id: I2590c27e9b0b22d120d1fe354da7b7b7a7cb2467 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
commit
4f431f919d
3 changed files with 58 additions and 6 deletions
|
@ -182,8 +182,12 @@ func main() {
|
|||
CriticalPath: criticalPath,
|
||||
}}
|
||||
|
||||
config := c.config(buildCtx, args...)
|
||||
config.SetLogsPrefix(c.logsPrefix)
|
||||
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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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",
|
||||
|
|
Loading…
Reference in a new issue