• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Decides how to install the jni libraries needed by an apk.
2# Input variables:
3#   my_module_multilib, LOCAL_2ND_ARCH_VAR_PREFIX (from package.mk or prebuilt.mk)
4#   rs_compatibility_jni_libs (from java.mk)
5#   my_module_path (from base_rules.mk)
6#   partition_tag (from base_rules.mk)
7#   my_prebuilt_src_file (from prebuilt_internal.mk)
8#
9# Output variables:
10#   jni_shared_libraries, jni_shared_libraries_abi, jni_shared_libraries_with_abis if we are going to embed the libraries into the apk;
11#   embedded_prebuilt_jni_libs, prebuilt jni libs embedded in prebuilt apk.
12#
13
14my_embed_jni :=
15ifneq ($(TARGET_BUILD_APPS),)
16my_embed_jni := true
17endif
18ifneq ($(filter tests samples, $(LOCAL_MODULE_TAGS)),)
19my_embed_jni := true
20endif
21ifeq ($(PRODUCT_FULL_TREBLE),true)
22  ifeq ($(filter $(TARGET_OUT)/%, $(my_module_path)),)
23    # If this app isn't to be installed to the system partition, and the device
24    # is fully treble-ized then jni libs are embedded, Otherwise, access to the
25    # directory where the lib is installed to (usually /vendor/lib) needs to be
26    # allowed for system processes, which is a Treble violation.
27    my_embed_jni := true
28  endif
29else
30  ifeq ($(filter $(TARGET_OUT)/% $(TARGET_OUT_VENDOR)/% $(TARGET_OUT_OEM)/%, $(my_module_path)),)
31    # If this app isn't to be installed to system, vendor, or oem partitions.
32    my_embed_jni := true
33  endif
34endif
35
36jni_shared_libraries :=
37jni_shared_libraries_abis :=
38# jni_shared_libraries_with_abis is a list of <abi>:<path-to-the-built-jni-lib>
39jni_shared_libraries_with_abis :=
40embedded_prebuilt_jni_libs :=
41
42#######################################
43# For TARGET_ARCH
44my_2nd_arch_prefix :=
45my_add_jni :=
46# The module is built for TARGET_ARCH
47ifeq ($(my_2nd_arch_prefix),$(LOCAL_2ND_ARCH_VAR_PREFIX))
48my_add_jni := true
49endif
50# Or it explicitly requires both
51ifeq ($(my_module_multilib),both)
52my_add_jni := true
53endif
54ifeq ($(my_add_jni),true)
55my_prebuilt_jni_libs := $(LOCAL_PREBUILT_JNI_LIBS_$(TARGET_ARCH))
56ifndef my_prebuilt_jni_libs
57my_prebuilt_jni_libs := $(LOCAL_PREBUILT_JNI_LIBS)
58endif
59include $(BUILD_SYSTEM)/install_jni_libs_internal.mk
60jni_shared_libraries += $(my_jni_shared_libraries)
61jni_shared_libraries_abis += $(my_jni_shared_libraries_abi)
62jni_shared_libraries_with_abis += $(addprefix $(my_jni_shared_libraries_abi):,\
63    $(my_jni_shared_libraries))
64embedded_prebuilt_jni_libs += $(my_embedded_prebuilt_jni_libs)
65
66# Include RS dynamically-generated libraries as well
67# TODO: Add multilib support once RS supports generating multilib libraries.
68jni_shared_libraries += $(rs_compatibility_jni_libs)
69jni_shared_libraries_with_abis += $(addprefix $(my_jni_shared_libraries_abi):,\
70    $(rs_compatibility_jni_libs))
71endif  # my_add_jni
72
73#######################################
74# For TARGET_2ND_ARCH
75ifdef TARGET_2ND_ARCH
76my_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX)
77my_add_jni :=
78# The module is built for TARGET_2ND_ARCH
79ifeq ($(my_2nd_arch_prefix),$(LOCAL_2ND_ARCH_VAR_PREFIX))
80my_add_jni := true
81endif
82# Or it explicitly requires both
83ifeq ($(my_module_multilib),both)
84my_add_jni := true
85endif
86ifeq ($(my_add_jni),true)
87my_prebuilt_jni_libs := $(LOCAL_PREBUILT_JNI_LIBS_$(TARGET_2ND_ARCH))
88ifndef my_prebuilt_jni_libs
89my_prebuilt_jni_libs := $(LOCAL_PREBUILT_JNI_LIBS)
90endif
91include $(BUILD_SYSTEM)/install_jni_libs_internal.mk
92jni_shared_libraries += $(my_jni_shared_libraries)
93jni_shared_libraries_abis += $(my_jni_shared_libraries_abi)
94jni_shared_libraries_with_abis += $(addprefix $(my_jni_shared_libraries_abi):,\
95    $(my_jni_shared_libraries))
96embedded_prebuilt_jni_libs += $(my_embedded_prebuilt_jni_libs)
97endif  # my_add_jni
98endif  # TARGET_2ND_ARCH
99
100jni_shared_libraries := $(strip $(jni_shared_libraries))
101jni_shared_libraries_abis := $(sort $(jni_shared_libraries_abis))
102jni_shared_libraries_with_abis := $(strip $(jni_shared_libraries_with_abis))
103embedded_prebuilt_jni_libs := $(strip $(embedded_prebuilt_jni_libs))
104