2014-01-18 08:17:28 +08:00
|
|
|
# We don't automatically set up rules to build executables for both
|
|
|
|
# TARGET_ARCH and TARGET_2ND_ARCH.
|
|
|
|
# By default, an executable is built for TARGET_ARCH.
|
2014-03-22 03:29:32 +08:00
|
|
|
# To build it for TARGET_2ND_ARCH in a 64bit product, use "LOCAL_MULTILIB := 32"
|
|
|
|
# To build it for both set LOCAL_MULTILIB := both and specify
|
|
|
|
# LOCAL_MODULE_PATH_32 and LOCAL_MODULE_PATH_64 or LOCAL_MODULE_STEM_32 and
|
|
|
|
# LOCAL_MODULE_STEM_64
|
|
|
|
|
2020-01-30 05:24:21 +08:00
|
|
|
ifdef LOCAL_IS_HOST_MODULE
|
|
|
|
$(call pretty-error,BUILD_EXECUTABLE is incompatible with LOCAL_IS_HOST_MODULE. Use BUILD_HOST_EXECUTABLE instead.)
|
|
|
|
endif
|
|
|
|
|
2015-06-12 04:57:10 +08:00
|
|
|
my_skip_this_target :=
|
2015-09-19 02:54:43 +08:00
|
|
|
ifneq ($(filter address,$(SANITIZE_TARGET)),)
|
2015-06-12 04:57:10 +08:00
|
|
|
ifeq (true,$(LOCAL_FORCE_STATIC_EXECUTABLE))
|
|
|
|
my_skip_this_target := true
|
|
|
|
else ifeq (false, $(LOCAL_CLANG))
|
|
|
|
my_skip_this_target := true
|
2018-10-11 10:27:04 +08:00
|
|
|
else ifeq (never, $(LOCAL_SANITIZE))
|
|
|
|
my_skip_this_target := true
|
2015-06-12 04:57:10 +08:00
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifneq (true,$(my_skip_this_target))
|
2016-07-26 07:03:53 +08:00
|
|
|
$(call record-module-type,EXECUTABLE)
|
2015-06-12 04:57:10 +08:00
|
|
|
|
2014-04-18 01:03:35 +08:00
|
|
|
my_prefix := TARGET_
|
2014-03-22 03:29:32 +08:00
|
|
|
include $(BUILD_SYSTEM)/multilib.mk
|
2009-03-04 11:28:42 +08:00
|
|
|
|
2014-03-22 03:29:32 +08:00
|
|
|
ifeq ($(my_module_multilib),both)
|
Add NATIVE_TESTS class, move host native tests
Host native tests have been getting installed into
out/host/linux-x86/bin/..., but this pollutes the bin directory with a
lot of poorly named tests. Also, to support 32-bit and 64-bit tests, we
need to have different names with different suffixes. This causes
problems when tests expect to be named something specific (like gtest).
It's also convenient to store test data next to the test itself.
So with this change, native tests will be installed in
out/host/linux-x86/nativetest[64]/$(LOCAL_MODULE)/$(LOCAL_MODULE_STEM)
just like target tests get installed into /data/nativetest[64].
Implement this using a new NATIVE_TESTS class, which is like
EXECUTABLES, but sets up the install path differently, and configures
the rpath to load shared libraries with the proper relative path.
LOCAL_MODULE_RELATIVE_PATH can be used to control the directory name, it
will default to $(LOCAL_MODULE). This way multiple related tests can be
grouped together.
Target native tests also use NATIVE_TESTS now, but nothing should change
other than LOCAL_MODULE_RELATIVE_PATH can be used.
Change-Id: I535e42b1a6b21c5b8d6a580aa2f944d2be35e27d
2016-03-03 05:54:51 +08:00
|
|
|
ifneq ($(LOCAL_MODULE_CLASS),NATIVE_TESTS)
|
2014-03-22 03:29:32 +08:00
|
|
|
ifeq ($(LOCAL_MODULE_PATH_32)$(LOCAL_MODULE_STEM_32),)
|
|
|
|
$(error $(LOCAL_PATH): LOCAL_MODULE_STEM_32 or LOCAL_MODULE_PATH_32 is required for LOCAL_MULTILIB := both for module $(LOCAL_MODULE))
|
|
|
|
endif
|
|
|
|
ifeq ($(LOCAL_MODULE_PATH_64)$(LOCAL_MODULE_STEM_64),)
|
|
|
|
$(error $(LOCAL_PATH): LOCAL_MODULE_STEM_64 or LOCAL_MODULE_PATH_64 is required for LOCAL_MULTILIB := both for module $(LOCAL_MODULE))
|
|
|
|
endif
|
Add NATIVE_TESTS class, move host native tests
Host native tests have been getting installed into
out/host/linux-x86/bin/..., but this pollutes the bin directory with a
lot of poorly named tests. Also, to support 32-bit and 64-bit tests, we
need to have different names with different suffixes. This causes
problems when tests expect to be named something specific (like gtest).
It's also convenient to store test data next to the test itself.
So with this change, native tests will be installed in
out/host/linux-x86/nativetest[64]/$(LOCAL_MODULE)/$(LOCAL_MODULE_STEM)
just like target tests get installed into /data/nativetest[64].
Implement this using a new NATIVE_TESTS class, which is like
EXECUTABLES, but sets up the install path differently, and configures
the rpath to load shared libraries with the proper relative path.
LOCAL_MODULE_RELATIVE_PATH can be used to control the directory name, it
will default to $(LOCAL_MODULE). This way multiple related tests can be
grouped together.
Target native tests also use NATIVE_TESTS now, but nothing should change
other than LOCAL_MODULE_RELATIVE_PATH can be used.
Change-Id: I535e42b1a6b21c5b8d6a580aa2f944d2be35e27d
2016-03-03 05:54:51 +08:00
|
|
|
endif
|
2014-03-22 03:29:32 +08:00
|
|
|
else #!LOCAL_MULTILIB == both
|
2014-02-07 06:45:37 +08:00
|
|
|
LOCAL_NO_2ND_ARCH_MODULE_SUFFIX := true
|
2014-03-22 03:29:32 +08:00
|
|
|
endif
|
2014-02-07 06:45:37 +08:00
|
|
|
|
2014-05-01 09:09:13 +08:00
|
|
|
# if TARGET_PREFER_32_BIT_EXECUTABLES is set, try to build 32-bit first
|
2014-04-11 03:28:56 +08:00
|
|
|
ifdef TARGET_2ND_ARCH
|
2014-05-01 09:09:13 +08:00
|
|
|
ifeq ($(TARGET_PREFER_32_BIT_EXECUTABLES),true)
|
2014-04-11 03:28:56 +08:00
|
|
|
LOCAL_2ND_ARCH_VAR_PREFIX := $(TARGET_2ND_ARCH_VAR_PREFIX)
|
|
|
|
else
|
|
|
|
LOCAL_2ND_ARCH_VAR_PREFIX :=
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
my_skip_non_preferred_arch :=
|
2014-03-22 03:29:32 +08:00
|
|
|
|
2014-04-11 03:28:56 +08:00
|
|
|
# check if preferred arch is supported
|
2014-02-07 06:45:37 +08:00
|
|
|
include $(BUILD_SYSTEM)/module_arch_supported.mk
|
|
|
|
ifeq ($(my_module_arch_supported),true)
|
2014-03-22 03:29:32 +08:00
|
|
|
# first arch is supported
|
2014-02-07 06:45:37 +08:00
|
|
|
include $(BUILD_SYSTEM)/executable_internal.mk
|
2014-03-22 03:29:32 +08:00
|
|
|
ifneq ($(my_module_multilib),both)
|
2014-04-11 03:28:56 +08:00
|
|
|
my_skip_non_preferred_arch := true
|
2014-03-22 03:29:32 +08:00
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2014-04-11 03:28:56 +08:00
|
|
|
# check if preferred arch was not supported or asked to build both
|
|
|
|
ifndef my_skip_non_preferred_arch
|
2014-03-22 03:29:32 +08:00
|
|
|
ifdef TARGET_2ND_ARCH
|
2014-04-11 03:28:56 +08:00
|
|
|
|
|
|
|
# check if the non-preferred arch is the primary or secondary
|
2014-05-01 09:09:13 +08:00
|
|
|
ifeq ($(TARGET_PREFER_32_BIT_EXECUTABLES),true)
|
2014-04-11 03:28:56 +08:00
|
|
|
LOCAL_2ND_ARCH_VAR_PREFIX :=
|
|
|
|
else
|
2014-01-18 08:17:28 +08:00
|
|
|
LOCAL_2ND_ARCH_VAR_PREFIX := $(TARGET_2ND_ARCH_VAR_PREFIX)
|
2014-04-11 03:28:56 +08:00
|
|
|
endif
|
|
|
|
|
|
|
|
# check if non-preferred arch is supported
|
2014-02-07 06:45:37 +08:00
|
|
|
include $(BUILD_SYSTEM)/module_arch_supported.mk
|
|
|
|
ifeq ($(my_module_arch_supported),true)
|
2014-04-11 03:28:56 +08:00
|
|
|
# non-preferred arch is supported
|
2014-03-22 03:29:32 +08:00
|
|
|
LOCAL_BUILT_MODULE :=
|
|
|
|
LOCAL_INSTALLED_MODULE :=
|
|
|
|
LOCAL_INTERMEDIATE_TARGETS :=
|
2014-02-07 06:45:37 +08:00
|
|
|
include $(BUILD_SYSTEM)/executable_internal.mk
|
2009-03-04 11:28:42 +08:00
|
|
|
endif
|
2014-02-07 06:45:37 +08:00
|
|
|
endif # TARGET_2ND_ARCH
|
2014-04-11 03:28:56 +08:00
|
|
|
endif # !my_skip_non_preferred_arch || LOCAL_MULTILIB
|
2014-01-18 08:17:28 +08:00
|
|
|
LOCAL_2ND_ARCH_VAR_PREFIX :=
|
2014-02-05 03:16:16 +08:00
|
|
|
LOCAL_NO_2ND_ARCH_MODULE_SUFFIX :=
|
2014-02-07 06:45:37 +08:00
|
|
|
|
|
|
|
my_module_arch_supported :=
|
2015-06-12 04:57:10 +08:00
|
|
|
|
|
|
|
endif
|