Merge "Support arch features in bp2build"
diff --git a/apex/apex_test.go b/apex/apex_test.go
index 49a5d2a..d6803f6 100644
--- a/apex/apex_test.go
+++ b/apex/apex_test.go
@@ -8846,6 +8846,16 @@
android.FixtureMergeEnv(map[string]string{
"EMMA_INSTRUMENT": "true",
}),
+ // need to mock jacocoagent here to satisfy dependency added for
+ // instrumented libraries at build time
+ android.FixtureAddFile("jacocoagent/Android.bp", []byte(`
+ java_library {
+ name: "jacocoagent",
+ srcs: ["Test.java"],
+ system_modules: "none",
+ sdk_version: "none",
+ }
+ `)),
).RunTest(t)
// Make sure jacoco ran on both mylib and mybootclasspathlib
diff --git a/bp2build/prebuilt_etc_conversion_test.go b/bp2build/prebuilt_etc_conversion_test.go
index 6738b4b..b1e70dc 100644
--- a/bp2build/prebuilt_etc_conversion_test.go
+++ b/bp2build/prebuilt_etc_conversion_test.go
@@ -181,3 +181,87 @@
"dir": `"etc"`,
})}})
}
+
+func TestFilenameAsProperty(t *testing.T) {
+ runPrebuiltEtcTestCase(t, Bp2buildTestCase{
+ Description: "prebuilt_etc - filename is specified as a property ",
+ Filesystem: map[string]string{},
+ Blueprint: `
+prebuilt_etc {
+ name: "foo",
+ src: "fooSrc",
+ filename: "fooFileName",
+}
+`,
+ ExpectedBazelTargets: []string{
+ MakeBazelTarget("prebuilt_file", "foo", AttrNameToString{
+ "filename": `"fooFileName"`,
+ "src": `"fooSrc"`,
+ "dir": `"etc"`,
+ })}})
+}
+
+func TestFileNameFromSrc(t *testing.T) {
+ runPrebuiltEtcTestCase(t, Bp2buildTestCase{
+ Description: "prebuilt_etc - filename_from_src is true ",
+ Filesystem: map[string]string{},
+ Blueprint: `
+prebuilt_etc {
+ name: "foo",
+ filename_from_src: true,
+ src: "fooSrc",
+}
+`,
+ ExpectedBazelTargets: []string{
+ MakeBazelTarget("prebuilt_file", "foo", AttrNameToString{
+ "filename": `"fooSrc"`,
+ "src": `"fooSrc"`,
+ "dir": `"etc"`,
+ })}})
+}
+
+func TestFileNameFromSrcMultipleSrcs(t *testing.T) {
+ runPrebuiltEtcTestCase(t, Bp2buildTestCase{
+ Description: "prebuilt_etc - filename_from_src is true but there are multiple srcs",
+ Filesystem: map[string]string{},
+ Blueprint: `
+prebuilt_etc {
+ name: "foo",
+ filename_from_src: true,
+ arch: {
+ arm: {
+ src: "barSrc",
+ },
+ arm64: {
+ src: "bazSrc",
+ },
+ }
+}
+`,
+ ExpectedBazelTargets: []string{
+ MakeBazelTarget("prebuilt_file", "foo", AttrNameToString{
+ "filename_from_src": `True`,
+ "dir": `"etc"`,
+ "src": `select({
+ "//build/bazel/platforms/arch:arm": "barSrc",
+ "//build/bazel/platforms/arch:arm64": "bazSrc",
+ "//conditions:default": None,
+ })`,
+ })}})
+}
+
+func TestFilenameFromModuleName(t *testing.T) {
+ runPrebuiltEtcTestCase(t, Bp2buildTestCase{
+ Description: "prebuilt_etc - neither filename nor filename_from_src are specified ",
+ Filesystem: map[string]string{},
+ Blueprint: `
+prebuilt_etc {
+ name: "foo",
+}
+`,
+ ExpectedBazelTargets: []string{
+ MakeBazelTarget("prebuilt_file", "foo", AttrNameToString{
+ "filename": `"foo"`,
+ "dir": `"etc"`,
+ })}})
+}
diff --git a/etc/prebuilt_etc.go b/etc/prebuilt_etc.go
index 719771f..b2361ce 100644
--- a/etc/prebuilt_etc.go
+++ b/etc/prebuilt_etc.go
@@ -670,10 +670,11 @@
// For Bazel / bp2build
type bazelPrebuiltFileAttributes struct {
- Src bazel.LabelAttribute
- Filename string
- Dir string
- Installable bazel.BoolAttribute
+ Src bazel.LabelAttribute
+ Filename bazel.LabelAttribute
+ Dir string
+ Installable bazel.BoolAttribute
+ Filename_from_src bazel.BoolAttribute
}
// ConvertWithBp2build performs bp2build conversion of PrebuiltEtc
@@ -694,8 +695,18 @@
}
var filename string
- if module.properties.Filename != nil {
- filename = *module.properties.Filename
+ var filenameFromSrc bool
+ moduleProps := module.properties
+
+ if moduleProps.Filename != nil && *moduleProps.Filename != "" {
+ filename = *moduleProps.Filename
+ } else if moduleProps.Filename_from_src != nil && *moduleProps.Filename_from_src {
+ if moduleProps.Src != nil {
+ filename = *moduleProps.Src
+ }
+ filenameFromSrc = true
+ } else {
+ filename = ctx.ModuleName()
}
var dir = module.installDirBase
@@ -714,11 +725,16 @@
attrs := &bazelPrebuiltFileAttributes{
Src: src,
- Filename: filename,
Dir: dir,
Installable: installable,
}
+ if filename != "" {
+ attrs.Filename = bazel.LabelAttribute{Value: &bazel.Label{Label: filename}}
+ } else if filenameFromSrc {
+ attrs.Filename_from_src = bazel.BoolAttribute{Value: moduleProps.Filename_from_src}
+ }
+
props := bazel.BazelTargetModuleProperties{
Rule_class: "prebuilt_file",
Bzl_load_location: "//build/bazel/rules:prebuilt_file.bzl",
diff --git a/java/base.go b/java/base.go
index cf3b3d5..53f0f52 100644
--- a/java/base.go
+++ b/java/base.go
@@ -169,6 +169,8 @@
Output_params []string
}
+ // If true, then jacocoagent is automatically added as a libs dependency so that
+ // r8 will not strip instrumentation classes out of dexed libraries.
Instrument bool `blueprint:"mutated"`
// If true, then the module supports statically including the jacocoagent
// into the library.
@@ -787,6 +789,9 @@
} else if j.shouldInstrumentStatic(ctx) {
ctx.AddVariationDependencies(nil, staticLibTag, "jacocoagent")
}
+ if j.shouldInstrument(ctx) {
+ ctx.AddVariationDependencies(nil, libTag, "jacocoagent")
+ }
if j.useCompose() {
ctx.AddVariationDependencies(ctx.Config().BuildOSCommonTarget.Variations(), kotlinPluginTag,
diff --git a/java/bootclasspath_fragment_test.go b/java/bootclasspath_fragment_test.go
index f95c83f..2bfb255 100644
--- a/java/bootclasspath_fragment_test.go
+++ b/java/bootclasspath_fragment_test.go
@@ -96,10 +96,22 @@
}
func TestBootclasspathFragment_Coverage(t *testing.T) {
- prepareForTestWithFrameworkCoverage := android.FixtureMergeEnv(map[string]string{
- "EMMA_INSTRUMENT": "true",
- "EMMA_INSTRUMENT_FRAMEWORK": "true",
- })
+ prepareForTestWithFrameworkCoverage := android.GroupFixturePreparers(
+ android.FixtureMergeEnv(map[string]string{
+ "EMMA_INSTRUMENT": "true",
+ "EMMA_INSTRUMENT_FRAMEWORK": "true",
+ }),
+ // need to mock jacocoagent here to satisfy dependency added for
+ // instrumented libraries at build time
+ android.FixtureAddFile("jacocoagent/Android.bp", []byte(`
+ java_library {
+ name: "jacocoagent",
+ srcs: ["Test.java"],
+ system_modules: "none",
+ sdk_version: "none",
+ }
+ `)),
+ )
prepareWithBp := android.FixtureWithRootAndroidBp(`
bootclasspath_fragment {