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 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