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
This commit is contained in:
@@ -1072,19 +1072,30 @@ func getCommonTargets(targets []Target) []Target {
|
||||
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 @@ func decodeMultilib(multilib string, targets []Target, prefer32 bool) ([]Target,
|
||||
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)
|
||||
|
Reference in New Issue
Block a user