Merge "Make bp2build-generated selects() based on product config build settings" into main
diff --git a/android/bazel.go b/android/bazel.go
index 0d2c777..df30ff2 100644
--- a/android/bazel.go
+++ b/android/bazel.go
@@ -22,6 +22,7 @@
"android/soong/ui/metrics/bp2build_metrics_proto"
"github.com/google/blueprint"
+ "github.com/google/blueprint/bootstrap"
"github.com/google/blueprint/proptools"
"android/soong/android/allowlists"
@@ -426,8 +427,23 @@
return ModuleIncompatibility
}
+func isGoModule(module blueprint.Module) bool {
+ if _, ok := module.(*bootstrap.GoPackage); ok {
+ return true
+ }
+ if _, ok := module.(*bootstrap.GoBinary); ok {
+ return true
+ }
+ return false
+}
+
// ConvertedToBazel returns whether this module has been converted (with bp2build or manually) to Bazel.
func convertedToBazel(ctx BazelConversionContext, module blueprint.Module) bool {
+ // Special-case bootstrap_go_package and bootstrap_go_binary
+ // These do not implement Bazelable, but have been converted
+ if isGoModule(module) {
+ return true
+ }
b, ok := module.(Bazelable)
if !ok {
return false
diff --git a/android/bazel_handler.go b/android/bazel_handler.go
index fd4b5ef..fda8a22 100644
--- a/android/bazel_handler.go
+++ b/android/bazel_handler.go
@@ -22,6 +22,7 @@
"os"
"path"
"path/filepath"
+ "regexp"
"runtime"
"sort"
"strings"
@@ -1054,9 +1055,23 @@
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/android/bazel_paths.go b/android/bazel_paths.go
index 7568543..b08a4ca 100644
--- a/android/bazel_paths.go
+++ b/android/bazel_paths.go
@@ -431,7 +431,7 @@
func BazelModuleLabel(ctx BazelConversionPathContext, module blueprint.Module) string {
// TODO(b/165114590): Convert tag (":name{.tag}") to corresponding Bazel implicit output targets.
- if !convertedToBazel(ctx, module) {
+ if !convertedToBazel(ctx, module) || isGoModule(module) {
return bp2buildModuleLabel(ctx, module)
}
b, _ := module.(Bazelable)
diff --git a/cc/lto.go b/cc/lto.go
index 44361db..df9ca0a 100644
--- a/cc/lto.go
+++ b/cc/lto.go
@@ -135,10 +135,14 @@
ltoLdFlags = append(ltoLdFlags, cachePolicyFormat+policy)
}
- // If the module does not have a profile, be conservative and limit cross TU inline
- // limit to 5 LLVM IR instructions, to balance binary size increase and performance.
- if !ctx.Darwin() && !ctx.isPgoCompile() && !ctx.isAfdoCompile() {
- ltoLdFlags = append(ltoLdFlags, "-Wl,-plugin-opt,-import-instr-limit=5")
+ // Reduce the inlining threshold for a better balance of binary size and
+ // performance.
+ if !ctx.Darwin() {
+ if ctx.isPgoCompile() || ctx.isAfdoCompile() {
+ ltoLdFlags = append(ltoLdFlags, "-Wl,-plugin-opt,-import-instr-limit=40")
+ } else {
+ ltoLdFlags = append(ltoLdFlags, "-Wl,-plugin-opt,-import-instr-limit=5")
+ }
}
flags.Local.CFlags = append(flags.Local.CFlags, ltoCFlags...)
diff --git a/java/aapt2.go b/java/aapt2.go
index 7845a0b..4cff8a7 100644
--- a/java/aapt2.go
+++ b/java/aapt2.go
@@ -150,7 +150,8 @@
`${config.Aapt2Cmd} link -o $out $flags --java $genDir --proguard $proguardOptions ` +
`--output-text-symbols ${rTxt} $inFlags && ` +
`${config.SoongZipCmd} -write_if_changed -jar -o $genJar -C $genDir -D $genDir &&` +
- `${config.ExtractJarPackagesCmd} -i $genJar -o $extraPackages --prefix '--extra-packages '`,
+ `${config.ExtractJarPackagesCmd} -i $genJar -o $extraPackages --prefix '--extra-packages ' && ` +
+ `rm -rf $genDir`,
CommandDeps: []string{
"${config.Aapt2Cmd}",
diff --git a/tests/lib.sh b/tests/lib.sh
index 40b317b..f337c74 100644
--- a/tests/lib.sh
+++ b/tests/lib.sh
@@ -52,6 +52,10 @@
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 @@
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
diff --git a/tests/sbom_test.sh b/tests/sbom_test.sh
index afec6b1..2534b20 100755
--- a/tests/sbom_test.sh
+++ b/tests/sbom_test.sh
@@ -238,10 +238,45 @@
diff_files "$file_list_file" "$files_in_spdx_file" "$partition_name"
done
+ verify_package_verification_code "$product_out/sbom.spdx"
+
# Teardown
cleanup "${out_dir}"
}
+function verify_package_verification_code {
+ local sbom_file="$1"; shift
+
+ local -a file_checksums
+ local package_product_found=
+ while read -r line;
+ do
+ if grep -q 'PackageVerificationCode' <<<"$line"
+ then
+ package_product_found=true
+ fi
+ if [ -n "$package_product_found" ]
+ then
+ if grep -q 'FileChecksum' <<< "$line"
+ then
+ checksum=$(echo $line | sed 's/^.*: //')
+ file_checksums+=("$checksum")
+ fi
+ fi
+ done <<< "$(grep -E 'PackageVerificationCode|FileChecksum' $sbom_file)"
+ IFS=$'\n' file_checksums=($(sort <<<"${file_checksums[*]}")); unset IFS
+ IFS= expected_package_verification_code=$(printf "${file_checksums[*]}" | sha1sum | sed 's/[[:space:]]*-//'); unset IFS
+
+ actual_package_verification_code=$(grep PackageVerificationCode $sbom_file | sed 's/PackageVerificationCode: //g')
+ if [ $actual_package_verification_code = $expected_package_verification_code ]
+ then
+ echo "Package verification code is correct."
+ else
+ echo "Unexpected package verification code."
+ exit 1
+ fi
+}
+
function test_sbom_unbundled_apex {
# Setup
out_dir="$(setup)"