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 14 my_embed_jni := 15 ifneq ($(TARGET_BUILD_APPS),) 16 my_embed_jni := true 17 endif 18 ifneq ($(filter tests samples, $(LOCAL_MODULE_TAGS)),) 19 my_embed_jni := true 20 endif 21 ifeq ($(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 29 else 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 34 endif 35 36 jni_shared_libraries := 37 jni_shared_libraries_abis := 38 # jni_shared_libraries_with_abis is a list of <abi>:<path-to-the-built-jni-lib> 39 jni_shared_libraries_with_abis := 40 embedded_prebuilt_jni_libs := 41 42 ####################################### 43 # For TARGET_ARCH 44 my_2nd_arch_prefix := 45 my_add_jni := 46 # The module is built for TARGET_ARCH 47 ifeq ($(my_2nd_arch_prefix),$(LOCAL_2ND_ARCH_VAR_PREFIX)) 48 my_add_jni := true 49 endif 50 # Or it explicitly requires both 51 ifeq ($(my_module_multilib),both) 52 my_add_jni := true 53 endif 54 ifeq ($(my_add_jni),true) 55 my_prebuilt_jni_libs := $(LOCAL_PREBUILT_JNI_LIBS_$(TARGET_ARCH)) 56 ifndef my_prebuilt_jni_libs 57 my_prebuilt_jni_libs := $(LOCAL_PREBUILT_JNI_LIBS) 58 endif 59 include $(BUILD_SYSTEM)/install_jni_libs_internal.mk 60 jni_shared_libraries += $(my_jni_shared_libraries) 61 jni_shared_libraries_abis += $(my_jni_shared_libraries_abi) 62 jni_shared_libraries_with_abis += $(addprefix $(my_jni_shared_libraries_abi):,\ 63 $(my_jni_shared_libraries)) 64 embedded_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. 68 jni_shared_libraries += $(rs_compatibility_jni_libs) 69 jni_shared_libraries_with_abis += $(addprefix $(my_jni_shared_libraries_abi):,\ 70 $(rs_compatibility_jni_libs)) 71 endif # my_add_jni 72 73 ####################################### 74 # For TARGET_2ND_ARCH 75 ifdef TARGET_2ND_ARCH 76 my_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX) 77 my_add_jni := 78 # The module is built for TARGET_2ND_ARCH 79 ifeq ($(my_2nd_arch_prefix),$(LOCAL_2ND_ARCH_VAR_PREFIX)) 80 my_add_jni := true 81 endif 82 # Or it explicitly requires both 83 ifeq ($(my_module_multilib),both) 84 my_add_jni := true 85 endif 86 ifeq ($(my_add_jni),true) 87 my_prebuilt_jni_libs := $(LOCAL_PREBUILT_JNI_LIBS_$(TARGET_2ND_ARCH)) 88 ifndef my_prebuilt_jni_libs 89 my_prebuilt_jni_libs := $(LOCAL_PREBUILT_JNI_LIBS) 90 endif 91 include $(BUILD_SYSTEM)/install_jni_libs_internal.mk 92 jni_shared_libraries += $(my_jni_shared_libraries) 93 jni_shared_libraries_abis += $(my_jni_shared_libraries_abi) 94 jni_shared_libraries_with_abis += $(addprefix $(my_jni_shared_libraries_abi):,\ 95 $(my_jni_shared_libraries)) 96 embedded_prebuilt_jni_libs += $(my_embedded_prebuilt_jni_libs) 97 endif # my_add_jni 98 endif # TARGET_2ND_ARCH 99 100 jni_shared_libraries := $(strip $(jni_shared_libraries)) 101 jni_shared_libraries_abis := $(sort $(jni_shared_libraries_abis)) 102 jni_shared_libraries_with_abis := $(strip $(jni_shared_libraries_with_abis)) 103 embedded_prebuilt_jni_libs := $(strip $(embedded_prebuilt_jni_libs)) 104