github.com/westcoastroms/westcoastroms-build@v0.0.0-20190928114312-2350e5a73030/build/make/core/executable_internal.mk (about)

     1  ###########################################################
     2  ## Standard rules for building an executable file.
     3  ##
     4  ## Additional inputs from base_rules.make:
     5  ## None.
     6  ###########################################################
     7  
     8  ifeq ($(strip $(LOCAL_MODULE_CLASS)),)
     9  LOCAL_MODULE_CLASS := EXECUTABLES
    10  endif
    11  ifeq ($(strip $(LOCAL_MODULE_SUFFIX)),)
    12  LOCAL_MODULE_SUFFIX := $(TARGET_EXECUTABLE_SUFFIX)
    13  endif
    14  
    15  ifdef target-executable-hook
    16  $(call target-executable-hook)
    17  endif
    18  
    19  skip_build_from_source :=
    20  ifdef LOCAL_PREBUILT_MODULE_FILE
    21  ifeq (,$(call if-build-from-source,$(LOCAL_MODULE),$(LOCAL_PATH)))
    22  include $(BUILD_SYSTEM)/prebuilt_internal.mk
    23  skip_build_from_source := true
    24  endif
    25  endif
    26  
    27  ifndef skip_build_from_source
    28  
    29  include $(BUILD_SYSTEM)/dynamic_binary.mk
    30  
    31  # Check for statically linked libc
    32  ifneq ($(LOCAL_FORCE_STATIC_EXECUTABLE),true)
    33  ifneq ($(filter $(my_static_libraries),libc),)
    34  $(error $(LOCAL_PATH): $(LOCAL_MODULE) is statically linking libc to dynamic executable, please remove libc from static libs or set LOCAL_FORCE_STATIC_EXECUTABLE := true)
    35  endif
    36  endif
    37  
    38  # Define PRIVATE_ variables from global vars
    39  ifeq ($(LOCAL_NO_LIBGCC),true)
    40  my_target_libgcc :=
    41  else
    42  my_target_libgcc := $(call intermediates-dir-for,STATIC_LIBRARIES,libgcc,,,$(LOCAL_2ND_ARCH_VAR_PREFIX))/libgcc.a
    43  endif
    44  my_target_libatomic := $(call intermediates-dir-for,STATIC_LIBRARIES,libatomic,,,$(LOCAL_2ND_ARCH_VAR_PREFIX))/libatomic.a
    45  ifeq ($(LOCAL_NO_CRT),true)
    46  my_target_crtbegin_dynamic_o :=
    47  my_target_crtbegin_static_o :=
    48  my_target_crtend_o :=
    49  else ifdef LOCAL_USE_VNDK
    50  my_target_crtbegin_dynamic_o := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic.vendor.o
    51  my_target_crtbegin_static_o := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static.vendor.o
    52  my_target_crtend_o := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_android.vendor.o
    53  else
    54  my_target_crtbegin_dynamic_o := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic.o
    55  my_target_crtbegin_static_o := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static.o
    56  my_target_crtend_o := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_android.o
    57  endif
    58  ifneq ($(LOCAL_SDK_VERSION),)
    59  my_target_crtbegin_dynamic_o := $(wildcard $(my_ndk_sysroot_lib)/crtbegin_dynamic.o)
    60  my_target_crtbegin_static_o := $(wildcard $(my_ndk_sysroot_lib)/crtbegin_static.o)
    61  my_target_crtend_o := $(wildcard $(my_ndk_sysroot_lib)/crtend_android.o)
    62  endif
    63  $(linked_module): PRIVATE_TARGET_LIBGCC := $(my_target_libgcc)
    64  $(linked_module): PRIVATE_TARGET_LIBATOMIC := $(my_target_libatomic)
    65  $(linked_module): PRIVATE_TARGET_CRTBEGIN_DYNAMIC_O := $(my_target_crtbegin_dynamic_o)
    66  $(linked_module): PRIVATE_TARGET_CRTBEGIN_STATIC_O := $(my_target_crtbegin_static_o)
    67  $(linked_module): PRIVATE_TARGET_CRTEND_O := $(my_target_crtend_o)
    68  $(linked_module): PRIVATE_TARGET_OUT_INTERMEDIATE_LIBRARIES := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)
    69  $(linked_module): PRIVATE_POST_LINK_CMD := $(LOCAL_POST_LINK_CMD)
    70  
    71  ifeq ($(LOCAL_FORCE_STATIC_EXECUTABLE),true)
    72  $(linked_module): $(my_target_crtbegin_static_o) $(all_objects) $(all_libraries) $(my_target_crtend_o) $(my_target_libgcc) $(my_target_libatomic)
    73  	$(transform-o-to-static-executable)
    74  	$(PRIVATE_POST_LINK_CMD)
    75  else
    76  $(linked_module): $(my_target_crtbegin_dynamic_o) $(all_objects) $(all_libraries) $(my_target_crtend_o) $(my_target_libgcc) $(my_target_libatomic)
    77  	$(transform-o-to-executable)
    78  	$(PRIVATE_POST_LINK_CMD)
    79  endif
    80  
    81  ifeq ($(my_native_coverage),true)
    82  gcno_suffix := .gcnodir
    83  
    84  built_whole_gcno_libraries := \
    85      $(foreach lib,$(my_whole_static_libraries), \
    86        $(call intermediates-dir-for, \
    87          STATIC_LIBRARIES,$(lib),$(my_kind),,$(LOCAL_2ND_ARCH_VAR_PREFIX), \
    88          $(my_host_cross))/$(lib)$(gcno_suffix))
    89  
    90  built_static_gcno_libraries := \
    91      $(foreach lib,$(my_static_libraries), \
    92        $(call intermediates-dir-for, \
    93          STATIC_LIBRARIES,$(lib),$(my_kind),,$(LOCAL_2ND_ARCH_VAR_PREFIX), \
    94          $(my_host_cross))/$(lib)$(gcno_suffix))
    95  
    96  ifdef LOCAL_IS_HOST_MODULE
    97  my_coverage_path := $($(my_prefix)OUT_COVERAGE)/$(patsubst $($(my_prefix)OUT)/%,%,$(my_module_path))
    98  else
    99  my_coverage_path := $(TARGET_OUT_COVERAGE)/$(patsubst $(PRODUCT_OUT)/%,%,$(my_module_path))
   100  endif
   101  
   102  GCNO_ARCHIVE := $(my_installed_module_stem)$(gcno_suffix)
   103  
   104  $(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_ALL_OBJECTS := $(strip $(LOCAL_GCNO_FILES))
   105  $(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_ALL_WHOLE_STATIC_LIBRARIES := $(strip $(built_whole_gcno_libraries)) $(strip $(built_static_gcno_libraries))
   106  $(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_INTERMEDIATES_DIR := $(intermediates)
   107  $(intermediates)/$(GCNO_ARCHIVE) : $(LOCAL_GCNO_FILES) $(built_whole_gcno_libraries) $(built_static_gcno_libraries)
   108  	$(transform-o-to-static-lib)
   109  
   110  $(my_coverage_path)/$(GCNO_ARCHIVE) : $(intermediates)/$(GCNO_ARCHIVE)
   111  	$(copy-file-to-target)
   112  
   113  $(LOCAL_BUILT_MODULE): $(my_coverage_path)/$(GCNO_ARCHIVE)
   114  endif
   115  
   116  endif  # skip_build_from_source