Home | History | Annotate | Download | only in core
      1 ###########################################################
      2 ## Standard rules for building a normal shared library.
      3 ##
      4 ## Additional inputs from base_rules.make:
      5 ## None.
      6 ##
      7 ## LOCAL_MODULE_SUFFIX will be set for you.
      8 ###########################################################
      9 
     10 ifeq ($(strip $(LOCAL_MODULE_CLASS)),)
     11 LOCAL_MODULE_CLASS := SHARED_LIBRARIES
     12 endif
     13 ifeq ($(strip $(LOCAL_MODULE_SUFFIX)),)
     14 LOCAL_MODULE_SUFFIX := $(TARGET_SHLIB_SUFFIX)
     15 endif
     16 ifneq ($(strip $(OVERRIDE_BUILT_MODULE_PATH)),)
     17 $(error $(LOCAL_PATH): Illegal use of OVERRIDE_BUILT_MODULE_PATH)
     18 endif
     19 ifneq ($(strip $(LOCAL_MODULE_STEM)$(LOCAL_BUILT_MODULE_STEM)$(LOCAL_MODULE_STEM_32)$(LOCAL_MODULE_STEM_64)),)
     20 $(error $(LOCAL_PATH): Cannot set module stem for a library)
     21 endif
     22 
     23 $(call target-shared-library-hook)
     24 
     25 skip_build_from_source :=
     26 ifdef LOCAL_PREBUILT_MODULE_FILE
     27 ifeq (,$(call if-build-from-source,$(LOCAL_MODULE),$(LOCAL_PATH)))
     28 include $(BUILD_SYSTEM)/prebuilt_internal.mk
     29 skip_build_from_source := true
     30 endif
     31 endif
     32 
     33 ifndef skip_build_from_source
     34 
     35 # Put the built targets of all shared libraries in a common directory
     36 # to simplify the link line.
     37 OVERRIDE_BUILT_MODULE_PATH := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)
     38 
     39 include $(BUILD_SYSTEM)/dynamic_binary.mk
     40 
     41 # Define PRIVATE_ variables from global vars
     42 ifeq ($(LOCAL_NO_LIBGCC),true)
     43 my_target_libgcc :=
     44 else
     45 my_target_libgcc := $(call intermediates-dir-for,STATIC_LIBRARIES,libgcc,,,$(LOCAL_2ND_ARCH_VAR_PREFIX))/libgcc.a
     46 endif
     47 my_target_libatomic := $(call intermediates-dir-for,STATIC_LIBRARIES,libatomic,,,$(LOCAL_2ND_ARCH_VAR_PREFIX))/libatomic.a
     48 ifeq ($(LOCAL_NO_CRT),true)
     49 my_target_crtbegin_so_o :=
     50 my_target_crtend_so_o :=
     51 else ifdef LOCAL_USE_VNDK
     52 my_target_crtbegin_so_o := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so.vendor.o
     53 my_target_crtend_so_o := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_so.vendor.o
     54 else
     55 my_target_crtbegin_so_o := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so.o
     56 my_target_crtend_so_o := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_so.o
     57 endif
     58 ifneq ($(LOCAL_SDK_VERSION),)
     59 my_target_crtbegin_so_o := $(wildcard $(my_ndk_sysroot_lib)/crtbegin_so.o)
     60 my_target_crtend_so_o := $(wildcard $(my_ndk_sysroot_lib)/crtend_so.o)
     61 endif
     62 $(linked_module): PRIVATE_TARGET_LIBGCC := $(my_target_libgcc)
     63 $(linked_module): PRIVATE_TARGET_LIBATOMIC := $(my_target_libatomic)
     64 $(linked_module): PRIVATE_TARGET_CRTBEGIN_SO_O := $(my_target_crtbegin_so_o)
     65 $(linked_module): PRIVATE_TARGET_CRTEND_SO_O := $(my_target_crtend_so_o)
     66 
     67 $(linked_module): \
     68         $(all_objects) \
     69         $(all_libraries) \
     70         $(my_target_crtbegin_so_o) \
     71         $(my_target_crtend_so_o) \
     72         $(my_target_libgcc) \
     73         $(my_target_libatomic) \
     74         $(LOCAL_ADDITIONAL_DEPENDENCIES)
     75 	$(transform-o-to-shared-lib)
     76 
     77 ifeq ($(my_native_coverage),true)
     78 gcno_suffix := .gcnodir
     79 
     80 built_whole_gcno_libraries := \
     81     $(foreach lib,$(my_whole_static_libraries), \
     82       $(call intermediates-dir-for, \
     83         STATIC_LIBRARIES,$(lib),$(my_kind),,$(LOCAL_2ND_ARCH_VAR_PREFIX), \
     84         $(my_host_cross))/$(lib)$(gcno_suffix))
     85 
     86 built_static_gcno_libraries := \
     87     $(foreach lib,$(my_static_libraries), \
     88       $(call intermediates-dir-for, \
     89         STATIC_LIBRARIES,$(lib),$(my_kind),,$(LOCAL_2ND_ARCH_VAR_PREFIX), \
     90         $(my_host_cross))/$(lib)$(gcno_suffix))
     91 
     92 ifdef LOCAL_IS_HOST_MODULE
     93 my_coverage_path := $($(my_prefix)OUT_COVERAGE)/$(patsubst $($(my_prefix)OUT)/%,%,$(my_module_path))
     94 else
     95 my_coverage_path := $(TARGET_OUT_COVERAGE)/$(patsubst $(PRODUCT_OUT)/%,%,$(my_module_path))
     96 endif
     97 
     98 GCNO_ARCHIVE := $(basename $(my_installed_module_stem))$(gcno_suffix)
     99 
    100 $(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_ALL_OBJECTS := $(strip $(LOCAL_GCNO_FILES))
    101 $(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_ALL_WHOLE_STATIC_LIBRARIES := $(strip $(built_whole_gcno_libraries)) $(strip $(built_static_gcno_libraries))
    102 $(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_INTERMEDIATES_DIR := $(intermediates)
    103 $(intermediates)/$(GCNO_ARCHIVE) : $(LOCAL_GCNO_FILES) $(built_whole_gcno_libraries) $(built_static_gcno_libraries)
    104 	$(transform-o-to-static-lib)
    105 
    106 $(my_coverage_path)/$(GCNO_ARCHIVE) : $(intermediates)/$(GCNO_ARCHIVE)
    107 	$(copy-file-to-target)
    108 
    109 $(LOCAL_BUILT_MODULE): $(my_coverage_path)/$(GCNO_ARCHIVE)
    110 endif
    111 
    112 endif  # skip_build_from_source
    113