aboutsummaryrefslogtreecommitdiffstats
path: root/android/arch.go
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2017-12-05 13:42:45 -0800
committerColin Cross <ccross@android.com>2017-12-06 04:16:21 +0000
commit6b4a32d7712726a21ef153c964fee1f3c508ac30 (patch)
tree55ad862236f276101d1898a4a39909afa0cd7830 /android/arch.go
parent0db5568612385e014ad40832660a34d935aba954 (diff)
downloadbuild_soong-6b4a32d7712726a21ef153c964fee1f3c508ac30.tar.gz
build_soong-6b4a32d7712726a21ef153c964fee1f3c508ac30.tar.bz2
build_soong-6b4a32d7712726a21ef153c964fee1f3c508ac30.zip
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
Diffstat (limited to 'android/arch.go')
-rw-r--r--android/arch.go41
1 files changed, 25 insertions, 16 deletions
diff --git a/android/arch.go b/android/arch.go
index 7f9abc6b..af3919cf 100644
--- a/android/arch.go
+++ b/android/arch.go
@@ -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" {
+
+ switch multilib {
+ case "common":
+ buildTargets = getCommonTargets(targets)
+ case "common_first":
+ buildTargets = getCommonTargets(targets)
if prefer32 {
- multilib = "prefer32"
+ buildTargets = append(buildTargets, preferTargets(targets, "lib32", "lib64")...)
} else {
- multilib = "prefer64"
+ buildTargets = append(buildTargets, preferTargets(targets, "lib64", "lib32")...)
}
- }
- switch multilib {
- case "common":
- buildTargets = append(buildTargets, getCommonTargets(targets)...)
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 "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")
+ case "first":
+ if prefer32 {
+ buildTargets = preferTargets(targets, "lib32", "lib64")
+ } else {
+ buildTargets = preferTargets(targets, "lib64", "lib32")
}
+ case "prefer32":
+ buildTargets = preferTargets(targets, "lib32", "lib64")
default:
return nil, fmt.Errorf(`compile_multilib must be "both", "first", "32", "64", or "prefer32" found %q`,
multilib)