Generate build-globs.ninja when running bp2build.
This fixes null bp2build builds. When running bp2build, out/soong/.bootstrap/build-globs.ninja wasn't generated, therefore none of the globs in out/soong/.primary/globs have actions to generate them. This makes bp2build always re-run on a null build, because it depends on those non-existent globs in its depfile. Fix the above by generating a build-globs.ninja file with the globs that bp2build encounters during conversion, and add tests to verify that null builds and bp2build -> soong workflows correctly regenerates the build-globs.ninja file. Test: soong integration tests for null soong->soong, bp2build->bp2build and bp2build->soong builds. Fixes: 193650250 Change-Id: Icfbad351dfa85541d1ea451f73e65cac87097926
This commit is contained in:
@@ -469,6 +469,12 @@ func runBp2Build(configuration android.Config, extraNinjaDeps []string) {
|
||||
ninjaDeps := bootstrap.RunBlueprint(blueprintArgs, bp2buildCtx.Context, configuration)
|
||||
ninjaDeps = append(ninjaDeps, extraNinjaDeps...)
|
||||
|
||||
// Generate out/soong/.bootstrap/build-globs.ninja with the actions to generate flattened globfiles
|
||||
// containing the globs seen during bp2build conversion
|
||||
if blueprintArgs.GlobFile != "" {
|
||||
bootstrap.WriteBuildGlobsNinjaFile(bootstrap.StageMain, bp2buildCtx.Context, blueprintArgs, configuration)
|
||||
}
|
||||
// Add the depfile on the expanded globs in out/soong/.primary/globs
|
||||
ninjaDeps = append(ninjaDeps, bootstrap.GlobFileListFiles(configuration)...)
|
||||
|
||||
// Run the code-generation phase to convert BazelTargetModules to BUILD files
|
||||
|
@@ -8,6 +8,100 @@ source "$(dirname "$0")/lib.sh"
|
||||
|
||||
readonly GENERATED_BUILD_FILE_NAME="BUILD.bazel"
|
||||
|
||||
function test_bp2build_null_build() {
|
||||
setup
|
||||
run_bp2build
|
||||
local output_mtime1=$(stat -c "%y" out/soong/.bootstrap/bp2build_workspace_marker)
|
||||
|
||||
run_bp2build
|
||||
local output_mtime2=$(stat -c "%y" out/soong/.bootstrap/bp2build_workspace_marker)
|
||||
|
||||
if [[ "$output_mtime1" != "$output_mtime2" ]]; then
|
||||
fail "Output bp2build marker file changed on null build"
|
||||
fi
|
||||
}
|
||||
|
||||
test_bp2build_null_build
|
||||
|
||||
function test_bp2build_null_build_with_globs() {
|
||||
setup
|
||||
|
||||
mkdir -p foo/bar
|
||||
cat > foo/bar/Android.bp <<'EOF'
|
||||
filegroup {
|
||||
name: "globs",
|
||||
srcs: ["*.txt"],
|
||||
}
|
||||
EOF
|
||||
touch foo/bar/a.txt foo/bar/b.txt
|
||||
|
||||
run_bp2build
|
||||
local output_mtime1=$(stat -c "%y" out/soong/.bootstrap/bp2build_workspace_marker)
|
||||
|
||||
run_bp2build
|
||||
local output_mtime2=$(stat -c "%y" out/soong/.bootstrap/bp2build_workspace_marker)
|
||||
|
||||
if [[ "$output_mtime1" != "$output_mtime2" ]]; then
|
||||
fail "Output bp2build marker file changed on null build"
|
||||
fi
|
||||
}
|
||||
|
||||
test_bp2build_null_build_with_globs
|
||||
|
||||
function test_soong_after_bp2build_regenerates_build_globs_ninja() {
|
||||
setup
|
||||
|
||||
mkdir -p foo/bar
|
||||
cat > foo/bar/Android.bp <<'EOF'
|
||||
filegroup {
|
||||
name: "bp2build-files",
|
||||
srcs: ["bp2build.*"],
|
||||
bazel_module: { bp2build_available: true },
|
||||
}
|
||||
|
||||
filegroup {
|
||||
name: "soong-files",
|
||||
srcs: ["soong.*"],
|
||||
}
|
||||
EOF
|
||||
touch foo/bar/bp2build.txt foo/bar/soong.txt
|
||||
|
||||
build_globs_file="out/soong/.bootstrap/build-globs.ninja"
|
||||
|
||||
# Test: the build-globs file for bp2build should only contain the bp2build-files
|
||||
# glob, whereas the build-globs file for soong should contain both bp2build-files
|
||||
# and soong-files globs.
|
||||
|
||||
run_bp2build
|
||||
local output_mtime1=$(stat -c "%y" "${build_globs_file}")
|
||||
|
||||
if ! grep "\"foo/bar/bp2build.*\"" "${build_globs_file}"; then
|
||||
fail "bp2build filegroup globs not found in bp2build's globs file"
|
||||
fi
|
||||
|
||||
if grep "\"foo/bar/soong.*\"" "${build_globs_file}"; then
|
||||
fail "soong filegroup globs unexpectedly found in bp2build's globs file"
|
||||
fi
|
||||
|
||||
run_soong
|
||||
local output_mtime2=$(stat -c "%y" "${build_globs_file}")
|
||||
|
||||
if [[ "$output_mtime1" == "$output_mtime2" ]]; then
|
||||
fail "Output build-globs.ninja file did not change"
|
||||
fi
|
||||
|
||||
if ! grep "\"foo/bar/bp2build.*\"" "${build_globs_file}"; then
|
||||
fail "bp2build filegroup globs not found in bp2build's globs file"
|
||||
fi
|
||||
|
||||
if ! grep "\"foo/bar/soong.*\"" "${build_globs_file}"; then
|
||||
fail "soong filegroup globs not found in bp2build's globs file"
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
test_soong_after_bp2build_regenerates_build_globs_ninja
|
||||
|
||||
function test_bp2build_generates_all_buildfiles {
|
||||
setup
|
||||
create_mock_bazel
|
||||
|
Reference in New Issue
Block a user