Loading bp2build/android_app_conversion_test.go +81 −25 Original line number Diff line number Diff line Loading @@ -47,6 +47,11 @@ android_app { name: "TestApp", srcs: ["app.java"], sdk_version: "current", optimize: { shrink: true, optimize: true, obfuscate: true, }, } `, ExpectedBazelTargets: []string{ Loading Loading @@ -86,6 +91,14 @@ android_app { 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{ Loading @@ -103,6 +116,14 @@ android_app { "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)"`, }), }}) } Loading @@ -129,7 +150,10 @@ android_app { x86: { srcs: ["x86.java"], } } }, optimize: { enabled: false, }, } `, ExpectedBazelTargets: []string{ Loading @@ -142,6 +166,7 @@ android_app { "manifest": `"AndroidManifest.xml"`, "resource_files": `["res/res.png"]`, "sdk_version": `"current"`, "optimize": `False`, }), }}) } Loading @@ -157,6 +182,9 @@ android_app { name: "TestApp", certificate: ":foocert", sdk_version: "current", optimize: { enabled: false, }, } `, ExpectedBazelTargets: []string{ Loading @@ -165,6 +193,7 @@ android_app { "manifest": `"AndroidManifest.xml"`, "resource_files": `[]`, "sdk_version": `"current"`, // use as default "optimize": `False`, }), }}) } Loading @@ -182,6 +211,9 @@ android_app { name: "TestApp", certificate: "foocert", sdk_version: "current", optimize: { enabled: false, }, } `, ExpectedBazelTargets: []string{ Loading @@ -190,6 +222,7 @@ android_app { "manifest": `"AndroidManifest.xml"`, "resource_files": `[]`, "sdk_version": `"current"`, // use as default "optimize": `False`, }), }}) } Loading @@ -207,6 +240,9 @@ android_app { name: "TestApp", certificate: "foocert", sdk_version: "current", optimize: { enabled: false, }, } `, ExpectedBazelTargets: []string{ Loading @@ -215,6 +251,7 @@ android_app { "manifest": `"AndroidManifest.xml"`, "resource_files": `[]`, "sdk_version": `"current"`, // use as default "optimize": `False`, }), }}) } Loading @@ -225,12 +262,14 @@ func TestAndroidAppLibs(t *testing.T) { ModuleTypeUnderTest: "android_app", ModuleTypeUnderTestFactory: java.AndroidAppFactory, Filesystem: map[string]string{}, Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "foocert") + simpleModuleDoNotConvertBp2build("java_library", "barLib") + ` Blueprint: simpleModuleDoNotConvertBp2build("java_library", "barLib") + ` android_app { name: "foo", libs: ["barLib"], sdk_version: "current", optimize: { enabled: false, }, } `, ExpectedBazelTargets: []string{ Loading @@ -239,6 +278,7 @@ android_app { "resource_files": `[]`, "deps": `[":barLib-neverlink"]`, "sdk_version": `"current"`, // use as default "optimize": `False`, }), }}) } Loading @@ -260,6 +300,9 @@ android_app { manifest: "fooManifest.xml", libs: ["barLib"], sdk_version: "current", optimize: { enabled: false, }, } `, ExpectedBazelTargets: []string{ Loading @@ -278,6 +321,7 @@ android_app { "certificate": `":foocert"`, "manifest": `"fooManifest.xml"`, "sdk_version": `"current"`, // use as default "optimize": `False`, }), }}) } Loading @@ -290,15 +334,17 @@ func TestAndroidAppCommonSrcs(t *testing.T) { 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"], sdk_version: "current", optimize: { enabled: false, }, } java_library{ name: "barLib", Loading @@ -316,9 +362,9 @@ java_library{ }), MakeBazelTarget("android_binary", "foo", AttrNameToString{ "deps": `[":foo_kt"]`, "certificate_name": `"foocert"`, "manifest": `"fooManifest.xml"`, "sdk_version": `"current"`, // use as default "optimize": `False`, }), }}) } Loading @@ -331,14 +377,16 @@ func TestAndroidAppKotlinCflags(t *testing.T) { 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"], sdk_version: "current", optimize: { enabled: false, }, } `, ExpectedBazelTargets: []string{ Loading @@ -357,9 +405,9 @@ android_app { }), MakeBazelTarget("android_binary", "foo", AttrNameToString{ "deps": `[":foo_kt"]`, "certificate": `":foocert"`, "manifest": `"fooManifest.xml"`, "sdk_version": `"current"`, "optimize": `False`, }), }}) } Loading @@ -370,13 +418,16 @@ func TestAndroidAppManifestSdkVersionsProvided(t *testing.T) { 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", optimize: { enabled: false, }, } `, ExpectedBazelTargets: []string{ Loading @@ -389,6 +440,7 @@ android_app { "targetSdkVersion": "29", }`, "sdk_version": `"current"`, "optimize": `False`, }), }}) } Loading @@ -399,10 +451,13 @@ func TestAndroidAppMinAndTargetSdkDefaultToSdkVersion(t *testing.T) { ModuleTypeUnderTest: "android_app", ModuleTypeUnderTestFactory: java.AndroidAppFactory, Filesystem: map[string]string{}, Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "foocert") + ` Blueprint: ` android_app { name: "foo", sdk_version: "30", optimize: { enabled: false, }, } `, ExpectedBazelTargets: []string{ Loading @@ -414,6 +469,7 @@ android_app { "targetSdkVersion": "30", }`, "sdk_version": `"30"`, "optimize": `False`, }), }}) } genrule/genrule.go +2 −2 Original line number Diff line number Diff line Loading @@ -912,7 +912,7 @@ type genRuleProperties struct { Out []string } type bazelGenruleAttributes struct { type BazelGenruleAttributes struct { Srcs bazel.LabelListAttribute Outs []string Tools bazel.LabelListAttribute Loading Loading @@ -1036,7 +1036,7 @@ func (m *Module) ConvertWithBp2build(ctx android.TopDownMutatorContext) { break } } attrs := &bazelGenruleAttributes{ attrs := &BazelGenruleAttributes{ Srcs: srcs, Outs: outs, Cmd: cmdProp, Loading java/app.go +38 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import ( "android/soong/bazel" "android/soong/cc" "android/soong/dexpreopt" "android/soong/genrule" "android/soong/tradefed" ) Loading Loading @@ -1614,6 +1615,8 @@ type bazelAndroidAppAttributes struct { 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. Loading Loading @@ -1665,6 +1668,41 @@ func (a *AndroidApp) ConvertWithBp2build(ctx android.TopDownMutatorContext) { 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", Loading Loading
bp2build/android_app_conversion_test.go +81 −25 Original line number Diff line number Diff line Loading @@ -47,6 +47,11 @@ android_app { name: "TestApp", srcs: ["app.java"], sdk_version: "current", optimize: { shrink: true, optimize: true, obfuscate: true, }, } `, ExpectedBazelTargets: []string{ Loading Loading @@ -86,6 +91,14 @@ android_app { 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{ Loading @@ -103,6 +116,14 @@ android_app { "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)"`, }), }}) } Loading @@ -129,7 +150,10 @@ android_app { x86: { srcs: ["x86.java"], } } }, optimize: { enabled: false, }, } `, ExpectedBazelTargets: []string{ Loading @@ -142,6 +166,7 @@ android_app { "manifest": `"AndroidManifest.xml"`, "resource_files": `["res/res.png"]`, "sdk_version": `"current"`, "optimize": `False`, }), }}) } Loading @@ -157,6 +182,9 @@ android_app { name: "TestApp", certificate: ":foocert", sdk_version: "current", optimize: { enabled: false, }, } `, ExpectedBazelTargets: []string{ Loading @@ -165,6 +193,7 @@ android_app { "manifest": `"AndroidManifest.xml"`, "resource_files": `[]`, "sdk_version": `"current"`, // use as default "optimize": `False`, }), }}) } Loading @@ -182,6 +211,9 @@ android_app { name: "TestApp", certificate: "foocert", sdk_version: "current", optimize: { enabled: false, }, } `, ExpectedBazelTargets: []string{ Loading @@ -190,6 +222,7 @@ android_app { "manifest": `"AndroidManifest.xml"`, "resource_files": `[]`, "sdk_version": `"current"`, // use as default "optimize": `False`, }), }}) } Loading @@ -207,6 +240,9 @@ android_app { name: "TestApp", certificate: "foocert", sdk_version: "current", optimize: { enabled: false, }, } `, ExpectedBazelTargets: []string{ Loading @@ -215,6 +251,7 @@ android_app { "manifest": `"AndroidManifest.xml"`, "resource_files": `[]`, "sdk_version": `"current"`, // use as default "optimize": `False`, }), }}) } Loading @@ -225,12 +262,14 @@ func TestAndroidAppLibs(t *testing.T) { ModuleTypeUnderTest: "android_app", ModuleTypeUnderTestFactory: java.AndroidAppFactory, Filesystem: map[string]string{}, Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "foocert") + simpleModuleDoNotConvertBp2build("java_library", "barLib") + ` Blueprint: simpleModuleDoNotConvertBp2build("java_library", "barLib") + ` android_app { name: "foo", libs: ["barLib"], sdk_version: "current", optimize: { enabled: false, }, } `, ExpectedBazelTargets: []string{ Loading @@ -239,6 +278,7 @@ android_app { "resource_files": `[]`, "deps": `[":barLib-neverlink"]`, "sdk_version": `"current"`, // use as default "optimize": `False`, }), }}) } Loading @@ -260,6 +300,9 @@ android_app { manifest: "fooManifest.xml", libs: ["barLib"], sdk_version: "current", optimize: { enabled: false, }, } `, ExpectedBazelTargets: []string{ Loading @@ -278,6 +321,7 @@ android_app { "certificate": `":foocert"`, "manifest": `"fooManifest.xml"`, "sdk_version": `"current"`, // use as default "optimize": `False`, }), }}) } Loading @@ -290,15 +334,17 @@ func TestAndroidAppCommonSrcs(t *testing.T) { 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"], sdk_version: "current", optimize: { enabled: false, }, } java_library{ name: "barLib", Loading @@ -316,9 +362,9 @@ java_library{ }), MakeBazelTarget("android_binary", "foo", AttrNameToString{ "deps": `[":foo_kt"]`, "certificate_name": `"foocert"`, "manifest": `"fooManifest.xml"`, "sdk_version": `"current"`, // use as default "optimize": `False`, }), }}) } Loading @@ -331,14 +377,16 @@ func TestAndroidAppKotlinCflags(t *testing.T) { 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"], sdk_version: "current", optimize: { enabled: false, }, } `, ExpectedBazelTargets: []string{ Loading @@ -357,9 +405,9 @@ android_app { }), MakeBazelTarget("android_binary", "foo", AttrNameToString{ "deps": `[":foo_kt"]`, "certificate": `":foocert"`, "manifest": `"fooManifest.xml"`, "sdk_version": `"current"`, "optimize": `False`, }), }}) } Loading @@ -370,13 +418,16 @@ func TestAndroidAppManifestSdkVersionsProvided(t *testing.T) { 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", optimize: { enabled: false, }, } `, ExpectedBazelTargets: []string{ Loading @@ -389,6 +440,7 @@ android_app { "targetSdkVersion": "29", }`, "sdk_version": `"current"`, "optimize": `False`, }), }}) } Loading @@ -399,10 +451,13 @@ func TestAndroidAppMinAndTargetSdkDefaultToSdkVersion(t *testing.T) { ModuleTypeUnderTest: "android_app", ModuleTypeUnderTestFactory: java.AndroidAppFactory, Filesystem: map[string]string{}, Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "foocert") + ` Blueprint: ` android_app { name: "foo", sdk_version: "30", optimize: { enabled: false, }, } `, ExpectedBazelTargets: []string{ Loading @@ -414,6 +469,7 @@ android_app { "targetSdkVersion": "30", }`, "sdk_version": `"30"`, "optimize": `False`, }), }}) }
genrule/genrule.go +2 −2 Original line number Diff line number Diff line Loading @@ -912,7 +912,7 @@ type genRuleProperties struct { Out []string } type bazelGenruleAttributes struct { type BazelGenruleAttributes struct { Srcs bazel.LabelListAttribute Outs []string Tools bazel.LabelListAttribute Loading Loading @@ -1036,7 +1036,7 @@ func (m *Module) ConvertWithBp2build(ctx android.TopDownMutatorContext) { break } } attrs := &bazelGenruleAttributes{ attrs := &BazelGenruleAttributes{ Srcs: srcs, Outs: outs, Cmd: cmdProp, Loading
java/app.go +38 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import ( "android/soong/bazel" "android/soong/cc" "android/soong/dexpreopt" "android/soong/genrule" "android/soong/tradefed" ) Loading Loading @@ -1614,6 +1615,8 @@ type bazelAndroidAppAttributes struct { 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. Loading Loading @@ -1665,6 +1668,41 @@ func (a *AndroidApp) ConvertWithBp2build(ctx android.TopDownMutatorContext) { 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", Loading