Home | History | Annotate | Download | only in core
      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 
      9 my_skip_this_target :=
     10 ifneq ($(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   else ifeq (never, $(LOCAL_SANITIZE))
     16     my_skip_this_target := true
     17   endif
     18 endif
     19 
     20 ifneq (true,$(my_skip_this_target))
     21 $(call record-module-type,EXECUTABLE)
     22 
     23 ifeq ($(TARGET_TRANSLATE_2ND_ARCH),true)
     24 # If a native test explicity specifies to build only for the translation arch,
     25 # we'll still need LOCAL_MULTILIB=both and let module_arch_supported.mk choose
     26 # to build only for TARGET_2ND_ARCH.
     27 ifneq (1,$(words $(LOCAL_MODULE_TARGET_ARCH)))
     28 LOCAL_MULTILIB := first
     29 endif
     30 endif
     31 
     32 my_prefix := TARGET_
     33 include $(BUILD_SYSTEM)/multilib.mk
     34 
     35 ifeq ($(my_module_multilib),both)
     36 ifneq ($(LOCAL_MODULE_CLASS),NATIVE_TESTS)
     37 ifeq ($(LOCAL_MODULE_PATH_32)$(LOCAL_MODULE_STEM_32),)
     38 $(error $(LOCAL_PATH): LOCAL_MODULE_STEM_32 or LOCAL_MODULE_PATH_32 is required for LOCAL_MULTILIB := both for module $(LOCAL_MODULE))
     39 endif
     40 ifeq ($(LOCAL_MODULE_PATH_64)$(LOCAL_MODULE_STEM_64),)
     41 $(error $(LOCAL_PATH): LOCAL_MODULE_STEM_64 or LOCAL_MODULE_PATH_64 is required for LOCAL_MULTILIB := both for module $(LOCAL_MODULE))
     42 endif
     43 endif
     44 else #!LOCAL_MULTILIB == both
     45 LOCAL_NO_2ND_ARCH_MODULE_SUFFIX := true
     46 endif
     47 
     48 # if TARGET_PREFER_32_BIT_EXECUTABLES is set, try to build 32-bit first
     49 ifdef TARGET_2ND_ARCH
     50 ifeq ($(TARGET_PREFER_32_BIT_EXECUTABLES),true)
     51 LOCAL_2ND_ARCH_VAR_PREFIX := $(TARGET_2ND_ARCH_VAR_PREFIX)
     52 else
     53 LOCAL_2ND_ARCH_VAR_PREFIX :=
     54 endif
     55 endif
     56 
     57 my_skip_non_preferred_arch :=
     58 
     59 # check if preferred arch is supported
     60 include $(BUILD_SYSTEM)/module_arch_supported.mk
     61 ifeq ($(my_module_arch_supported),true)
     62 # first arch is supported
     63 include $(BUILD_SYSTEM)/executable_internal.mk
     64 ifneq ($(my_module_multilib),both)
     65 my_skip_non_preferred_arch := true
     66 endif
     67 endif
     68 
     69 # check if preferred arch was not supported or asked to build both
     70 ifndef my_skip_non_preferred_arch
     71 ifdef TARGET_2ND_ARCH
     72 
     73 # check if the non-preferred arch is the primary or secondary
     74 ifeq ($(TARGET_PREFER_32_BIT_EXECUTABLES),true)
     75 LOCAL_2ND_ARCH_VAR_PREFIX :=
     76 else
     77 LOCAL_2ND_ARCH_VAR_PREFIX := $(TARGET_2ND_ARCH_VAR_PREFIX)
     78 endif
     79 
     80 # check if non-preferred arch is supported
     81 include $(BUILD_SYSTEM)/module_arch_supported.mk
     82 ifeq ($(my_module_arch_supported),true)
     83 # non-preferred arch is supported
     84 LOCAL_BUILT_MODULE :=
     85 LOCAL_INSTALLED_MODULE :=
     86 LOCAL_INTERMEDIATE_TARGETS :=
     87 include $(BUILD_SYSTEM)/executable_internal.mk
     88 endif
     89 endif # TARGET_2ND_ARCH
     90 endif # !my_skip_non_preferred_arch || LOCAL_MULTILIB
     91 LOCAL_2ND_ARCH_VAR_PREFIX :=
     92 LOCAL_NO_2ND_ARCH_MODULE_SUFFIX :=
     93 
     94 my_module_arch_supported :=
     95 
     96 endif
     97