Merge "Use aquery results to determine if a file should be executable" into main
diff --git a/android/allowlists/allowlists.go b/android/allowlists/allowlists.go
index 9916451..2438726 100644
--- a/android/allowlists/allowlists.go
+++ b/android/allowlists/allowlists.go
@@ -909,6 +909,9 @@
"merge_annotation_zips_test",
+ // bouncycastle dep
+ "platform-test-annotations",
+
// java_resources with multiple resource_dirs
"emma",
}
diff --git a/android/proto.go b/android/proto.go
index 4cd73e3..7c418c6 100644
--- a/android/proto.go
+++ b/android/proto.go
@@ -17,6 +17,7 @@
import (
"path/filepath"
"strings"
+ "sync"
"android/soong/bazel"
@@ -351,10 +352,10 @@
protoIncludeDirsBp2buildKey = NewOnceKey("protoIncludeDirsBp2build")
)
-func getProtoIncludeDirsBp2build(config Config) *map[protoIncludeDirKey]bool {
+func getProtoIncludeDirsBp2build(config Config) *sync.Map {
return config.Once(protoIncludeDirsBp2buildKey, func() interface{} {
- return &map[protoIncludeDirKey]bool{}
- }).(*map[protoIncludeDirKey]bool)
+ return &sync.Map{}
+ }).(*sync.Map)
}
// key for dynamically creating proto_library per proto.include_dirs
@@ -384,11 +385,10 @@
Label: "//" + pkg + ":" + label,
})
key := protoIncludeDirKey{dir: dir, subpackgeInDir: pkg}
- if _, exists := (*dirMap)[key]; exists {
+ if _, exists := dirMap.LoadOrStore(key, true); exists {
// A proto_library has already been created for this package relative to this include dir
continue
}
- (*dirMap)[key] = true
srcs := protoLabelelsPartitionedByPkg[pkg]
rel, err := filepath.Rel(dir, pkg)
if err != nil {
diff --git a/bazel/configurability.go b/bazel/configurability.go
index aa58fdc..1fe8442 100644
--- a/bazel/configurability.go
+++ b/bazel/configurability.go
@@ -39,7 +39,7 @@
// Targets in arch.go
osArchAndroidArm = "android_arm"
- osArchAndroidArm64 = "android_arm64"
+ OsArchAndroidArm64 = "android_arm64"
osArchAndroidRiscv64 = "android_riscv64"
osArchAndroidX86 = "android_x86"
osArchAndroidX86_64 = "android_x86_64"
@@ -170,7 +170,7 @@
platformOsArchMap = map[string]string{
osArchAndroidArm: "//build/bazel/platforms/os_arch:android_arm",
- osArchAndroidArm64: "//build/bazel/platforms/os_arch:android_arm64",
+ OsArchAndroidArm64: "//build/bazel/platforms/os_arch:android_arm64",
osArchAndroidRiscv64: "//build/bazel/platforms/os_arch:android_riscv64",
osArchAndroidX86: "//build/bazel/platforms/os_arch:android_x86",
osArchAndroidX86_64: "//build/bazel/platforms/os_arch:android_x86_64",
diff --git a/bp2build/aar_conversion_test.go b/bp2build/aar_conversion_test.go
index 09d9dc1..a24378c 100644
--- a/bp2build/aar_conversion_test.go
+++ b/bp2build/aar_conversion_test.go
@@ -37,19 +37,19 @@
},
Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
android_library {
- name: "TestLib",
- srcs: ["lib.java"],
- arch: {
- arm: {
- srcs: ["arm.java"],
- },
- x86: {
- srcs: ["x86.java"],
- }
+ name: "TestLib",
+ srcs: ["lib.java"],
+ arch: {
+ arm: {
+ srcs: ["arm.java"],
},
- manifest: "manifest/AndroidManifest.xml",
- static_libs: ["static_lib_dep"],
- java_version: "7",
+ x86: {
+ srcs: ["x86.java"],
+ }
+ },
+ manifest: "manifest/AndroidManifest.xml",
+ static_libs: ["static_lib_dep"],
+ sdk_version: "current",
}
`,
ExpectedBazelTargets: []string{
@@ -66,12 +66,9 @@
"resource_files": `["res/res.png"]`,
"deps": `[":static_lib_dep"]`,
"exports": `[":static_lib_dep"]`,
- "java_version": `"7"`,
+ "sdk_version": `"current"`, // use as default
}),
- MakeNeverlinkDuplicateTargetWithAttrs(
- "android_library",
- "TestLib",
- AttrNameToString{"java_version": `"7"`}),
+ MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
}})
}
@@ -87,10 +84,11 @@
},
Blueprint: simpleModuleDoNotConvertBp2build("android_library", "lib_dep") + `
android_library {
- name: "TestLib",
- srcs: [],
- manifest: "AndroidManifest.xml",
- libs: ["lib_dep"],
+ name: "TestLib",
+ srcs: [],
+ manifest: "AndroidManifest.xml",
+ libs: ["lib_dep"],
+ sdk_version: "current",
}
`,
ExpectedErr: fmt.Errorf("Module has direct dependencies but no sources. Bazel will not allow this."),
@@ -121,6 +119,7 @@
name: "TestImport",
aars: ["import.aar"],
static_libs: ["static_lib_dep", "static_import_dep"],
+ sdk_version: "current",
}
`,
ExpectedBazelTargets: []string{
@@ -133,7 +132,8 @@
":static_lib_dep",
":static_import_dep",
]`,
- "exports": `[":static_import_dep"]`,
+ "exports": `[":static_import_dep"]`,
+ "sdk_version": `"current"`, // use as default
},
),
MakeNeverlinkDuplicateTarget("android_library", "TestImport"),
@@ -153,9 +153,10 @@
},
Blueprint: `
android_library {
- name: "TestLib",
- srcs: ["a.java", "b.kt"],
- common_srcs: ["c.kt"],
+ name: "TestLib",
+ srcs: ["a.java", "b.kt"],
+ common_srcs: ["c.kt"],
+ sdk_version: "current",
}
`,
ExpectedBazelTargets: []string{
@@ -170,6 +171,7 @@
"common_srcs": `["c.kt"]`,
"manifest": `"AndroidManifest.xml"`,
"resource_files": `[]`,
+ "sdk_version": `"current"`, // use as default
}),
MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
}})
@@ -186,9 +188,10 @@
},
Blueprint: `
android_library {
- name: "TestLib",
- srcs: ["a.java", "b.kt"],
- kotlincflags: ["-flag1", "-flag2"],
+ name: "TestLib",
+ srcs: ["a.java", "b.kt"],
+ kotlincflags: ["-flag1", "-flag2"],
+ sdk_version: "current",
}
`,
ExpectedBazelTargets: []string{
@@ -206,6 +209,7 @@
]`,
"manifest": `"AndroidManifest.xml"`,
"resource_files": `[]`,
+ "sdk_version": `"current"`, // use as default
}),
MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
}})
diff --git a/bp2build/android_app_conversion_test.go b/bp2build/android_app_conversion_test.go
index 8ed94b4..f2ee322 100644
--- a/bp2build/android_app_conversion_test.go
+++ b/bp2build/android_app_conversion_test.go
@@ -44,9 +44,14 @@
},
Blueprint: `
android_app {
- name: "TestApp",
- srcs: ["app.java"],
- sdk_version: "current",
+ name: "TestApp",
+ srcs: ["app.java"],
+ sdk_version: "current",
+ optimize: {
+ shrink: true,
+ optimize: true,
+ obfuscate: true,
+ },
}
`,
ExpectedBazelTargets: []string{
@@ -75,17 +80,25 @@
},
Blueprint: simpleModuleDoNotConvertBp2build("android_app", "static_lib_dep") + `
android_app {
- name: "TestApp",
- srcs: ["app.java"],
- sdk_version: "current",
- package_name: "com.google",
- resource_dirs: ["resa", "resb"],
- manifest: "manifest/AndroidManifest.xml",
- static_libs: ["static_lib_dep"],
- java_version: "7",
- certificate: "foocert",
- required: ["static_lib_dep"],
- asset_dirs: ["assets_"],
+ name: "TestApp",
+ srcs: ["app.java"],
+ sdk_version: "current",
+ package_name: "com.google",
+ resource_dirs: ["resa", "resb"],
+ manifest: "manifest/AndroidManifest.xml",
+ static_libs: ["static_lib_dep"],
+ java_version: "7",
+ certificate: "foocert",
+ required: ["static_lib_dep"],
+ asset_dirs: ["assets_"],
+ optimize: {
+ enabled: true,
+ optimize: false,
+ proguard_flags_files: ["proguard.flags"],
+ shrink: false,
+ obfuscate: false,
+ ignore_warnings: true,
+ },
}
`,
ExpectedBazelTargets: []string{
@@ -103,6 +116,14 @@
"java_version": `"7"`,
"sdk_version": `"current"`,
"certificate_name": `"foocert"`,
+ "proguard_specs": `[
+ "proguard.flags",
+ ":TestApp_proguard_flags",
+ ]`,
+ }),
+ MakeBazelTarget("genrule", "TestApp_proguard_flags", AttrNameToString{
+ "outs": `["TestApp_proguard.flags"]`,
+ "cmd": `"echo -ignorewarning -dontshrink -dontoptimize -dontobfuscate > $(OUTS)"`,
}),
}})
}
@@ -120,16 +141,19 @@
},
Blueprint: `
android_app {
- name: "TestApp",
- sdk_version: "current",
- arch: {
- arm: {
- srcs: ["arm.java"],
- },
- x86: {
- srcs: ["x86.java"],
- }
+ name: "TestApp",
+ sdk_version: "current",
+ arch: {
+ arm: {
+ srcs: ["arm.java"],
+ },
+ x86: {
+ srcs: ["x86.java"],
}
+ },
+ optimize: {
+ enabled: false,
+ },
}
`,
ExpectedBazelTargets: []string{
@@ -142,6 +166,7 @@
"manifest": `"AndroidManifest.xml"`,
"resource_files": `["res/res.png"]`,
"sdk_version": `"current"`,
+ "optimize": `False`,
}),
}})
}
@@ -154,8 +179,12 @@
Filesystem: map[string]string{},
Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "foocert") + `
android_app {
- name: "TestApp",
- certificate: ":foocert",
+ name: "TestApp",
+ certificate: ":foocert",
+ sdk_version: "current",
+ optimize: {
+ enabled: false,
+ },
}
`,
ExpectedBazelTargets: []string{
@@ -163,6 +192,8 @@
"certificate": `":foocert"`,
"manifest": `"AndroidManifest.xml"`,
"resource_files": `[]`,
+ "sdk_version": `"current"`, // use as default
+ "optimize": `False`,
}),
}})
}
@@ -177,8 +208,12 @@
},
Blueprint: `
android_app {
- name: "TestApp",
- certificate: "foocert",
+ name: "TestApp",
+ certificate: "foocert",
+ sdk_version: "current",
+ optimize: {
+ enabled: false,
+ },
}
`,
ExpectedBazelTargets: []string{
@@ -186,6 +221,8 @@
"certificate": `"foocert"`,
"manifest": `"AndroidManifest.xml"`,
"resource_files": `[]`,
+ "sdk_version": `"current"`, // use as default
+ "optimize": `False`,
}),
}})
}
@@ -200,8 +237,12 @@
},
Blueprint: `
android_app {
- name: "TestApp",
- certificate: "foocert",
+ name: "TestApp",
+ certificate: "foocert",
+ sdk_version: "current",
+ optimize: {
+ enabled: false,
+ },
}
`,
ExpectedBazelTargets: []string{
@@ -209,6 +250,8 @@
"certificate_name": `"foocert"`,
"manifest": `"AndroidManifest.xml"`,
"resource_files": `[]`,
+ "sdk_version": `"current"`, // use as default
+ "optimize": `False`,
}),
}})
}
@@ -219,22 +262,23 @@
ModuleTypeUnderTest: "android_app",
ModuleTypeUnderTestFactory: java.AndroidAppFactory,
Filesystem: map[string]string{},
- Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "foocert") + `
+ Blueprint: simpleModuleDoNotConvertBp2build("java_library", "barLib") + `
android_app {
- name: "foo",
- libs: ["barLib"]
-}
-java_library{
- name: "barLib",
+ name: "foo",
+ libs: ["barLib"],
+ sdk_version: "current",
+ optimize: {
+ enabled: false,
+ },
}
`,
ExpectedBazelTargets: []string{
- MakeBazelTarget("java_library", "barLib", AttrNameToString{}),
- MakeNeverlinkDuplicateTarget("java_library", "barLib"),
MakeBazelTarget("android_binary", "foo", AttrNameToString{
"manifest": `"AndroidManifest.xml"`,
"resource_files": `[]`,
"deps": `[":barLib-neverlink"]`,
+ "sdk_version": `"current"`, // use as default
+ "optimize": `False`,
}),
}})
}
@@ -247,21 +291,21 @@
Filesystem: map[string]string{
"res/res.png": "",
},
- Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "foocert") + `
+ Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "foocert") +
+ simpleModuleDoNotConvertBp2build("java_library", "barLib") + `
android_app {
- name: "foo",
- srcs: ["a.java", "b.kt"],
- certificate: ":foocert",
- manifest: "fooManifest.xml",
- libs: ["barLib"]
-}
-java_library{
- name: "barLib",
+ name: "foo",
+ srcs: ["a.java", "b.kt"],
+ certificate: ":foocert",
+ manifest: "fooManifest.xml",
+ libs: ["barLib"],
+ sdk_version: "current",
+ optimize: {
+ enabled: false,
+ },
}
`,
ExpectedBazelTargets: []string{
- MakeBazelTarget("java_library", "barLib", AttrNameToString{}),
- MakeNeverlinkDuplicateTarget("java_library", "barLib"),
MakeBazelTarget("android_library", "foo_kt", AttrNameToString{
"srcs": `[
"a.java",
@@ -270,11 +314,14 @@
"manifest": `"fooManifest.xml"`,
"resource_files": `["res/res.png"]`,
"deps": `[":barLib-neverlink"]`,
+ "sdk_version": `"current"`, // use as default
}),
MakeBazelTarget("android_binary", "foo", AttrNameToString{
"deps": `[":foo_kt"]`,
"certificate": `":foocert"`,
"manifest": `"fooManifest.xml"`,
+ "sdk_version": `"current"`, // use as default
+ "optimize": `False`,
}),
}})
}
@@ -287,33 +334,37 @@
Filesystem: map[string]string{
"res/res.png": "",
},
- Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "foocert") + `
+ Blueprint: `
android_app {
- name: "foo",
- srcs: ["a.java"],
- common_srcs: ["b.kt"],
- certificate: "foocert",
- manifest: "fooManifest.xml",
- libs: ["barLib"],
+ name: "foo",
+ srcs: ["a.java"],
+ common_srcs: ["b.kt"],
+ manifest: "fooManifest.xml",
+ libs: ["barLib"],
+ sdk_version: "current",
+ optimize: {
+ enabled: false,
+ },
}
java_library{
- name: "barLib",
+ name: "barLib",
+ bazel_module: { bp2build_available: false },
}
`,
ExpectedBazelTargets: []string{
- MakeBazelTarget("java_library", "barLib", AttrNameToString{}),
- MakeNeverlinkDuplicateTarget("java_library", "barLib"),
MakeBazelTarget("android_library", "foo_kt", AttrNameToString{
"srcs": `["a.java"]`,
"common_srcs": `["b.kt"]`,
"manifest": `"fooManifest.xml"`,
"resource_files": `["res/res.png"]`,
"deps": `[":barLib-neverlink"]`,
+ "sdk_version": `"current"`, // use as default
}),
MakeBazelTarget("android_binary", "foo", AttrNameToString{
- "deps": `[":foo_kt"]`,
- "certificate_name": `"foocert"`,
- "manifest": `"fooManifest.xml"`,
+ "deps": `[":foo_kt"]`,
+ "manifest": `"fooManifest.xml"`,
+ "sdk_version": `"current"`, // use as default
+ "optimize": `False`,
}),
}})
}
@@ -326,13 +377,16 @@
Filesystem: map[string]string{
"res/res.png": "",
},
- Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "foocert") + `
+ Blueprint: `
android_app {
- name: "foo",
- srcs: ["a.java", "b.kt"],
- certificate: ":foocert",
- manifest: "fooManifest.xml",
- kotlincflags: ["-flag1", "-flag2"],
+ name: "foo",
+ srcs: ["a.java", "b.kt"],
+ manifest: "fooManifest.xml",
+ kotlincflags: ["-flag1", "-flag2"],
+ sdk_version: "current",
+ optimize: {
+ enabled: false,
+ },
}
`,
ExpectedBazelTargets: []string{
@@ -347,11 +401,13 @@
"-flag1",
"-flag2",
]`,
+ "sdk_version": `"current"`, // use as default
}),
MakeBazelTarget("android_binary", "foo", AttrNameToString{
"deps": `[":foo_kt"]`,
- "certificate": `":foocert"`,
"manifest": `"fooManifest.xml"`,
+ "sdk_version": `"current"`,
+ "optimize": `False`,
}),
}})
}
@@ -362,13 +418,16 @@
ModuleTypeUnderTest: "android_app",
ModuleTypeUnderTestFactory: java.AndroidAppFactory,
Filesystem: map[string]string{},
- Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "foocert") + `
+ Blueprint: `
android_app {
- name: "foo",
- sdk_version: "current",
- min_sdk_version: "24",
- max_sdk_version: "30",
- target_sdk_version: "29",
+ name: "foo",
+ sdk_version: "current",
+ min_sdk_version: "24",
+ max_sdk_version: "30",
+ target_sdk_version: "29",
+ optimize: {
+ enabled: false,
+ },
}
`,
ExpectedBazelTargets: []string{
@@ -381,6 +440,7 @@
"targetSdkVersion": "29",
}`,
"sdk_version": `"current"`,
+ "optimize": `False`,
}),
}})
}
@@ -391,10 +451,13 @@
ModuleTypeUnderTest: "android_app",
ModuleTypeUnderTestFactory: java.AndroidAppFactory,
Filesystem: map[string]string{},
- Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "foocert") + `
+ Blueprint: `
android_app {
- name: "foo",
- sdk_version: "30",
+ name: "foo",
+ sdk_version: "30",
+ optimize: {
+ enabled: false,
+ },
}
`,
ExpectedBazelTargets: []string{
@@ -406,6 +469,7 @@
"targetSdkVersion": "30",
}`,
"sdk_version": `"30"`,
+ "optimize": `False`,
}),
}})
}
diff --git a/bp2build/cc_test_conversion_test.go b/bp2build/cc_test_conversion_test.go
index 76bbb57..9639ab9 100644
--- a/bp2build/cc_test_conversion_test.go
+++ b/bp2build/cc_test_conversion_test.go
@@ -139,6 +139,13 @@
"host_without_device",
"device",
]`,
+ "features": `select({
+ "//build/bazel/platforms/os_arch:android_arm64": [
+ "memtag_heap",
+ "diag_memtag_heap",
+ ],
+ "//conditions:default": [],
+ })`,
},
},
},
@@ -166,6 +173,13 @@
"host_without_device",
"device",
]`,
+ "features": `select({
+ "//build/bazel/platforms/os_arch:android_arm64": [
+ "memtag_heap",
+ "diag_memtag_heap",
+ ],
+ "//conditions:default": [],
+ })`,
},
},
},
@@ -197,6 +211,13 @@
"host_without_device",
"device",
]`,
+ "features": `select({
+ "//build/bazel/platforms/os_arch:android_arm64": [
+ "memtag_heap",
+ "diag_memtag_heap",
+ ],
+ "//conditions:default": [],
+ })`,
},
},
},
@@ -228,6 +249,13 @@
":libgtest",
]`,
"runs_on": `["device"]`,
+ "features": `select({
+ "//build/bazel/platforms/os_arch:android_arm64": [
+ "memtag_heap",
+ "diag_memtag_heap",
+ ],
+ "//conditions:default": [],
+ })`,
},
},
},
@@ -260,6 +288,13 @@
":libgtest",
]`,
"runs_on": `["device"]`,
+ "features": `select({
+ "//build/bazel/platforms/os_arch:android_arm64": [
+ "memtag_heap",
+ "diag_memtag_heap",
+ ],
+ "//conditions:default": [],
+ })`,
},
},
},
@@ -297,6 +332,13 @@
"deps": `[":libgtest_isolated_main"]`,
"dynamic_deps": `[":liblog"]`,
"runs_on": `["device"]`,
+ "features": `select({
+ "//build/bazel/platforms/os_arch:android_arm64": [
+ "memtag_heap",
+ "diag_memtag_heap",
+ ],
+ "//conditions:default": [],
+ })`,
},
},
},
@@ -324,6 +366,13 @@
":libgtest_main",
]`,
"runs_on": `["device"]`,
+ "features": `select({
+ "//build/bazel/platforms/os_arch:android_arm64": [
+ "memtag_heap",
+ "diag_memtag_heap",
+ ],
+ "//conditions:default": [],
+ })`,
},
},
},
@@ -350,6 +399,13 @@
"deps": `[":libgtest_isolated_main"]`,
"dynamic_deps": `[":liblog"]`,
"runs_on": `["device"]`,
+ "features": `select({
+ "//build/bazel/platforms/os_arch:android_arm64": [
+ "memtag_heap",
+ "diag_memtag_heap",
+ ],
+ "//conditions:default": [],
+ })`,
},
},
},
@@ -381,6 +437,13 @@
"gtest": "True",
"target_compatible_with": `["//build/bazel/platforms/os:android"]`,
"runs_on": `["device"]`,
+ "features": `select({
+ "//build/bazel/platforms/os_arch:android_arm64": [
+ "memtag_heap",
+ "diag_memtag_heap",
+ ],
+ "//conditions:default": [],
+ })`,
},
},
{"cc_test", "mytest_with_no_gtest", AttrNameToString{
@@ -388,6 +451,166 @@
"gtest": "False",
"target_compatible_with": `["//build/bazel/platforms/os:android"]`,
"runs_on": `["device"]`,
+ "features": `select({
+ "//build/bazel/platforms/os_arch:android_arm64": [
+ "memtag_heap",
+ "diag_memtag_heap",
+ ],
+ "//conditions:default": [],
+ })`,
+ },
+ },
+ },
+ })
+}
+
+func TestCcTest_DisableMemtagHeap(t *testing.T) {
+ runCcTestTestCase(t, ccTestBp2buildTestCase{
+ description: "cc test that disable memtag_heap",
+ blueprint: `
+cc_test {
+ name: "mytest",
+ srcs: ["test.cpp"],
+ isolated: true,
+ sanitize: {
+ cfi: true,
+ memtag_heap: false,
+ },
+}
+` + simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_isolated_main") +
+ simpleModuleDoNotConvertBp2build("cc_library", "liblog"),
+ targets: []testBazelTarget{
+ {"cc_test", "mytest", AttrNameToString{
+ "local_includes": `["."]`,
+ "srcs": `["test.cpp"]`,
+ "target_compatible_with": `["//build/bazel/platforms/os:android"]`,
+ "deps": `[":libgtest_isolated_main"]`,
+ "dynamic_deps": `[":liblog"]`,
+ "runs_on": `["device"]`,
+ "features": `["android_cfi"] + select({
+ "//build/bazel/platforms/os_arch:android_arm64": ["-memtag_heap"],
+ "//conditions:default": [],
+ })`,
+ },
+ },
+ },
+ })
+}
+
+func TestCcTest_RespectArm64MemtagHeap(t *testing.T) {
+ runCcTestTestCase(t, ccTestBp2buildTestCase{
+ description: "cc test that disable memtag_heap",
+ blueprint: `
+cc_test {
+ name: "mytest",
+ srcs: ["test.cpp"],
+ isolated: true,
+ target: {
+ android_arm64: {
+ sanitize: {
+ memtag_heap: false,
+ }
+ }
+ },
+}
+` + simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_isolated_main") +
+ simpleModuleDoNotConvertBp2build("cc_library", "liblog"),
+ targets: []testBazelTarget{
+ {"cc_test", "mytest", AttrNameToString{
+ "local_includes": `["."]`,
+ "srcs": `["test.cpp"]`,
+ "target_compatible_with": `["//build/bazel/platforms/os:android"]`,
+ "deps": `[":libgtest_isolated_main"]`,
+ "dynamic_deps": `[":liblog"]`,
+ "runs_on": `["device"]`,
+ "features": `select({
+ "//build/bazel/platforms/os_arch:android_arm64": ["-memtag_heap"],
+ "//conditions:default": [],
+ })`,
+ },
+ },
+ },
+ })
+}
+
+func TestCcTest_IgnoreNoneArm64MemtagHeap(t *testing.T) {
+ runCcTestTestCase(t, ccTestBp2buildTestCase{
+ description: "cc test that disable memtag_heap",
+ blueprint: `
+cc_test {
+ name: "mytest",
+ srcs: ["test.cpp"],
+ isolated: true,
+ arch: {
+ x86: {
+ sanitize: {
+ memtag_heap: false,
+ }
+ }
+ },
+}
+` + simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_isolated_main") +
+ simpleModuleDoNotConvertBp2build("cc_library", "liblog"),
+ targets: []testBazelTarget{
+ {"cc_test", "mytest", AttrNameToString{
+ "local_includes": `["."]`,
+ "srcs": `["test.cpp"]`,
+ "target_compatible_with": `["//build/bazel/platforms/os:android"]`,
+ "deps": `[":libgtest_isolated_main"]`,
+ "dynamic_deps": `[":liblog"]`,
+ "runs_on": `["device"]`,
+ "features": `select({
+ "//build/bazel/platforms/os_arch:android_arm64": [
+ "memtag_heap",
+ "diag_memtag_heap",
+ ],
+ "//conditions:default": [],
+ })`,
+ },
+ },
+ },
+ })
+}
+
+func TestCcTest_Arm64MemtagHeapOverrideNoConfigOne(t *testing.T) {
+ runCcTestTestCase(t, ccTestBp2buildTestCase{
+ description: "cc test that disable memtag_heap",
+ blueprint: `
+cc_test {
+ name: "mytest",
+ srcs: ["test.cpp"],
+ isolated: true,
+ sanitize: {
+ memtag_heap: true,
+ },
+ target: {
+ android_arm64: {
+ sanitize: {
+ memtag_heap: false,
+ diag: {
+ memtag_heap: false,
+ },
+ }
+ }
+ },
+}
+` + simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_isolated_main") +
+ simpleModuleDoNotConvertBp2build("cc_library", "liblog"),
+ targets: []testBazelTarget{
+ {"cc_test", "mytest", AttrNameToString{
+ "local_includes": `["."]`,
+ "srcs": `["test.cpp"]`,
+ "target_compatible_with": `["//build/bazel/platforms/os:android"]`,
+ "deps": `[":libgtest_isolated_main"]`,
+ "dynamic_deps": `[":liblog"]`,
+ "runs_on": `["device"]`,
+ "features": `select({
+ "//build/bazel/platforms/os_arch:android_arm64": [
+ "-memtag_heap",
+ "-diag_memtag_heap",
+ ],
+ "//conditions:default": [],
+ })`,
},
},
},
diff --git a/bp2build/conversion.go b/bp2build/conversion.go
index 7791419..35a1400 100644
--- a/bp2build/conversion.go
+++ b/bp2build/conversion.go
@@ -48,7 +48,11 @@
}
files = append(files, newFile("apex_toolchain", "constants.bzl", apexToolchainVars))
- files = append(files, newFile("metrics", "converted_modules.txt", strings.Join(metrics.Serialize().ConvertedModules, "\n")))
+ if buf, err := json.MarshalIndent(metrics.convertedModuleWithType, "", " "); err != nil {
+ return []BazelFile{}, err
+ } else {
+ files = append(files, newFile("metrics", "converted_modules.json", string(buf)))
+ }
convertedModulePathMap, err := json.MarshalIndent(metrics.convertedModulePathMap, "", "\t")
if err != nil {
diff --git a/bp2build/conversion_test.go b/bp2build/conversion_test.go
index cbffaa0..89dd38e 100644
--- a/bp2build/conversion_test.go
+++ b/bp2build/conversion_test.go
@@ -134,7 +134,7 @@
},
{
dir: "metrics",
- basename: "converted_modules.txt",
+ basename: "converted_modules.json",
},
{
dir: "metrics",
diff --git a/bp2build/java_host_for_device_conversion_test.go b/bp2build/java_host_for_device_conversion_test.go
index 448cba4..1fa7126 100644
--- a/bp2build/java_host_for_device_conversion_test.go
+++ b/bp2build/java_host_for_device_conversion_test.go
@@ -48,6 +48,7 @@
name: "java-lib-2",
srcs: ["b.java"],
bazel_module: { bp2build_available: true },
+ sdk_version: "current",
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_host_for_device", "java-lib-1", AttrNameToString{
@@ -57,7 +58,8 @@
"sdk_version": `"none"`,
}),
MakeBazelTarget("java_library", "java-lib-2", AttrNameToString{
- "srcs": `["b.java"]`,
+ "srcs": `["b.java"]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-2"),
},
diff --git a/bp2build/java_library_conversion_test.go b/bp2build/java_library_conversion_test.go
index 5c769a5..7429ae6 100644
--- a/bp2build/java_library_conversion_test.go
+++ b/bp2build/java_library_conversion_test.go
@@ -42,22 +42,26 @@
srcs: ["a.java", "b.java"],
exclude_srcs: ["b.java"],
libs: ["java-lib-2"],
+ sdk_version: "current",
bazel_module: { bp2build_available: true },
}
java_library {
name: "java-lib-2",
srcs: ["b.java"],
+ sdk_version: "current",
bazel_module: { bp2build_available: true },
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
- "srcs": `["a.java"]`,
- "deps": `[":java-lib-2-neverlink"]`,
+ "srcs": `["a.java"]`,
+ "deps": `[":java-lib-2-neverlink"]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
MakeBazelTarget("java_library", "java-lib-2", AttrNameToString{
- "srcs": `["b.java"]`,
+ "srcs": `["b.java"]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-2"),
},
@@ -71,18 +75,21 @@
srcs: ["a.java"],
libs: ["java-lib-2"],
static_libs: ["java-lib-3"],
+ sdk_version: "current",
bazel_module: { bp2build_available: true },
}
java_library {
name: "java-lib-2",
srcs: ["b.java"],
+ sdk_version: "current",
bazel_module: { bp2build_available: false },
}
java_library {
name: "java-lib-3",
srcs: ["c.java"],
+ sdk_version: "current",
bazel_module: { bp2build_available: false },
}`,
ExpectedBazelTargets: []string{
@@ -92,7 +99,8 @@
":java-lib-2-neverlink",
":java-lib-3",
]`,
- "exports": `[":java-lib-3"]`,
+ "exports": `[":java-lib-3"]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
@@ -104,6 +112,7 @@
Blueprint: `java_library {
name: "java-lib-1",
static_libs: ["java-lib-2"],
+ sdk_version: "current",
bazel_module: { bp2build_available: true },
}
@@ -114,25 +123,40 @@
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
- "exports": `[":java-lib-2"]`,
+ "exports": `[":java-lib-2"]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
})
}
+func TestJavaLibraryFailsToConvertNoSdkVersion(t *testing.T) {
+ runJavaLibraryTestCase(t, Bp2buildTestCase{
+ Blueprint: `
+java_library {
+ name: "lib",
+ bazel_module: { bp2build_available: true },
+}
+`,
+ ExpectedBazelTargets: []string{}, // no targets expected because sdk_version is not set
+ })
+}
+
func TestJavaLibraryFailsToConvertLibsWithNoSrcs(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
ExpectedErr: fmt.Errorf("Module has direct dependencies but no sources. Bazel will not allow this."),
Blueprint: `java_library {
name: "java-lib-1",
libs: ["java-lib-2"],
+ sdk_version: "current",
bazel_module: { bp2build_available: true },
}
java_library {
name: "java-lib-2",
srcs: ["a.java"],
+ sdk_version: "current",
bazel_module: { bp2build_available: false },
}`,
ExpectedBazelTargets: []string{},
@@ -144,6 +168,7 @@
Blueprint: `java_library {
name: "java-lib-1",
plugins: ["java-plugin-1"],
+ sdk_version: "current",
bazel_module: { bp2build_available: true },
}
@@ -154,7 +179,8 @@
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
- "plugins": `[":java-plugin-1"]`,
+ "plugins": `[":java-plugin-1"]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
@@ -169,16 +195,21 @@
name: "java-lib-1",
srcs: ["a.java"],
java_version: "11",
+ sdk_version: "current",
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"srcs": `["a.java"]`,
"java_version": `"11"`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTargetWithAttrs(
"java_library",
"java-lib-1",
- AttrNameToString{"java_version": `"11"`}),
+ AttrNameToString{
+ "java_version": `"11"`,
+ "sdk_version": `"current"`,
+ }),
},
})
}
@@ -189,6 +220,7 @@
name: "java-lib-1",
srcs: ["a.java"],
javacflags: ["-Xsuper-fast"],
+ sdk_version: "current",
errorprone: {
enabled: true,
javacflags: ["-Xep:SpeedLimit:OFF"],
@@ -209,6 +241,7 @@
"plugins": `[":plugin2"]`,
"srcs": `["a.java"]`,
"errorprone_force_enable": `True`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
@@ -222,6 +255,7 @@
Blueprint: `java_library {
name: "java-lib-1",
srcs: ["a.java"],
+ sdk_version: "current",
javacflags: ["-Xsuper-fast"],
errorprone: {
javacflags: ["-Xep:SpeedLimit:OFF"],
@@ -229,8 +263,9 @@
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
- "javacopts": `["-Xsuper-fast"]`,
- "srcs": `["a.java"]`,
+ "javacopts": `["-Xsuper-fast"]`,
+ "srcs": `["a.java"]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
@@ -243,6 +278,7 @@
name: "java-lib-1",
srcs: ["a.java"],
javacflags: ["-Xsuper-fast"],
+ sdk_version: "current",
errorprone: {
enabled: false,
},
@@ -253,7 +289,8 @@
"-Xsuper-fast",
"-XepDisableAllChecks",
]`,
- "srcs": `["a.java"]`,
+ "srcs": `["a.java"]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
@@ -266,14 +303,15 @@
ModuleTypeUnderTest: "java_library",
ModuleTypeUnderTestFactory: java.LibraryFactory,
Blueprint: `java_library {
- name: "example_lib",
- srcs: [
- "a.java",
- "b.java",
- "a.logtag",
- "b.logtag",
- ],
- bazel_module: { bp2build_available: true },
+ name: "example_lib",
+ srcs: [
+ "a.java",
+ "b.java",
+ "a.logtag",
+ "b.logtag",
+ ],
+ sdk_version: "current",
+ bazel_module: { bp2build_available: true },
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("event_log_tags", "example_lib_logtags", AttrNameToString{
@@ -288,6 +326,7 @@
"b.java",
":example_lib_logtags",
]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
}})
@@ -301,9 +340,10 @@
"adir/res/b.res": "",
"adir/res/dir1/b.res": "",
"adir/Android.bp": `java_library {
- name: "java-lib-1",
- java_resources: ["res/a.res", "res/b.res"],
- bazel_module: { bp2build_available: true },
+ name: "java-lib-1",
+ java_resources: ["res/a.res", "res/b.res"],
+ sdk_version: "current",
+ bazel_module: { bp2build_available: true },
}`,
},
Blueprint: "",
@@ -314,6 +354,7 @@
"res/b.res",
]`,
"resource_strip_prefix": `"adir"`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
@@ -328,8 +369,9 @@
"res/dir1/b.res": "",
},
Blueprint: `java_library {
- name: "java-lib-1",
+ name: "java-lib-1",
java_resource_dirs: ["res"],
+ sdk_version: "current",
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
@@ -339,6 +381,7 @@
"res/b.res",
"res/dir1/b.res",
]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
@@ -352,14 +395,16 @@
"res/exclude/b.res": "",
},
Blueprint: `java_library {
- name: "java-lib-1",
+ name: "java-lib-1",
java_resource_dirs: ["res"],
+ sdk_version: "current",
exclude_java_resource_dirs: ["res/exclude"],
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"resource_strip_prefix": `"res"`,
"resources": `["res/a.res"]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
@@ -374,8 +419,9 @@
"res/dir1/exclude.res": "",
},
Blueprint: `java_library {
- name: "java-lib-1",
+ name: "java-lib-1",
java_resource_dirs: ["res"],
+ sdk_version: "current",
exclude_java_resources: ["res/dir1/exclude.res"],
}`,
ExpectedBazelTargets: []string{
@@ -385,6 +431,7 @@
"res/a.res",
"res/dir1/b.res",
]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
@@ -398,8 +445,9 @@
"res1/b.res": "",
},
Blueprint: `java_library {
- name: "java-lib-1",
+ name: "java-lib-1",
java_resource_dirs: ["res", "res1"],
+ sdk_version: "current",
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_resources", "java-lib-1_resource_dir_res1", AttrNameToString{
@@ -410,6 +458,7 @@
"additional_resources": `["java-lib-1_resource_dir_res1"]`,
"resources": `["res/a.res"]`,
"resource_strip_prefix": `"res"`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
@@ -422,9 +471,10 @@
"resdir/a.res": "",
},
Blueprint: `java_library {
- name: "java-lib-1",
- java_resources: ["res1", "res2"],
- java_resource_dirs: ["resdir"],
+ name: "java-lib-1",
+ java_resources: ["res1", "res2"],
+ java_resource_dirs: ["resdir"],
+ sdk_version: "current",
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_resources", "java-lib-1_resource_dir_resdir", AttrNameToString{
@@ -438,6 +488,7 @@
"res1",
"res2",
]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
@@ -450,14 +501,15 @@
ModuleTypeUnderTest: "java_library",
ModuleTypeUnderTestFactory: java.LibraryFactory,
Blueprint: `java_library {
- name: "example_lib",
- srcs: [
- "a.java",
- "b.java",
- "a.aidl",
- "b.aidl",
- ],
- bazel_module: { bp2build_available: true },
+ name: "example_lib",
+ srcs: [
+ "a.java",
+ "b.java",
+ "a.aidl",
+ "b.aidl",
+ ],
+ bazel_module: { bp2build_available: true },
+ sdk_version: "current",
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
@@ -476,6 +528,7 @@
"a.java",
"b.java",
]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
}})
@@ -488,12 +541,13 @@
ModuleTypeUnderTestFactory: java.LibraryFactory,
Blueprint: `
java_library {
- name: "example_lib",
- srcs: [
- "a.java",
- "b.aidl",
- ],
- bazel_module: { bp2build_available: true },
+ name: "example_lib",
+ srcs: [
+ "a.java",
+ "b.aidl",
+ ],
+ sdk_version: "current",
+ bazel_module: { bp2build_available: true },
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{
@@ -503,9 +557,10 @@
"deps": `[":example_lib_aidl_library"]`,
}),
MakeBazelTarget("java_library", "example_lib", AttrNameToString{
- "deps": `[":example_lib_java_aidl_library"]`,
- "exports": `[":example_lib_java_aidl_library"]`,
- "srcs": `["a.java"]`,
+ "deps": `[":example_lib_java_aidl_library"]`,
+ "exports": `[":example_lib_java_aidl_library"]`,
+ "srcs": `["a.java"]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
},
@@ -535,14 +590,15 @@
],
}
java_library {
- name: "example_lib",
- srcs: [
- "a.java",
- "b.java",
- ":aidl_files",
- ":random_other_files",
- ],
- bazel_module: { bp2build_available: true },
+ name: "example_lib",
+ srcs: [
+ "a.java",
+ "b.java",
+ ":aidl_files",
+ ":random_other_files",
+ ],
+ sdk_version: "current",
+ bazel_module: { bp2build_available: true },
}`,
ExpectedBazelTargets: []string{
MakeBazelTargetNoRestrictions("aidl_library", "aidl_files", AttrNameToString{
@@ -563,6 +619,7 @@
"b.java",
":random_other_files",
]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "example_lib"),
MakeBazelTargetNoRestrictions("filegroup", "random_other_files", AttrNameToString{
@@ -585,24 +642,26 @@
Filesystem: map[string]string{
"path/to/A/Android.bp": `
filegroup {
- name: "A_aidl",
- srcs: ["aidl/A.aidl"],
- path: "aidl",
+ name: "A_aidl",
+ srcs: ["aidl/A.aidl"],
+ path: "aidl",
}`,
},
Blueprint: `
java_library {
- name: "foo",
- srcs: [
- ":A_aidl",
- ],
+ name: "foo",
+ srcs: [
+ ":A_aidl",
+ ],
+ sdk_version: "current",
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_aidl_library", "foo_java_aidl_library", AttrNameToString{
"deps": `["//path/to/A:A_aidl"]`,
}),
MakeBazelTarget("java_library", "foo", AttrNameToString{
- "exports": `[":foo_java_aidl_library"]`,
+ "exports": `[":foo_java_aidl_library"]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "foo"),
},
@@ -619,16 +678,17 @@
ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
android_library {
- name: "TestLib",
- manifest: "manifest/AndroidManifest.xml",
- srcs: ["lib.java"],
- arch: {
- arm: {
- neon: {
- srcs: ["arm_neon.java"],
- },
- },
- },
+ name: "TestLib",
+ manifest: "manifest/AndroidManifest.xml",
+ srcs: ["lib.java"],
+ sdk_version: "current",
+ arch: {
+ arm: {
+ neon: {
+ srcs: ["arm_neon.java"],
+ },
+ },
+ },
}
`,
ExpectedBazelTargets: []string{
@@ -642,6 +702,7 @@
})`,
"manifest": `"manifest/AndroidManifest.xml"`,
"resource_files": `[]`,
+ "sdk_version": `"current"`, // use as default
}),
MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
}})
@@ -655,19 +716,20 @@
ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
android_library {
- name: "TestLib",
- manifest: "manifest/AndroidManifest.xml",
- srcs: ["lib.java"],
- arch: {
- x86: {
- ssse3: {
- srcs: ["ssse3.java"],
- },
- sse4_1: {
- srcs: ["sse4_1.java"],
- },
- },
- },
+ name: "TestLib",
+ manifest: "manifest/AndroidManifest.xml",
+ srcs: ["lib.java"],
+ sdk_version: "current",
+ arch: {
+ x86: {
+ ssse3: {
+ srcs: ["ssse3.java"],
+ },
+ sse4_1: {
+ srcs: ["sse4_1.java"],
+ },
+ },
+ },
}
`,
ExpectedBazelTargets: []string{
@@ -686,6 +748,7 @@
})`,
"manifest": `"manifest/AndroidManifest.xml"`,
"resource_files": `[]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
}})
@@ -699,17 +762,18 @@
ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
android_library {
- name: "TestLib",
- manifest: "manifest/AndroidManifest.xml",
- srcs: ["lib.java"],
- arch: {
- arm: {
- srcs: ["arm_non_neon.java"],
- neon: {
- exclude_srcs: ["arm_non_neon.java"],
- },
- },
- },
+ name: "TestLib",
+ manifest: "manifest/AndroidManifest.xml",
+ srcs: ["lib.java"],
+ arch: {
+ arm: {
+ srcs: ["arm_non_neon.java"],
+ neon: {
+ exclude_srcs: ["arm_non_neon.java"],
+ },
+ },
+ },
+ sdk_version: "current",
}
`,
ExpectedBazelTargets: []string{
@@ -724,6 +788,7 @@
})`,
"manifest": `"manifest/AndroidManifest.xml"`,
"resource_files": `[]`,
+ "sdk_version": `"current"`, // use as default
}),
MakeNeverlinkDuplicateTarget("android_library", "TestLib"),
}})
@@ -736,6 +801,7 @@
name: "java-lib-1",
srcs: ["a.java", "b.java", "c.kt"],
bazel_module: { bp2build_available: true },
+ sdk_version: "current",
}
`,
ExpectedBazelTargets: []string{
@@ -745,6 +811,7 @@
"b.java",
"c.kt",
]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
},
@@ -759,6 +826,7 @@
srcs: [ "a.kt"],
kotlincflags: ["-flag1", "-flag2"],
bazel_module: { bp2build_available: true },
+ sdk_version: "current",
}
`,
ExpectedBazelTargets: []string{
@@ -768,6 +836,7 @@
"-flag1",
"-flag2",
]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
},
@@ -782,6 +851,7 @@
srcs: ["a.java", "b.java"],
common_srcs: ["c.kt"],
bazel_module: { bp2build_available: true },
+ sdk_version: "current",
}
`,
ExpectedBazelTargets: []string{
@@ -791,6 +861,7 @@
"b.java",
]`,
"common_srcs": `["c.kt"]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("kt_jvm_library", "java-lib-1"),
},
@@ -804,6 +875,7 @@
name: "java-lib-1",
srcs: ["a.java"],
libs: ["java-lib-2"],
+ sdk_version: "current",
target: {
android: {
libs: ["java-lib-3"],
@@ -813,16 +885,19 @@
bazel_module: { bp2build_available: true },
}
- java_library{
- name: "java-lib-2",
+ java_library{
+ name: "java-lib-2",
+ bazel_module: { bp2build_available: false },
}
- java_library{
- name: "java-lib-3",
+ java_library{
+ name: "java-lib-3",
+ bazel_module: { bp2build_available: false },
}
- java_library{
- name: "java-lib-4",
+ java_library{
+ name: "java-lib-4",
+ bazel_module: { bp2build_available: false },
}
`,
ExpectedBazelTargets: []string{
@@ -839,14 +914,9 @@
],
"//conditions:default": [],
})`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
- MakeBazelTarget("java_library", "java-lib-2", AttrNameToString{}),
- MakeNeverlinkDuplicateTarget("java_library", "java-lib-2"),
- MakeBazelTarget("java_library", "java-lib-3", AttrNameToString{}),
- MakeNeverlinkDuplicateTarget("java_library", "java-lib-3"),
- MakeBazelTarget("java_library", "java-lib-4", AttrNameToString{}),
- MakeNeverlinkDuplicateTarget("java_library", "java-lib-4"),
},
})
}
@@ -857,6 +927,7 @@
Blueprint: `java_library {
name: "java-lib-1",
srcs: ["a.java", "b.java"],
+ sdk_version: "current",
target: {
android: {
exclude_srcs: ["a.java"],
@@ -871,6 +942,7 @@
"//build/bazel/platforms/os:android": [],
"//conditions:default": ["a.java"],
})`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
},
@@ -888,6 +960,7 @@
Blueprint: `java_library {
name: "java-lib-1",
srcs: ["a.java"],
+ sdk_version: "current",
java_resources: [":filegroup1"],
bazel_module: { bp2build_available: true },
}
@@ -904,6 +977,7 @@
"srcs": `["a.java"]`,
"resources": `[":filegroup1"]`,
"resource_strip_prefix": `"foo"`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
MakeBazelTargetNoRestrictions("filegroup", "filegroup1", AttrNameToString{
@@ -927,6 +1001,7 @@
name: "java-lib-1",
srcs: ["a.java"],
java_resources: ["a.res", ":filegroup1", ":filegroup2"],
+ sdk_version: "current",
bazel_module: { bp2build_available: true },
}
@@ -959,6 +1034,7 @@
"java-lib-1_filegroup_resources_filegroup1",
"java-lib-1_filegroup_resources_filegroup2",
]`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
MakeBazelTargetNoRestrictions("filegroup", "filegroup1", AttrNameToString{
diff --git a/bp2build/java_proto_conversion_test.go b/bp2build/java_proto_conversion_test.go
index f546cf4..5d6b088 100644
--- a/bp2build/java_proto_conversion_test.go
+++ b/bp2build/java_proto_conversion_test.go
@@ -68,6 +68,7 @@
type: "%s",
},
srcs: ["a.proto"],
+ sdk_version: "current",
}`
protoLibrary := MakeBazelTarget("proto_library", "java-protos_proto", AttrNameToString{
@@ -86,10 +87,12 @@
tc.javaLibraryType,
javaLibraryName,
AttrNameToString{
- "deps": `[":java-protos_proto"]`,
+ "deps": `[":java-protos_proto"]`,
+ "sdk_version": `"current"`,
}),
MakeBazelTarget("java_library", "java-protos", AttrNameToString{
- "exports": fmt.Sprintf(`[":%s"]`, javaLibraryName),
+ "exports": fmt.Sprintf(`[":%s"]`, javaLibraryName),
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-protos"),
},
@@ -104,6 +107,7 @@
name: "java-protos",
srcs: ["a.proto"],
java_version: "7",
+ sdk_version: "current",
}
`,
ExpectedBazelTargets: []string{
@@ -116,15 +120,20 @@
AttrNameToString{
"deps": `[":java-protos_proto"]`,
"java_version": `"7"`,
+ "sdk_version": `"current"`,
}),
MakeBazelTarget("java_library", "java-protos", AttrNameToString{
"exports": `[":java-protos_java_proto_lite"]`,
"java_version": `"7"`,
+ "sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTargetWithAttrs(
"java_library",
"java-protos",
- AttrNameToString{"java_version": `"7"`}),
+ AttrNameToString{
+ "java_version": `"7"`,
+ "sdk_version": `"current"`,
+ }),
},
})
}
diff --git a/bp2build/metrics.go b/bp2build/metrics.go
index 00f21c8..20002c6 100644
--- a/bp2build/metrics.go
+++ b/bp2build/metrics.go
@@ -9,11 +9,17 @@
"android/soong/android"
"android/soong/shared"
"android/soong/ui/metrics/bp2build_metrics_proto"
+
"google.golang.org/protobuf/proto"
"github.com/google/blueprint"
)
+type moduleInfo struct {
+ Name string `json:"name"`
+ Type string `json:"type"`
+}
+
// CodegenMetrics represents information about the Blueprint-to-BUILD
// conversion process.
// Use CreateCodegenMetrics() to get a properly initialized instance
@@ -30,6 +36,9 @@
// Map of converted modules and paths to call
// NOTE: NOT in the .proto
convertedModulePathMap map[string]string
+
+ // Name and type of converted modules
+ convertedModuleWithType []moduleInfo
}
func CreateCodegenMetrics() CodegenMetrics {
@@ -191,6 +200,10 @@
// Undo prebuilt_ module name prefix modifications
moduleName := android.RemoveOptionalPrebuiltPrefix(m.Name())
metrics.serialized.ConvertedModules = append(metrics.serialized.ConvertedModules, moduleName)
+ metrics.convertedModuleWithType = append(metrics.convertedModuleWithType, moduleInfo{
+ moduleName,
+ moduleType,
+ })
metrics.convertedModulePathMap[moduleName] = "//" + dir
metrics.serialized.ConvertedModuleTypeCount[moduleType] += 1
metrics.serialized.TotalModuleTypeCount[moduleType] += 1
diff --git a/bp2build/testing.go b/bp2build/testing.go
index 18ae82d..42d955e 100644
--- a/bp2build/testing.go
+++ b/bp2build/testing.go
@@ -688,7 +688,9 @@
}
func MakeNeverlinkDuplicateTarget(moduleType string, name string) string {
- return MakeNeverlinkDuplicateTargetWithAttrs(moduleType, name, AttrNameToString{})
+ return MakeNeverlinkDuplicateTargetWithAttrs(moduleType, name, AttrNameToString{
+ "sdk_version": `"current"`, // use as default
+ })
}
func MakeNeverlinkDuplicateTargetWithAttrs(moduleType string, name string, extraAttrs AttrNameToString) string {
diff --git a/cc/bp2build.go b/cc/bp2build.go
index 7f78e28..83553c8 100644
--- a/cc/bp2build.go
+++ b/cc/bp2build.go
@@ -851,7 +851,7 @@
return ret
}
-// bp2BuildParseBaseProps returns all compiler, linker, library attributes of a cc module..
+// bp2BuildParseBaseProps returns all compiler, linker, library attributes of a cc module.
func bp2BuildParseBaseProps(ctx android.Bp2buildMutatorContext, module *Module) baseAttributes {
archVariantCompilerProps := module.GetArchVariantProperties(ctx, &BaseCompilerProperties{})
archVariantLinkerProps := module.GetArchVariantProperties(ctx, &BaseLinkerProperties{})
@@ -1936,6 +1936,8 @@
sanitizerFeatures := bazel.StringListAttribute{}
sanitizerCopts := bazel.StringListAttribute{}
sanitizerCompilerInputs := bazel.LabelListAttribute{}
+ memtagFeatures := bazel.StringListAttribute{}
+ memtagFeature := ""
bp2BuildPropParseHelper(ctx, m, &SanitizeProperties{}, func(axis bazel.ConfigurationAxis, config string, props interface{}) {
var features []string
if sanitizerProps, ok := props.(*SanitizeProperties); ok {
@@ -1960,9 +1962,18 @@
features = append(features, "android_cfi_assembly_support")
}
}
+
+ if sanitizerProps.Sanitize.Memtag_heap != nil {
+ if (axis == bazel.NoConfigAxis && memtagFeature == "") ||
+ (axis == bazel.OsArchConfigurationAxis && config == bazel.OsArchAndroidArm64) {
+ memtagFeature = setMemtagValue(sanitizerProps, &memtagFeatures)
+ }
+ }
sanitizerFeatures.SetSelectValue(axis, config, features)
}
})
+ sanitizerFeatures.Append(memtagFeatures)
+
return sanitizerValues{
features: sanitizerFeatures,
copts: sanitizerCopts,
@@ -1970,6 +1981,26 @@
}
}
+func setMemtagValue(sanitizerProps *SanitizeProperties, memtagFeatures *bazel.StringListAttribute) string {
+ var features []string
+ if proptools.Bool(sanitizerProps.Sanitize.Memtag_heap) {
+ features = append(features, "memtag_heap")
+ } else {
+ features = append(features, "-memtag_heap")
+ }
+ // Logic comes from: https://cs.android.com/android/platform/superproject/main/+/32ea1afbd1148b0b78553f24fa61116c999eb968:build/soong/cc/sanitize.go;l=910
+ if sanitizerProps.Sanitize.Diag.Memtag_heap != nil {
+ if proptools.Bool(sanitizerProps.Sanitize.Diag.Memtag_heap) {
+ features = append(features, "diag_memtag_heap")
+ } else {
+ features = append(features, "-diag_memtag_heap")
+ }
+ }
+ memtagFeatures.SetSelectValue(bazel.OsArchConfigurationAxis, bazel.OsArchAndroidArm64, features)
+
+ return features[0]
+}
+
func bp2buildLtoFeatures(ctx android.BazelConversionPathContext, m *Module) bazel.StringListAttribute {
lto_feature_name := "android_thin_lto"
ltoBoolFeatures := bazel.BoolAttribute{}
diff --git a/cc/test.go b/cc/test.go
index adc80c2..c643862 100644
--- a/cc/test.go
+++ b/cc/test.go
@@ -720,6 +720,21 @@
}
}
+ // The logic comes from https://cs.android.com/android/platform/superproject/main/+/0df8153267f96da877febc5332240fa06ceb8533:build/soong/cc/sanitize.go;l=488
+ var features bazel.StringListAttribute
+ curFeatures := testBinaryAttrs.binaryAttributes.Features.SelectValue(bazel.OsArchConfigurationAxis, bazel.OsArchAndroidArm64)
+ var newFeatures []string
+ if !android.InList("memtag_heap", curFeatures) && !android.InList("-memtag_heap", curFeatures) {
+ newFeatures = append(newFeatures, "memtag_heap")
+ if !android.InList("diag_memtag_heap", curFeatures) && !android.InList("-diag_memtag_heap", curFeatures) {
+ newFeatures = append(newFeatures, "diag_memtag_heap")
+ }
+ }
+
+ features.SetSelectValue(bazel.OsArchConfigurationAxis, bazel.OsArchAndroidArm64, newFeatures)
+ testBinaryAttrs.binaryAttributes.Features.Append(features)
+ testBinaryAttrs.binaryAttributes.Features.DeduplicateAxesFromBase()
+
m.convertTidyAttributes(ctx, &testBinaryAttrs.tidyAttributes)
testBinary := m.linker.(*testBinary)
diff --git a/genrule/genrule.go b/genrule/genrule.go
index 8e3f278..d1c2f13 100644
--- a/genrule/genrule.go
+++ b/genrule/genrule.go
@@ -912,7 +912,7 @@
Out []string
}
-type bazelGenruleAttributes struct {
+type BazelGenruleAttributes struct {
Srcs bazel.LabelListAttribute
Outs []string
Tools bazel.LabelListAttribute
@@ -1036,7 +1036,7 @@
break
}
}
- attrs := &bazelGenruleAttributes{
+ attrs := &BazelGenruleAttributes{
Srcs: srcs,
Outs: outs,
Cmd: cmdProp,
diff --git a/java/app.go b/java/app.go
index 7cf86c0..d71cd77 100755
--- a/java/app.go
+++ b/java/app.go
@@ -29,6 +29,7 @@
"android/soong/bazel"
"android/soong/cc"
"android/soong/dexpreopt"
+ "android/soong/genrule"
"android/soong/tradefed"
)
@@ -1059,6 +1060,7 @@
module.Module.dexProperties.Optimize.EnabledByDefault = true
module.Module.dexProperties.Optimize.Shrink = proptools.BoolPtr(true)
+ module.Module.dexProperties.Optimize.Proguard_compatibility = proptools.BoolPtr(false)
module.Module.properties.Instrument = true
module.Module.properties.Supports_static_instrumentation = true
@@ -1613,6 +1615,8 @@
Certificate bazel.LabelAttribute
Certificate_name bazel.StringAttribute
Manifest_values *manifestValueAttribute
+ Optimize *bool
+ Proguard_specs bazel.LabelListAttribute
}
// ConvertWithBp2build is used to convert android_app to Bazel.
@@ -1664,6 +1668,41 @@
Manifest_values: manifestValues,
}
+ if !BoolDefault(a.dexProperties.Optimize.Enabled, true) {
+ appAttrs.Optimize = proptools.BoolPtr(false)
+ } else {
+ handCraftedFlags := ""
+ if Bool(a.dexProperties.Optimize.Ignore_warnings) {
+ handCraftedFlags += "-ignorewarning "
+ }
+ if !Bool(a.dexProperties.Optimize.Shrink) {
+ handCraftedFlags += "-dontshrink "
+ }
+ if !Bool(a.dexProperties.Optimize.Optimize) {
+ handCraftedFlags += "-dontoptimize "
+ }
+ if !Bool(a.dexProperties.Optimize.Obfuscate) {
+ handCraftedFlags += "-dontobfuscate "
+ }
+ appAttrs.Proguard_specs = bazel.MakeLabelListAttribute(android.BazelLabelForModuleSrc(ctx, a.dexProperties.Optimize.Proguard_flags_files))
+ if handCraftedFlags != "" {
+ generatedFlagFileRuleName := a.Name() + "_proguard_flags"
+ ctx.CreateBazelTargetModule(bazel.BazelTargetModuleProperties{
+ Rule_class: "genrule",
+ }, android.CommonAttributes{
+ Name: generatedFlagFileRuleName,
+ SkipData: proptools.BoolPtr(true),
+ }, &genrule.BazelGenruleAttributes{
+ Outs: []string{a.Name() + "_proguard.flags"},
+ Cmd: bazel.StringAttribute{
+ Value: proptools.StringPtr("echo " + handCraftedFlags + "> $(OUTS)"),
+ },
+ })
+ appAttrs.Proguard_specs.Add(bazel.MakeLabelAttribute(":" + generatedFlagFileRuleName))
+ }
+
+ }
+
props := bazel.BazelTargetModuleProperties{
Rule_class: "android_binary",
Bzl_load_location: "//build/bazel/rules/android:android_binary.bzl",
diff --git a/java/dex.go b/java/dex.go
index cd13e39..21937e1 100644
--- a/java/dex.go
+++ b/java/dex.go
@@ -45,8 +45,8 @@
// Whether to continue building even if warnings are emitted. Defaults to true.
Ignore_warnings *bool
- // If true, runs R8 in Proguard compatibility mode (default).
- // Otherwise, runs R8 in full mode.
+ // If true, runs R8 in Proguard compatibility mode, otherwise runs R8 in full mode.
+ // Defaults to false for apps, true for libraries and tests.
Proguard_compatibility *bool
// If true, optimize for size by removing unused code. Defaults to true for apps,
diff --git a/java/java.go b/java/java.go
index 4b01c31..521aef3 100644
--- a/java/java.go
+++ b/java/java.go
@@ -1735,7 +1735,6 @@
cmd.Flag("--color").
Flag("--quiet").
- Flag("--format=v2").
Flag("--include-annotations").
// The flag makes nullability issues as warnings rather than errors by replacing
// @Nullable/@NonNull in the listed packages APIs with @RecentlyNullable/@RecentlyNonNull,
@@ -1747,14 +1746,13 @@
FlagWithArg("--hide ", "InvalidNullabilityOverride").
FlagWithArg("--hide ", "ChangedDefault")
- // Force metalava to ignore classes on the classpath when an API file contains missing classes.
- // See b/285140653 for more information.
+ // The main purpose of the `--api-class-resolution api` option is to force metalava to ignore
+ // classes on the classpath when an API file contains missing classes. However, as this command
+ // does not specify `--classpath` this is not needed for that. However, this is also used as a
+ // signal to the special metalava code for generating stubs from text files that it needs to add
+ // some additional items into the API (e.g. default constructors).
cmd.FlagWithArg("--api-class-resolution ", "api")
- // Force metalava to sort overloaded methods by their order in the source code.
- // See b/285312164 for more information.
- cmd.FlagWithArg("--api-overloaded-method-order ", "source")
-
return cmd
}
@@ -1916,7 +1914,7 @@
FlagWithArg("-C ", stubsDir.String()).
FlagWithArg("-D ", stubsDir.String())
- rule.Build("metalava", "metalava merged")
+ rule.Build("metalava", "metalava merged text")
if depApiSrcsStubsJar == nil {
var flags javaBuilderFlags
@@ -2905,6 +2903,11 @@
var deps bazel.LabelListAttribute
var staticDeps bazel.LabelListAttribute
+ if proptools.String(m.deviceProperties.Sdk_version) == "" && m.DeviceSupported() {
+ ctx.MarkBp2buildUnconvertible(bp2build_metrics_proto.UnconvertedReasonType_PROPERTY_UNSUPPORTED, "sdk_version unset")
+ return &javaCommonAttributes{}, &bp2BuildJavaInfo{}, false
+ }
+
archVariantProps := m.GetArchVariantProperties(ctx, &CommonProperties{})
for axis, configToProps := range archVariantProps {
for config, _props := range configToProps {
diff --git a/python/python.go b/python/python.go
index 8b31c6c..7d77ca7 100644
--- a/python/python.go
+++ b/python/python.go
@@ -462,8 +462,7 @@
// generate the zipfile of all source and data files
p.srcsZip = p.createSrcsZip(ctx, pkgPath)
- // TODO(b/278602456): precompilation temporarily disabled for python3.11 upgrade
- p.precompiledSrcsZip = p.srcsZip //p.precompileSrcs(ctx)
+ p.precompiledSrcsZip = p.precompileSrcs(ctx)
}
func isValidPythonPath(path string) error {