# Decides how to install the jni libraries needed by an apk. # Input variables: # my_module_multilib, LOCAL_2ND_ARCH_VAR_PREFIX (from package.mk or prebuilt.mk) # rs_compatibility_jni_libs (from java.mk) # my_module_path (from base_rules.mk) # partition_tag (from base_rules.mk) # my_prebuilt_src_file (from prebuilt_internal.mk) # # Output variables: # jni_shared_libraries, jni_shared_libraries_abi, jni_shared_libraries_with_abis if we are going to embed the libraries into the apk; # embedded_prebuilt_jni_libs, prebuilt jni libs embedded in prebuilt apk. # my_embed_jni := ifneq ($(TARGET_BUILD_APPS),) my_embed_jni := true endif ifneq ($(filter tests samples, $(LOCAL_MODULE_TAGS)),) my_embed_jni := true endif # If the APK is not installed in one of the following partitions, force its libraries # to be embedded inside the APK instead of installed to /<partition>/lib[64]/. supported_partition_patterns := \ $(TARGET_OUT)/% \ $(TARGET_OUT_VENDOR)/% \ $(TARGET_OUT_OEM)/% \ $(TARGET_OUT_PRODUCT)/% \ $(TARGET_OUT_PRODUCT_SERVICES)/% \ ifeq ($(filter $(supported_partition_patterns),$(my_module_path)),) my_embed_jni := true endif # If we're installing this APP as a compressed module, we include all JNI libraries # in the compressed artifact, rather than as separate files on the partition in question. ifdef LOCAL_COMPRESSED_MODULE my_embed_jni := true endif jni_shared_libraries := jni_shared_libraries_abis := # jni_shared_libraries_with_abis is a list of <abi>:<path-to-the-built-jni-lib> jni_shared_libraries_with_abis := embedded_prebuilt_jni_libs := ####################################### # For TARGET_ARCH my_2nd_arch_prefix := my_add_jni := # The module is built for TARGET_ARCH ifeq ($(my_2nd_arch_prefix),$(LOCAL_2ND_ARCH_VAR_PREFIX)) my_add_jni := true endif # Or it explicitly requires both ifeq ($(my_module_multilib),both) my_add_jni := true endif ifeq ($(my_add_jni),true) my_prebuilt_jni_libs := $(LOCAL_PREBUILT_JNI_LIBS_$(TARGET_ARCH)) ifndef my_prebuilt_jni_libs my_prebuilt_jni_libs := $(LOCAL_PREBUILT_JNI_LIBS) endif include $(BUILD_SYSTEM)/install_jni_libs_internal.mk jni_shared_libraries += $(my_jni_shared_libraries) jni_shared_libraries_abis += $(my_jni_shared_libraries_abi) jni_shared_libraries_with_abis += $(addprefix $(my_jni_shared_libraries_abi):,\ $(my_jni_shared_libraries)) embedded_prebuilt_jni_libs += $(my_embedded_prebuilt_jni_libs) # Include RS dynamically-generated libraries as well # TODO: Add multilib support once RS supports generating multilib libraries. jni_shared_libraries += $(rs_compatibility_jni_libs) jni_shared_libraries_with_abis += $(addprefix $(my_jni_shared_libraries_abi):,\ $(rs_compatibility_jni_libs)) endif # my_add_jni ####################################### # For TARGET_2ND_ARCH ifdef TARGET_2ND_ARCH my_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX) my_add_jni := # The module is built for TARGET_2ND_ARCH ifeq ($(my_2nd_arch_prefix),$(LOCAL_2ND_ARCH_VAR_PREFIX)) my_add_jni := true endif # Or it explicitly requires both ifeq ($(my_module_multilib),both) my_add_jni := true endif ifeq ($(my_add_jni),true) my_prebuilt_jni_libs := $(LOCAL_PREBUILT_JNI_LIBS_$(TARGET_2ND_ARCH)) ifndef my_prebuilt_jni_libs my_prebuilt_jni_libs := $(LOCAL_PREBUILT_JNI_LIBS) endif include $(BUILD_SYSTEM)/install_jni_libs_internal.mk jni_shared_libraries += $(my_jni_shared_libraries) jni_shared_libraries_abis += $(my_jni_shared_libraries_abi) jni_shared_libraries_with_abis += $(addprefix $(my_jni_shared_libraries_abi):,\ $(my_jni_shared_libraries)) embedded_prebuilt_jni_libs += $(my_embedded_prebuilt_jni_libs) endif # my_add_jni endif # TARGET_2ND_ARCH jni_shared_libraries := $(strip $(jni_shared_libraries)) jni_shared_libraries_abis := $(sort $(jni_shared_libraries_abis)) jni_shared_libraries_with_abis := $(strip $(jni_shared_libraries_with_abis)) embedded_prebuilt_jni_libs := $(strip $(embedded_prebuilt_jni_libs))