blob: 0fec9ca35c94fea3dcd64eb490af96849a7940ef [file] [log] [blame]
Ying Wang695e8262014-04-17 13:38:04 -07001# Decides how to install the jni libraries needed by an apk.
2# Input variables:
Ying Wang8e20ef62014-06-24 20:01:52 -07003# my_module_multilib, LOCAL_2ND_ARCH_VAR_PREFIX (from package.mk or prebuilt.mk)
Ying Wang695e8262014-04-17 13:38:04 -07004# rs_compatibility_jni_libs (from java.mk)
5# my_module_path (from base_rules.mk)
6# partition_tag (from base_rules.mk)
Ying Wang7cf9f282014-04-18 20:13:41 -07007# my_prebuilt_src_file (from prebuilt_internal.mk)
Ying Wang695e8262014-04-17 13:38:04 -07008#
9# Output variables:
Ying Wang8e20ef62014-06-24 20:01:52 -070010# jni_shared_libraries, jni_shared_libraries_abi, jni_shared_libraries_with_abis if we are going to embed the libraries into the apk;
Ying Wang1fb01522015-05-01 14:02:26 -070011# embedded_prebuilt_jni_libs, prebuilt jni libs embedded in prebuilt apk.
Ying Wang695e8262014-04-17 13:38:04 -070012#
13
Ying Wang695e8262014-04-17 13:38:04 -070014my_embed_jni :=
15ifneq ($(TARGET_BUILD_APPS),)
Anton Hansson74a36532019-03-21 14:51:35 +000016 my_embed_jni := true
Ying Wang695e8262014-04-17 13:38:04 -070017endif
18ifneq ($(filter tests samples, $(LOCAL_MODULE_TAGS)),)
Anton Hansson74a36532019-03-21 14:51:35 +000019 my_embed_jni := true
Ying Wang695e8262014-04-17 13:38:04 -070020endif
Anton Hanssonbb397b02018-08-29 13:42:09 +010021
22# If the APK is not installed in one of the following partitions, force its libraries
23# to be embedded inside the APK instead of installed to /<partition>/lib[64]/.
24supported_partition_patterns := \
25 $(TARGET_OUT)/% \
26 $(TARGET_OUT_VENDOR)/% \
27 $(TARGET_OUT_OEM)/% \
28 $(TARGET_OUT_PRODUCT)/% \
Justin Yun6151e3f2019-06-25 15:58:13 +090029 $(TARGET_OUT_SYSTEM_EXT)/% \
Anton Hanssonbb397b02018-08-29 13:42:09 +010030
31ifeq ($(filter $(supported_partition_patterns),$(my_module_path)),)
Anton Hansson74a36532019-03-21 14:51:35 +000032 my_embed_jni := true
Ying Wang695e8262014-04-17 13:38:04 -070033endif
Anton Hanssonbb397b02018-08-29 13:42:09 +010034
Narayan Kamath7c205102017-08-07 12:31:17 +010035# If we're installing this APP as a compressed module, we include all JNI libraries
36# in the compressed artifact, rather than as separate files on the partition in question.
37ifdef LOCAL_COMPRESSED_MODULE
Anton Hansson74a36532019-03-21 14:51:35 +000038 my_embed_jni := true
Narayan Kamath7c205102017-08-07 12:31:17 +010039endif
Ying Wang695e8262014-04-17 13:38:04 -070040
Ying Wang8e20ef62014-06-24 20:01:52 -070041jni_shared_libraries :=
42jni_shared_libraries_abis :=
43# jni_shared_libraries_with_abis is a list of <abi>:<path-to-the-built-jni-lib>
44jni_shared_libraries_with_abis :=
Ying Wang1fb01522015-05-01 14:02:26 -070045embedded_prebuilt_jni_libs :=
Ying Wang7cf9f282014-04-18 20:13:41 -070046
Ying Wang8e20ef62014-06-24 20:01:52 -070047#######################################
48# For TARGET_ARCH
49my_2nd_arch_prefix :=
50my_add_jni :=
51# The module is built for TARGET_ARCH
52ifeq ($(my_2nd_arch_prefix),$(LOCAL_2ND_ARCH_VAR_PREFIX))
Anton Hansson74a36532019-03-21 14:51:35 +000053 my_add_jni := true
Ying Wang695e8262014-04-17 13:38:04 -070054endif
Ying Wang8e20ef62014-06-24 20:01:52 -070055# Or it explicitly requires both
56ifeq ($(my_module_multilib),both)
Anton Hansson74a36532019-03-21 14:51:35 +000057 my_add_jni := true
Ying Wang695e8262014-04-17 13:38:04 -070058endif
Ying Wang8e20ef62014-06-24 20:01:52 -070059ifeq ($(my_add_jni),true)
Anton Hansson74a36532019-03-21 14:51:35 +000060 my_prebuilt_jni_libs := $(LOCAL_PREBUILT_JNI_LIBS_$(TARGET_ARCH))
61 ifndef my_prebuilt_jni_libs
62 my_prebuilt_jni_libs := $(LOCAL_PREBUILT_JNI_LIBS)
63 endif
64 include $(BUILD_SYSTEM)/install_jni_libs_internal.mk
65 jni_shared_libraries += $(my_jni_shared_libraries)
66 jni_shared_libraries_abis += $(my_jni_shared_libraries_abi)
67 jni_shared_libraries_with_abis += $(addprefix $(my_jni_shared_libraries_abi):,\
68 $(my_jni_shared_libraries))
69 embedded_prebuilt_jni_libs += $(my_embedded_prebuilt_jni_libs)
Ying Wang695e8262014-04-17 13:38:04 -070070
Anton Hansson74a36532019-03-21 14:51:35 +000071 # Include RS dynamically-generated libraries as well
72 # TODO: Add multilib support once RS supports generating multilib libraries.
73 jni_shared_libraries += $(rs_compatibility_jni_libs)
74 jni_shared_libraries_with_abis += $(addprefix $(my_jni_shared_libraries_abi):,\
75 $(rs_compatibility_jni_libs))
Ying Wang8e20ef62014-06-24 20:01:52 -070076endif # my_add_jni
Ying Wang695e8262014-04-17 13:38:04 -070077
Ying Wang8e20ef62014-06-24 20:01:52 -070078#######################################
79# For TARGET_2ND_ARCH
80ifdef TARGET_2ND_ARCH
Anton Hansson74a36532019-03-21 14:51:35 +000081 my_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX)
82 my_add_jni :=
83 # The module is built for TARGET_2ND_ARCH
84 ifeq ($(my_2nd_arch_prefix),$(LOCAL_2ND_ARCH_VAR_PREFIX))
85 my_add_jni := true
86 endif
87 # Or it explicitly requires both
88 ifeq ($(my_module_multilib),both)
89 my_add_jni := true
90 endif
91 ifeq ($(my_add_jni),true)
92 my_prebuilt_jni_libs := $(LOCAL_PREBUILT_JNI_LIBS_$(TARGET_2ND_ARCH))
93 ifndef my_prebuilt_jni_libs
94 my_prebuilt_jni_libs := $(LOCAL_PREBUILT_JNI_LIBS)
95 endif
96 include $(BUILD_SYSTEM)/install_jni_libs_internal.mk
97 jni_shared_libraries += $(my_jni_shared_libraries)
98 jni_shared_libraries_abis += $(my_jni_shared_libraries_abi)
99 jni_shared_libraries_with_abis += $(addprefix $(my_jni_shared_libraries_abi):,\
100 $(my_jni_shared_libraries))
101 embedded_prebuilt_jni_libs += $(my_embedded_prebuilt_jni_libs)
102 endif # my_add_jni
Ying Wang8e20ef62014-06-24 20:01:52 -0700103endif # TARGET_2ND_ARCH
Ying Wang695e8262014-04-17 13:38:04 -0700104
105jni_shared_libraries := $(strip $(jni_shared_libraries))
Ying Wang8e20ef62014-06-24 20:01:52 -0700106jni_shared_libraries_abis := $(sort $(jni_shared_libraries_abis))
107jni_shared_libraries_with_abis := $(strip $(jni_shared_libraries_with_abis))
Ying Wang1fb01522015-05-01 14:02:26 -0700108embedded_prebuilt_jni_libs := $(strip $(embedded_prebuilt_jni_libs))