Real "LOCAL_MULTILIB := both" for prebuilts

This uses the fact that unsetting LOCAL_MULTILIB equals "either".
It's useful to build for both 32-bit and 64-bit in the same prebuilt
module definition.

Bug: 13751317
Change-Id: I4f1625a83e13f22f807039afebae73f69ed35918
diff --git a/core/multilib.mk b/core/multilib.mk
index f630c94..a3ced65 100644
--- a/core/multilib.mk
+++ b/core/multilib.mk
@@ -1,4 +1,4 @@
-# Translate LOCAL_32_BIT_ONLY and LOCAL_NO_2ND_ARCH to LOCAL_MULTILIB,
+# Translate LOCAL_32_BIT_ONLY to LOCAL_MULTILIB,
 # and check LOCAL_MULTILIB is a valid value.  Returns module's multilib
 # setting in my_module_multilib, or empty if not set.
 
diff --git a/core/package.mk b/core/package.mk
index 0861a79..78b65db 100644
--- a/core/package.mk
+++ b/core/package.mk
@@ -1,6 +1,5 @@
 # We don't automatically set up rules to build packages for both
 # TARGET_ARCH and TARGET_2ND_ARCH.
-# By default, an package is built for TARGET_ARCH.
 # To build it for TARGET_2ND_ARCH in a 64bit product, use "LOCAL_MULTILIB := 32".
 
 my_prefix := TARGET_
diff --git a/core/prebuilt.mk b/core/prebuilt.mk
index c280900..33f5dc6 100644
--- a/core/prebuilt.mk
+++ b/core/prebuilt.mk
@@ -14,26 +14,36 @@
 
 include $(BUILD_SYSTEM)/multilib.mk
 
-ifndef my_module_multilib
-# prebuilts default to building for either architecture,
-# the first if its supported, otherwise the second.
-my_module_multilib := both
-endif
+my_skip_non_preferred_arch :=
 
 # check if first arch is supported
 include $(BUILD_SYSTEM)/module_arch_supported.mk
 ifeq ($(my_module_arch_supported),true)
 # first arch is supported
 include $(BUILD_SYSTEM)/prebuilt_internal.mk
-else ifneq (,$($(my_prefix)2ND_ARCH))
+ifneq ($(my_module_multilib),both)
+my_skip_non_preferred_arch := true
+endif # $(my_module_multilib)
+endif # $(my_module_arch_supported)
+
+ifndef my_skip_non_preferred_arch
+ifneq (,$($(my_prefix)2ND_ARCH))
 # check if secondary arch is supported
 LOCAL_2ND_ARCH_VAR_PREFIX := $($(my_prefix)2ND_ARCH_VAR_PREFIX)
 include $(BUILD_SYSTEM)/module_arch_supported.mk
 ifeq ($(my_module_arch_supported),true)
 # secondary arch is supported
+OVERRIDE_BUILT_MODULE_PATH :=
+LOCAL_BUILT_MODULE :=
+LOCAL_INSTALLED_MODULE :=
+LOCAL_MODULE_STEM :=
+LOCAL_BUILT_MODULE_STEM :=
+LOCAL_INSTALLED_MODULE_STEM :=
+LOCAL_INTERMEDIATE_TARGETS :=
 include $(BUILD_SYSTEM)/prebuilt_internal.mk
-endif
-endif # $(my_prefix)2ND_ARCH
+endif # $(my_module_arch_supported)
+endif # $($(my_prefix)2ND_ARCH)
+endif # $(my_skip_non_preferred_arch) not true
 
 LOCAL_2ND_ARCH_VAR_PREFIX :=
 
diff --git a/core/prebuilt_internal.mk b/core/prebuilt_internal.mk
index 089cc63..f63d291 100644
--- a/core/prebuilt_internal.mk
+++ b/core/prebuilt_internal.mk
@@ -19,13 +19,19 @@
 # Not much sense to check build prebuilts
 LOCAL_DONT_CHECK_MODULE := true
 
+my_32_64_bit_suffix := $(if $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)IS_64_BIT),64,32)
+
 ifdef LOCAL_PREBUILT_MODULE_FILE
   my_prebuilt_src_file := $(LOCAL_PREBUILT_MODULE_FILE)
 else
   ifdef LOCAL_SRC_FILES_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)
     my_prebuilt_src_file := $(LOCAL_PATH)/$(LOCAL_SRC_FILES_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH))
   else
-    my_prebuilt_src_file := $(LOCAL_PATH)/$(LOCAL_SRC_FILES)
+    ifdef LOCAL_SRC_FILES_$(my_32_64_bit_suffix)
+      my_prebuilt_src_file := $(LOCAL_PATH)/$(LOCAL_SRC_FILES_$(my_32_64_bit_suffix))
+    else
+      my_prebuilt_src_file := $(LOCAL_PATH)/$(LOCAL_SRC_FILES)
+    endif
   endif
 endif