Remove the out/soong/.bootstrap directory.

It's better not to have state hidden in dotfiles (or rather,
dotdirectories) if we can help.

It's questionable whether the "linux-x86" path segment makes sense since
soong_build only ever runs on one operating system, but I didn't want to
rock the boat now.

Drive-by fixed some quoting fixes in rbc-run. Notably, I didn't wrap
`$@` into double quotes because I don't know whether the lack of double
quotes was intended or not.

Also drive-by fixed the fact that "out/soong" was added twice to the
directory name of bpglob. This turned out not to be a problem because
bpglob doesn't need to be explicitly built: if it's needed, it's
declared as an input of the glob files so it'll be built automatically
(at the cost of the first "null build" not actually being a null build)

Test: Presubmits.
Change-Id: I710d8d16cd8212059a0ca1ee95378505303eed83
This commit is contained in:
Lukacs T. Berki 2021-11-02 14:42:04 +01:00
parent 9de51af72c
commit 90b4334a64
7 changed files with 49 additions and 42 deletions

View file

@ -4,12 +4,26 @@
# that will be passed to rbcrun.
[[ $# -gt 0 && -f "$1" ]] || { echo "Usage: ${0##*/} product.mk [Additional rbcrun arguments]" >&2; exit 1; }
set -eu
declare -r output_root=${OUT_DIR:-out}
declare -r runner="$output_root/soong/.bootstrap/bin/rbcrun"
declare -r converter="$output_root/soong/.bootstrap/bin/mk2rbc"
declare -r launcher=$output_root/launchers/run.rbc
declare -r makefile=$1
shift
$converter -mode=write -r --outdir $output_root --launcher=$launcher $makefile
$runner RBC_OUT="make,global" RBC_DEBUG="${RBC_DEBUG:-}" $@ $launcher
case $(uname -s) in
Linux)
declare -r os="linux-x86";
;;
Darwin)
declare -r os="darwin-x86";
;;
*)
echo "Unknown OS: $(uname -s)" >&2;
exit 1;
;;
esac
declare -r output_root="${OUT_DIR:-out}"
declare -r runner="${output_root}/soong/host/${os}/bin/rbcrun"
declare -r converter="${output_root}/soong/host/${os}/bin/mk2rbc"
declare -r launcher="$output_root/launchers/run.rbc"
declare -r makefile="$1"
shift
"$converter" -mode=write -r --outdir "$output_root" --launcher="$launcher" "$makefile"
"$runner" RBC_OUT="make,global" RBC_DEBUG="${RBC_DEBUG:-}" $@ "$launcher"

View file

@ -17,10 +17,10 @@ function test_smoke {
function test_null_build() {
setup
run_soong
local bootstrap_mtime1=$(stat -c "%y" out/soong/.bootstrap/build.ninja)
local bootstrap_mtime1=$(stat -c "%y" out/soong/bootstrap.ninja)
local output_mtime1=$(stat -c "%y" out/soong/build.ninja)
run_soong
local bootstrap_mtime2=$(stat -c "%y" out/soong/.bootstrap/build.ninja)
local bootstrap_mtime2=$(stat -c "%y" out/soong/bootstrap.ninja)
local output_mtime2=$(stat -c "%y" out/soong/build.ninja)
if [[ "$bootstrap_mtime1" == "$bootstrap_mtime2" ]]; then
@ -36,12 +36,12 @@ function test_null_build() {
function test_soong_build_rebuilt_if_blueprint_changes() {
setup
run_soong
local mtime1=$(stat -c "%y" out/soong/.bootstrap/build.ninja)
local mtime1=$(stat -c "%y" out/soong/bootstrap.ninja)
sed -i 's/pluginGenSrcCmd/pluginGenSrcCmd2/g' build/blueprint/bootstrap/bootstrap.go
run_soong
local mtime2=$(stat -c "%y" out/soong/.bootstrap/build.ninja)
local mtime2=$(stat -c "%y" out/soong/bootstrap.ninja)
if [[ "$mtime1" == "$mtime2" ]]; then
fail "Bootstrap Ninja file did not change"
@ -541,7 +541,7 @@ EOF
function test_bp2build_smoke {
setup
run_soong bp2build
[[ -e out/soong/.bootstrap/bp2build_workspace_marker ]] || fail "bp2build marker file not created"
[[ -e out/soong/bp2build_workspace_marker ]] || fail "bp2build marker file not created"
[[ -e out/soong/workspace ]] || fail "Bazel workspace not created"
}
@ -551,7 +551,7 @@ function test_bp2build_generates_marker_file {
run_soong bp2build
if [[ ! -f "./out/soong/.bootstrap/bp2build_workspace_marker" ]]; then
if [[ ! -f "./out/soong/bp2build_workspace_marker" ]]; then
fail "Marker file was not generated"
fi
}
@ -592,10 +592,10 @@ function test_bp2build_null_build {
setup
run_soong bp2build
local mtime1=$(stat -c "%y" out/soong/.bootstrap/bp2build_workspace_marker)
local mtime1=$(stat -c "%y" out/soong/bp2build_workspace_marker)
run_soong bp2build
local mtime2=$(stat -c "%y" out/soong/.bootstrap/bp2build_workspace_marker)
local mtime2=$(stat -c "%y" out/soong/bp2build_workspace_marker)
if [[ "$mtime1" != "$mtime2" ]]; then
fail "Output Ninja file changed on null build"
@ -626,7 +626,7 @@ EOF
function test_multiple_soong_build_modes() {
setup
run_soong json-module-graph bp2build nothing
if [[ ! -f "out/soong/.bootstrap/bp2build_workspace_marker" ]]; then
if [[ ! -f "out/soong/bp2build_workspace_marker" ]]; then
fail "bp2build marker file was not generated"
fi
@ -780,11 +780,11 @@ function test_bp2build_back_and_forth_null_build {
fail "Output Ninja file changed when switching to bp2build"
fi
local marker_mtime1=$(stat -c "%y" out/soong/.bootstrap/bp2build_workspace_marker)
local marker_mtime1=$(stat -c "%y" out/soong/bp2build_workspace_marker)
run_soong
local output_mtime3=$(stat -c "%y" out/soong/build.ninja)
local marker_mtime2=$(stat -c "%y" out/soong/.bootstrap/bp2build_workspace_marker)
local marker_mtime2=$(stat -c "%y" out/soong/bp2build_workspace_marker)
if [[ "$output_mtime1" != "$output_mtime3" ]]; then
fail "Output Ninja file changed when switching to regular build from bp2build"
fi
@ -794,7 +794,7 @@ function test_bp2build_back_and_forth_null_build {
run_soong bp2build
local output_mtime4=$(stat -c "%y" out/soong/build.ninja)
local marker_mtime3=$(stat -c "%y" out/soong/.bootstrap/bp2build_workspace_marker)
local marker_mtime3=$(stat -c "%y" out/soong/bp2build_workspace_marker)
if [[ "$output_mtime1" != "$output_mtime4" ]]; then
fail "Output Ninja file changed when switching back to bp2build"
fi

View file

@ -11,10 +11,10 @@ readonly GENERATED_BUILD_FILE_NAME="BUILD.bazel"
function test_bp2build_null_build() {
setup
run_soong bp2build
local output_mtime1=$(stat -c "%y" out/soong/.bootstrap/bp2build_workspace_marker)
local output_mtime1=$(stat -c "%y" out/soong/bp2build_workspace_marker)
run_soong bp2build
local output_mtime2=$(stat -c "%y" out/soong/.bootstrap/bp2build_workspace_marker)
local output_mtime2=$(stat -c "%y" out/soong/bp2build_workspace_marker)
if [[ "$output_mtime1" != "$output_mtime2" ]]; then
fail "Output bp2build marker file changed on null build"
@ -36,10 +36,10 @@ EOF
touch foo/bar/a.txt foo/bar/b.txt
run_soong bp2build
local output_mtime1=$(stat -c "%y" out/soong/.bootstrap/bp2build_workspace_marker)
local output_mtime1=$(stat -c "%y" out/soong/bp2build_workspace_marker)
run_soong bp2build
local output_mtime2=$(stat -c "%y" out/soong/.bootstrap/bp2build_workspace_marker)
local output_mtime2=$(stat -c "%y" out/soong/bp2build_workspace_marker)
if [[ "$output_mtime1" != "$output_mtime2" ]]; then
fail "Output bp2build marker file changed on null build"

View file

@ -784,12 +784,13 @@ func (c *configImpl) PrebuiltOS() string {
panic("Unknown GOOS")
}
}
func (c *configImpl) HostToolDir() string {
return filepath.Join(c.SoongOutDir(), "host", c.PrebuiltOS(), "bin")
}
func (c *configImpl) NamedGlobFile(name string) string {
return shared.JoinPath(c.SoongOutDir(), ".bootstrap/build-globs."+name+".ninja")
return shared.JoinPath(c.SoongOutDir(), "globs-"+name+".ninja")
}
func (c *configImpl) UsedEnvFile(tag string) string {
@ -797,7 +798,7 @@ func (c *configImpl) UsedEnvFile(tag string) string {
}
func (c *configImpl) Bp2BuildMarkerFile() string {
return shared.JoinPath(c.SoongOutDir(), ".bootstrap/bp2build_workspace_marker")
return shared.JoinPath(c.SoongOutDir(), "bp2build_workspace_marker")
}
func (c *configImpl) SoongDocsHtml() string {

View file

@ -263,9 +263,9 @@ func runMakeProductConfig(ctx Context, config Config) {
}, exportEnvVars...), BannerVars...)
// We need Roboleaf converter and runner in the mixed mode
runMicrofactory(ctx, config, ".bootstrap/bin/mk2rbc", "android/soong/mk2rbc/cmd",
runMicrofactory(ctx, config, "mk2rbc", "android/soong/mk2rbc/cmd",
map[string]string{"android/soong": "build/soong"})
runMicrofactory(ctx, config, ".bootstrap/bin/rbcrun", "rbcrun/cmd",
runMicrofactory(ctx, config, "rbcrun", "rbcrun/cmd",
map[string]string{"go.starlark.net": "external/starlark-go", "rbcrun": "build/make/tools/rbcrun"})
makeVars, err := dumpMakeVars(ctx, config, config.Arguments(), allVars, true, "")

View file

@ -292,7 +292,7 @@ func bootstrapBlueprint(ctx Context, config Config) {
var blueprintArgs bootstrap.Args
blueprintArgs.ModuleListFile = filepath.Join(config.FileListDir(), "Android.bp.list")
blueprintArgs.OutFile = shared.JoinPath(config.SoongOutDir(), ".bootstrap/build.ninja")
blueprintArgs.OutFile = shared.JoinPath(config.SoongOutDir(), "bootstrap.ninja")
blueprintArgs.EmptyNinjaFile = false
blueprintCtx := blueprint.NewContext()
@ -314,7 +314,7 @@ func bootstrapBlueprint(ctx Context, config Config) {
}
bootstrapDeps := bootstrap.RunBlueprint(blueprintArgs, bootstrap.DoEverything, blueprintCtx, blueprintConfig)
bootstrapDepFile := shared.JoinPath(config.SoongOutDir(), ".bootstrap/build.ninja.d")
bootstrapDepFile := shared.JoinPath(config.SoongOutDir(), "bootstrap.ninja.d")
err := deptools.WriteDepFile(bootstrapDepFile, blueprintArgs.OutFile, bootstrapDeps)
if err != nil {
ctx.Fatalf("Error writing depfile '%s': %s", bootstrapDepFile, err)
@ -342,11 +342,6 @@ func runSoong(ctx Context, config Config) {
// unused variables were changed?
envFile := filepath.Join(config.SoongOutDir(), availableEnvFile)
dir := filepath.Join(config.SoongOutDir(), ".bootstrap")
if err := os.MkdirAll(dir, 0755); err != nil {
ctx.Fatalf("Cannot mkdir " + dir)
}
buildMode := config.bazelBuildMode()
integratedBp2Build := buildMode == mixedBuild
@ -457,7 +452,7 @@ func runSoong(ctx Context, config Config) {
targets = append(targets, config.SoongNinjaFile())
}
ninja("bootstrap", ".bootstrap/build.ninja", targets...)
ninja("bootstrap", "bootstrap.ninja", targets...)
var soongBuildMetrics *soong_metrics_proto.SoongBuildMetrics
if shouldCollectBuildSoongMetrics(config) {
@ -477,8 +472,7 @@ func runSoong(ctx Context, config Config) {
}
}
func runMicrofactory(ctx Context, config Config, relExePath string, pkg string, mapping map[string]string) {
name := filepath.Base(relExePath)
func runMicrofactory(ctx Context, config Config, name string, pkg string, mapping map[string]string) {
ctx.BeginTrace(metrics.RunSoong, name)
defer ctx.EndTrace()
cfg := microfactory.Config{TrimPath: absPath(ctx, ".")}
@ -486,7 +480,7 @@ func runMicrofactory(ctx Context, config Config, relExePath string, pkg string,
cfg.Map(pkgPrefix, pathPrefix)
}
exePath := filepath.Join(config.SoongOutDir(), relExePath)
exePath := filepath.Join(config.SoongOutDir(), name)
dir := filepath.Dir(exePath)
if err := os.MkdirAll(dir, 0777); err != nil {
ctx.Fatalf("cannot create %s: %s", dir, err)

View file

@ -63,7 +63,6 @@ func testForDanglingRules(ctx Context, config Config) {
cmd.StartOrFatal()
outDir := config.OutDir()
bootstrapDir := filepath.Join(outDir, "soong", ".bootstrap")
modulePathsDir := filepath.Join(outDir, ".module_paths")
variablesFilePath := filepath.Join(outDir, "soong", "soong.variables")
@ -86,8 +85,7 @@ func testForDanglingRules(ctx Context, config Config) {
// Leaf node is not in the out directory.
continue
}
if strings.HasPrefix(line, bootstrapDir) ||
strings.HasPrefix(line, modulePathsDir) ||
if strings.HasPrefix(line, modulePathsDir) ||
line == variablesFilePath ||
line == dexpreoptConfigFilePath ||
line == buildDatetimeFilePath {