Split java_binary modules into common and binary variants
Add a common_first multilib type and use it for java.Binary
so that the java part is compiled as a "common" arch type
but the wrapper script is installed as a "linux_glibc" arch
type. This allows java_binary to be used as a tool dependency
for a genrule.
Bug: 68397812
Test: TestJavaBinary
Change-Id: I809060839ce8878300da3fb76426ceb1ea6b0e8e
diff --git a/android/arch.go b/android/arch.go
index 7f9abc6..af3919c 100644
--- a/android/arch.go
+++ b/android/arch.go
@@ -1072,19 +1072,30 @@
return ret
}
+func preferTargets(targets []Target, filters ...string) []Target {
+ for _, filter := range filters {
+ buildTargets := filterMultilibTargets(targets, filter)
+ if len(buildTargets) > 0 {
+ return buildTargets
+ }
+ }
+ return nil
+}
+
// Use the module multilib setting to select one or more targets from a target list
func decodeMultilib(multilib string, targets []Target, prefer32 bool) ([]Target, error) {
buildTargets := []Target{}
- if multilib == "first" {
- if prefer32 {
- multilib = "prefer32"
- } else {
- multilib = "prefer64"
- }
- }
+
switch multilib {
case "common":
- buildTargets = append(buildTargets, getCommonTargets(targets)...)
+ buildTargets = getCommonTargets(targets)
+ case "common_first":
+ buildTargets = getCommonTargets(targets)
+ if prefer32 {
+ buildTargets = append(buildTargets, preferTargets(targets, "lib32", "lib64")...)
+ } else {
+ buildTargets = append(buildTargets, preferTargets(targets, "lib64", "lib32")...)
+ }
case "both":
if prefer32 {
buildTargets = append(buildTargets, filterMultilibTargets(targets, "lib32")...)
@@ -1097,16 +1108,14 @@
buildTargets = filterMultilibTargets(targets, "lib32")
case "64":
buildTargets = filterMultilibTargets(targets, "lib64")
+ case "first":
+ if prefer32 {
+ buildTargets = preferTargets(targets, "lib32", "lib64")
+ } else {
+ buildTargets = preferTargets(targets, "lib64", "lib32")
+ }
case "prefer32":
- buildTargets = filterMultilibTargets(targets, "lib32")
- if len(buildTargets) == 0 {
- buildTargets = filterMultilibTargets(targets, "lib64")
- }
- case "prefer64":
- buildTargets = filterMultilibTargets(targets, "lib64")
- if len(buildTargets) == 0 {
- buildTargets = filterMultilibTargets(targets, "lib32")
- }
+ buildTargets = preferTargets(targets, "lib32", "lib64")
default:
return nil, fmt.Errorf(`compile_multilib must be "both", "first", "32", "64", or "prefer32" found %q`,
multilib)