executable.mk revision 74b32b8dfcd5fdab7348d473635b056aea484add
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_MODULE_STEM :=
74LOCAL_BUILT_MODULE_STEM :=
75LOCAL_INSTALLED_MODULE_STEM :=
76LOCAL_INTERMEDIATE_TARGETS :=
77include $(BUILD_SYSTEM)/executable_internal.mk
78endif
79endif # TARGET_2ND_ARCH
80endif # !my_skip_non_preferred_arch || LOCAL_MULTILIB
81LOCAL_2ND_ARCH_VAR_PREFIX :=
82LOCAL_NO_2ND_ARCH_MODULE_SUFFIX :=
83
84my_module_arch_supported :=
85
86endif
87