Home | History | Annotate | Download | only in core
      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 
     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]/.
     24 supported_partition_patterns := \
     25     $(TARGET_OUT)/% \
     26     $(TARGET_OUT_VENDOR)/% \
     27     $(TARGET_OUT_OEM)/% \
     28     $(TARGET_OUT_PRODUCT)/% \
     29     $(TARGET_OUT_PRODUCT_SERVICES)/% \
     30 
     31 ifeq ($(filter $(supported_partition_patterns),$(my_module_path)),)
     32     my_embed_jni := true
     33 endif
     34 
     35 # 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.
     37 ifdef LOCAL_COMPRESSED_MODULE
     38 my_embed_jni := true
     39 endif
     40 
     41 jni_shared_libraries :=
     42 jni_shared_libraries_abis :=
     43 # jni_shared_libraries_with_abis is a list of <abi>:<path-to-the-built-jni-lib>
     44 jni_shared_libraries_with_abis :=
     45 embedded_prebuilt_jni_libs :=
     46 
     47 #######################################
     48 # For TARGET_ARCH
     49 my_2nd_arch_prefix :=
     50 my_add_jni :=
     51 # The module is built for TARGET_ARCH
     52 ifeq ($(my_2nd_arch_prefix),$(LOCAL_2ND_ARCH_VAR_PREFIX))
     53 my_add_jni := true
     54 endif
     55 # Or it explicitly requires both
     56 ifeq ($(my_module_multilib),both)
     57 my_add_jni := true
     58 endif
     59 ifeq ($(my_add_jni),true)
     60 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)
     70 
     71 # 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))
     76 endif  # my_add_jni
     77 
     78 #######################################
     79 # For TARGET_2ND_ARCH
     80 ifdef TARGET_2ND_ARCH
     81 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
    103 endif  # TARGET_2ND_ARCH
    104 
    105 jni_shared_libraries := $(strip $(jni_shared_libraries))
    106 jni_shared_libraries_abis := $(sort $(jni_shared_libraries_abis))
    107 jni_shared_libraries_with_abis := $(strip $(jni_shared_libraries_with_abis))
    108 embedded_prebuilt_jni_libs := $(strip $(embedded_prebuilt_jni_libs))
    109