1# We don't automatically set up rules to build executables for both 2# TARGET_ARCH and TARGET_2ND_ARCH. 3# By default, an executable is built for TARGET_ARCH. 4# To build it for TARGET_2ND_ARCH in a 64bit product, use "LOCAL_MULTILIB := 32" 5# To build it for both set LOCAL_MULTILIB := both and specify 6# LOCAL_MODULE_PATH_32 and LOCAL_MODULE_PATH_64 or LOCAL_MODULE_STEM_32 and 7# LOCAL_MODULE_STEM_64 8 9my_skip_this_target := 10ifneq ($(filter address,$(SANITIZE_TARGET)),) 11 ifeq (true,$(LOCAL_FORCE_STATIC_EXECUTABLE)) 12 my_skip_this_target := true 13 else ifeq (false, $(LOCAL_CLANG)) 14 my_skip_this_target := true 15 endif 16endif 17 18ifneq (true,$(my_skip_this_target)) 19 20my_prefix := TARGET_ 21include $(BUILD_SYSTEM)/multilib.mk 22 23ifeq ($(my_module_multilib),both) 24ifeq ($(LOCAL_MODULE_PATH_32)$(LOCAL_MODULE_STEM_32),) 25$(error $(LOCAL_PATH): LOCAL_MODULE_STEM_32 or LOCAL_MODULE_PATH_32 is required for LOCAL_MULTILIB := both for module $(LOCAL_MODULE)) 26endif 27ifeq ($(LOCAL_MODULE_PATH_64)$(LOCAL_MODULE_STEM_64),) 28$(error $(LOCAL_PATH): LOCAL_MODULE_STEM_64 or LOCAL_MODULE_PATH_64 is required for LOCAL_MULTILIB := both for module $(LOCAL_MODULE)) 29endif 30else #!LOCAL_MULTILIB == both 31LOCAL_NO_2ND_ARCH_MODULE_SUFFIX := true 32endif 33 34# if TARGET_PREFER_32_BIT_EXECUTABLES is set, try to build 32-bit first 35ifdef TARGET_2ND_ARCH 36ifeq ($(TARGET_PREFER_32_BIT_EXECUTABLES),true) 37LOCAL_2ND_ARCH_VAR_PREFIX := $(TARGET_2ND_ARCH_VAR_PREFIX) 38else 39LOCAL_2ND_ARCH_VAR_PREFIX := 40endif 41endif 42 43my_skip_non_preferred_arch := 44 45# check if preferred arch is supported 46include $(BUILD_SYSTEM)/module_arch_supported.mk 47ifeq ($(my_module_arch_supported),true) 48# first arch is supported 49include $(BUILD_SYSTEM)/executable_internal.mk 50ifneq ($(my_module_multilib),both) 51my_skip_non_preferred_arch := true 52endif 53endif 54 55# check if preferred arch was not supported or asked to build both 56ifndef my_skip_non_preferred_arch 57ifdef TARGET_2ND_ARCH 58 59# check if the non-preferred arch is the primary or secondary 60ifeq ($(TARGET_PREFER_32_BIT_EXECUTABLES),true) 61LOCAL_2ND_ARCH_VAR_PREFIX := 62else 63LOCAL_2ND_ARCH_VAR_PREFIX := $(TARGET_2ND_ARCH_VAR_PREFIX) 64endif 65 66# check if non-preferred arch is supported 67include $(BUILD_SYSTEM)/module_arch_supported.mk 68ifeq ($(my_module_arch_supported),true) 69# non-preferred arch is supported 70OVERRIDE_BUILT_MODULE_PATH := 71LOCAL_BUILT_MODULE := 72LOCAL_INSTALLED_MODULE := 73LOCAL_INTERMEDIATE_TARGETS := 74include $(BUILD_SYSTEM)/executable_internal.mk 75endif 76endif # TARGET_2ND_ARCH 77endif # !my_skip_non_preferred_arch || LOCAL_MULTILIB 78LOCAL_2ND_ARCH_VAR_PREFIX := 79LOCAL_NO_2ND_ARCH_MODULE_SUFFIX := 80 81my_module_arch_supported := 82 83endif 84