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