summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--android/bazel_handler.go15
-rw-r--r--tests/lib.sh7
2 files changed, 22 insertions, 0 deletions
diff --git a/android/bazel_handler.go b/android/bazel_handler.go
index fd4b5ef1b..fda8a2251 100644
--- a/android/bazel_handler.go
+++ b/android/bazel_handler.go
@@ -22,6 +22,7 @@ import (
"os"
"path"
"path/filepath"
+ "regexp"
"runtime"
"sort"
"strings"
@@ -1054,9 +1055,23 @@ var (
func GetBazelSandwichCqueryRequests(config Config) ([]cqueryKey, error) {
result := make([]cqueryKey, 0, len(allowlists.BazelSandwichTargets))
+ labelRegex := regexp.MustCompile("^@?//([a-zA-Z0-9/_-]+):[a-zA-Z0-9_-]+$")
// Note that bazel "targets" are different from soong "targets", the bazel targets are
// synonymous with soong modules, and soong targets are a configuration a module is built in.
for _, target := range allowlists.BazelSandwichTargets {
+ match := labelRegex.FindStringSubmatch(target.Label)
+ if match == nil {
+ return nil, fmt.Errorf("invalid label, must match `^@?//([a-zA-Z0-9/_-]+):[a-zA-Z0-9_-]+$`: %s", target.Label)
+ }
+ if _, err := os.Stat(absolutePath(match[1])); err != nil {
+ if os.IsNotExist(err) {
+ // Ignore bazel sandwich targets that don't exist.
+ continue
+ } else {
+ return nil, err
+ }
+ }
+
var soongTarget Target
if target.Host {
soongTarget = config.BuildOSTarget
diff --git a/tests/lib.sh b/tests/lib.sh
index 40b317b06..f337c7457 100644
--- a/tests/lib.sh
+++ b/tests/lib.sh
@@ -52,6 +52,10 @@ function copy_directory {
cp -R "$REAL_TOP/$dir" "$MOCK_TOP/$parent"
}
+function delete_directory {
+ rm -rf "$MOCK_TOP/$1"
+}
+
function symlink_file {
local file="$1"
@@ -138,6 +142,9 @@ function create_mock_bazel {
copy_directory build/bazel
copy_directory build/bazel_common_rules
+ # This requires pulling more tools into the mock top to build partitions
+ delete_directory build/bazel/examples/partitions
+
symlink_directory packages/modules/common/build
symlink_directory prebuilts/bazel
symlink_directory prebuilts/clang