platform_build_soong/android/defs.go
Colin Cross 8b8bec3b3a Create a highmem pool and put metalava into it
Create a highmem pool based on the total RAM and the number of CPUs,
with an override via the NINJA_HIGHMEM_NUM_JOBS variable.  Put
metalava into the highmem pool.

Ninja does not support nested pools, and when goma or RBE is enabled
the maximum ninja parallelism is set very high with local jobs in a
local pool.  When both the local pool and highmem pool are enabled,
the total number of local jobs will be as high as the sum of the sizes
of the two pools.  Keep the highmem pool limited to 1/16th of the
local pool when remote builds are enabled to try to minimize the
effect while still limiting highmem jobs.

Fixes: 142644983
Test: m nothing, examine pools
Test: m USE_GOMA=true nothing, examine pools
Change-Id: Id79f11f44948992960ac34ecf831dacbe21bd332
2020-01-24 11:44:23 -08:00

109 lines
3.3 KiB
Go

// Copyright 2015 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package android
import (
"github.com/google/blueprint"
_ "github.com/google/blueprint/bootstrap"
)
var (
pctx = NewPackageContext("android/soong/android")
cpPreserveSymlinks = pctx.VariableConfigMethod("cpPreserveSymlinks",
Config.CpPreserveSymlinksFlags)
// A phony rule that is not the built-in Ninja phony rule. The built-in
// phony rule has special behavior that is sometimes not desired. See the
// Ninja docs for more details.
Phony = pctx.AndroidStaticRule("Phony",
blueprint.RuleParams{
Command: "# phony $out",
Description: "phony $out",
})
// GeneratedFile is a rule for indicating that a given file was generated
// while running soong. This allows the file to be cleaned up if it ever
// stops being generated by soong.
GeneratedFile = pctx.AndroidStaticRule("GeneratedFile",
blueprint.RuleParams{
Command: "# generated $out",
Description: "generated $out",
Generator: true,
})
// A copy rule.
Cp = pctx.AndroidStaticRule("Cp",
blueprint.RuleParams{
Command: "rm -f $out && cp $cpPreserveSymlinks $cpFlags $in $out",
Description: "cp $out",
},
"cpFlags")
CpExecutable = pctx.AndroidStaticRule("CpExecutable",
blueprint.RuleParams{
Command: "rm -f $out && cp $cpPreserveSymlinks $cpFlags $in $out && chmod +x $out",
Description: "cp $out",
},
"cpFlags")
// A timestamp touch rule.
Touch = pctx.AndroidStaticRule("Touch",
blueprint.RuleParams{
Command: "touch $out",
Description: "touch $out",
})
// A symlink rule.
Symlink = pctx.AndroidStaticRule("Symlink",
blueprint.RuleParams{
Command: "ln -f -s $fromPath $out",
Description: "symlink $out",
},
"fromPath")
ErrorRule = pctx.AndroidStaticRule("Error",
blueprint.RuleParams{
Command: `echo "$error" && false`,
Description: "error building $out",
},
"error")
Cat = pctx.AndroidStaticRule("Cat",
blueprint.RuleParams{
Command: "cat $in > $out",
Description: "concatenate licenses $out",
})
// ubuntu 14.04 offcially use dash for /bin/sh, and its builtin echo command
// doesn't support -e option. Therefore we force to use /bin/bash when writing out
// content to file.
WriteFile = pctx.AndroidStaticRule("WriteFile",
blueprint.RuleParams{
Command: "/bin/bash -c 'echo -e $$0 > $out' '$content'",
Description: "writing file $out",
},
"content")
// Used only when USE_GOMA=true is set, to restrict non-goma jobs to the local parallelism value
localPool = blueprint.NewBuiltinPool("local_pool")
// Used for processes that need significant RAM to ensure there are not too many running in parallel.
highmemPool = blueprint.NewBuiltinPool("highmem_pool")
)
func init() {
pctx.Import("github.com/google/blueprint/bootstrap")
}