| #!/bin/bash |
| |
| set -o pipefail |
| |
| # This test exercises mixed builds where Soong and Bazel cooperate in building |
| # Android. |
| # |
| # When the execroot is deleted, the Bazel server process will automatically |
| # terminate itself. |
| |
| source "$(dirname "$0")/lib.sh" |
| |
| function test_bazel_smoke { |
| setup |
| |
| run_soong bp2build |
| |
| run_bazel info --config=bp2build |
| } |
| |
| function test_add_irrelevant_file { |
| setup |
| |
| mkdir -p soong_tests/a/b |
| touch soong_tests/a/b/c.txt |
| cat > soong_tests/a/b/Android.bp <<'EOF' |
| filegroup { |
| name: "c", |
| srcs: ["c.txt"], |
| bazel_module: { bp2build_available: true }, |
| } |
| EOF |
| |
| run_soong --bazel-mode-staging nothing |
| |
| if [[ ! -e out/soong/bp2build/soong_tests/a/b/BUILD.bazel ]]; then |
| fail "BUILD.bazel not created" |
| fi |
| |
| if [[ ! -e out/soong/build.ninja ]]; then |
| fail "build.ninja not created" |
| fi |
| |
| local mtime_build1=$(stat -c "%y" out/soong/bp2build/soong_tests/a/b/BUILD.bazel) |
| local mtime_ninja1=$(stat -c "%y" out/soong/build.ninja) |
| |
| touch soong_tests/a/irrelevant.txt |
| |
| run_soong --bazel-mode-staging nothing |
| local mtime_build2=$(stat -c "%y" out/soong/bp2build/soong_tests/a/b/BUILD.bazel) |
| local mtime_ninja2=$(stat -c "%y" out/soong/build.ninja) |
| |
| if [[ "$mtime_build1" != "$mtime_build2" ]]; then |
| fail "BUILD.bazel was generated" |
| fi |
| |
| if [[ "$mtime_ninja1" != "$mtime_ninja2" ]]; then |
| fail "build.ninja was regenerated" |
| fi |
| |
| if [[ ! -e out/soong/workspace/soong_tests/a/irrelevant.txt ]]; then |
| fail "new file was not symlinked" |
| fi |
| } |
| |
| function test_force_enabled_modules { |
| setup |
| # b/273910287 - test force enable modules |
| mkdir -p soong_tests/a/b |
| cat > soong_tests/a/b/Android.bp <<'EOF' |
| genrule { |
| name: "touch-file", |
| out: ["fake-out.txt"], |
| cmd: "touch $(out)", |
| bazel_module: { bp2build_available: true }, |
| } |
| |
| genrule { |
| name: "unenabled-touch-file", |
| out: ["fake-out2.txt"], |
| cmd: "touch $(out)", |
| bazel_module: { bp2build_available: false }, |
| } |
| EOF |
| run_soong --bazel-mode-staging --bazel-force-enabled-modules=touch-file nothing |
| local bazel_contained=`grep out/soong/.intermediates/soong_tests/a/b/touch-file/gen/fake-out.txt out/soong/build.ninja` |
| if [[ $bazel_contained == '' ]]; then |
| fail "Bazel actions not found for force-enabled module" |
| fi |
| |
| unused=`run_soong --bazel-force-enabled-modules=unenabled-touch-file --ensure-allowlist-integrity nothing >/dev/null` |
| |
| if [[ $? -ne 1 ]]; then |
| fail "Expected failure due to force-enabling an unenabled module " |
| fi |
| } |
| |
| |
| scan_and_run_tests |