Home | History | Annotate | Download | only in libc
      1 # Define the libc run-time (crt) support object files that must be built,
      2 # which are needed to build all other objects (shared/static libs and
      3 # executables)
      4 # ==========================================================================
      5 # AArch64, ARM, MIPS, and x86 all need crtbegin_so/crtend_so.
      6 #
      7 # For x86, the .init section must point to a function that calls all
      8 # entries in the .ctors section. (on ARM this is done through the
      9 # .init_array section instead).
     10 #
     11 # For all the platforms, the .fini_array section must point to a function
     12 # that will call __cxa_finalize(&__dso_handle) in order to ensure that
     13 # static C++ destructors are properly called on dlclose().
     14 #
     15 # Args:
     16 #     my_2nd_arch_prefix: set to $(TARGET_2ND_ARCH_VAR_PREFIX) if it's
     17 #                         for the 2nd arch; otherwise empty.
     18 
     19 my_arch := $(TARGET_$(my_2nd_arch_prefix)ARCH)
     20 
     21 my_libc_crt_target_crtbegin_file := $(libc_crt_target_crtbegin_file_$(my_arch))
     22 my_libc_crt_target_crtbegin_so_file := $(libc_crt_target_crtbegin_so_file_$(my_arch))
     23 
     24 my_libc_crt_target_cflags := \
     25     $(libc_crt_target_cflags) \
     26     $(libc_crt_target_cflags_$(my_arch))
     27 
     28 my_libc_crt_target_so_cflags := \
     29     $(libc_crt_target_so_cflags_$(my_arch)) \
     30     $(my_libc_crt_target_cflags)
     31 
     32 my_libc_crt_target_ldflags := $(libc_crt_target_ldflags_$(my_arch))
     33 
     34 # crtbrand.S -> crtbrand.o
     35 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbrand.o
     36 $(GEN): PRIVATE_CC := $($(my_2nd_arch_prefix)TARGET_CC)
     37 $(GEN): PRIVATE_CFLAGS := $(my_libc_crt_target_so_cflags)
     38 $(GEN): $(LOCAL_PATH)/arch-common/bionic/crtbrand.S
     39 	@mkdir -p $(dir $@)
     40 	$(hide) $(PRIVATE_CC) $(PRIVATE_CFLAGS) \
     41 		-MD -MF $(@:%.o=%.d) -o $@ -c $<
     42 	$(transform-d-to-p)
     43 $(call include-depfile,$(GEN:%.o=%.P),$(GEN))
     44 
     45 # crtbegin_so.c -> crtbegin_so1.o
     46 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so1.o
     47 $(GEN): PRIVATE_CC := $($(my_2nd_arch_prefix)TARGET_CC)
     48 $(GEN): PRIVATE_CFLAGS := $(my_libc_crt_target_so_cflags)
     49 $(GEN): $(my_libc_crt_target_crtbegin_so_file)
     50 	@mkdir -p $(dir $@)
     51 	$(hide) $(PRIVATE_CC) $(PRIVATE_CFLAGS) \
     52 		-MD -MF $(@:%.o=%.d) -o $@ -c $<
     53 	$(transform-d-to-p)
     54 $(call include-depfile,$(GEN:%.o=%.P),$(GEN))
     55 
     56 # crtbegin_so1.o + crtbrand.o -> crtbegin_so.o
     57 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so.o
     58 $(GEN): PRIVATE_LD := $($(my_2nd_arch_prefix)TARGET_LD)
     59 $(GEN): PRIVATE_LDFLAGS := $(my_libc_crt_target_ldflags)
     60 $(GEN): $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so1.o \
     61     $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbrand.o
     62 	@mkdir -p $(dir $@)
     63 	$(hide) $(PRIVATE_LD) $(PRIVATE_LDFLAGS) -r -o $@ $^
     64 
     65 # crtend_so.S -> crtend_so.o
     66 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_so.o
     67 $(GEN): PRIVATE_CC := $($(my_2nd_arch_prefix)TARGET_CC)
     68 $(GEN): PRIVATE_CFLAGS := $(my_libc_crt_target_so_cflags)
     69 $(GEN): $(LOCAL_PATH)/arch-common/bionic/crtend_so.S
     70 	@mkdir -p $(dir $@)
     71 	$(hide) $(PRIVATE_CC) $(PRIVATE_CFLAGS) \
     72 		-MD -MF $(@:%.o=%.d) -o $@ -c $<
     73 	$(transform-d-to-p)
     74 $(call include-depfile,$(GEN:%.o=%.P),$(GEN))
     75 
     76 # crtbegin_so.o and crtend_so.o are installed to device
     77 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_SHARED_LIBRARIES)/crtbegin_so.o
     78 $(GEN): $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so.o
     79 	$(hide) mkdir -p $(dir $@) && cp -f $< $@
     80 ALL_GENERATED_SOURCES += $(GEN)
     81 
     82 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_SHARED_LIBRARIES)/crtend_so.o
     83 $(GEN): $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_so.o
     84 	$(hide) mkdir -p $(dir $@) && cp -f $< $@
     85 ALL_GENERATED_SOURCES += $(GEN)
     86 
     87 # crtbegin.c -> crtbegin_static1.o
     88 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static1.o
     89 $(GEN): PRIVATE_CC := $($(my_2nd_arch_prefix)TARGET_CC)
     90 $(GEN): PRIVATE_CFLAGS := $(my_libc_crt_target_cflags)
     91 $(GEN): $(my_libc_crt_target_crtbegin_file)
     92 	@mkdir -p $(dir $@)
     93 	$(hide) $(PRIVATE_CC) $(PRIVATE_CFLAGS) \
     94 		-MD -MF $(@:%.o=%.d) -o $@ -c $<
     95 	$(transform-d-to-p)
     96 $(call include-depfile,$(GEN:%.o=%.P),$(GEN))
     97 
     98 # crtbegin_static1.o + crtbrand.o -> crtbegin_static.o
     99 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static.o
    100 $(GEN): PRIVATE_LD := $($(my_2nd_arch_prefix)TARGET_LD)
    101 $(GEN): PRIVATE_LDFLAGS := $(my_libc_crt_target_ldflags)
    102 $(GEN): $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static1.o \
    103     $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbrand.o
    104 	@mkdir -p $(dir $@)
    105 	$(hide) $(PRIVATE_LD) $(PRIVATE_LDFLAGS) -r -o $@ $^
    106 
    107 # crtbegin.c -> crtbegin_dynamic1.o
    108 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic1.o
    109 $(GEN): PRIVATE_CC := $($(my_2nd_arch_prefix)TARGET_CC)
    110 $(GEN): PRIVATE_CFLAGS := $(my_libc_crt_target_cflags)
    111 $(GEN): $(my_libc_crt_target_crtbegin_file)
    112 	@mkdir -p $(dir $@)
    113 	$(hide) $(PRIVATE_CC) $(PRIVATE_CFLAGS) \
    114 		-MD -MF $(@:%.o=%.d) -o $@ -c $<
    115 	$(transform-d-to-p)
    116 $(call include-depfile,$(GEN:%.o=%.P),$(GEN))
    117 
    118 # crtbegin_dynamic1.o + crtbrand.o -> crtbegin_dynamic.o
    119 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic.o
    120 $(GEN): PRIVATE_LD := $($(my_2nd_arch_prefix)TARGET_LD)
    121 $(GEN): PRIVATE_LDFLAGS := $(my_libc_crt_target_ldflags)
    122 $(GEN): $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic1.o \
    123     $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbrand.o
    124 	@mkdir -p $(dir $@)
    125 	$(hide) $(PRIVATE_LD) $(PRIVATE_LDFLAGS) -r -o $@ $^
    126 
    127 # crtend.S -> crtend_android.o
    128 # We rename crtend.o to crtend_android.o to avoid a
    129 # name clash between gcc and bionic.
    130 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_android.o
    131 $(GEN): PRIVATE_CC := $($(my_2nd_arch_prefix)TARGET_CC)
    132 $(GEN): PRIVATE_CFLAGS := $(my_libc_crt_target_cflags)
    133 $(GEN): $(LOCAL_PATH)/arch-common/bionic/crtend.S
    134 	@mkdir -p $(dir $@)
    135 	$(hide) $(PRIVATE_CC) $(PRIVATE_CFLAGS) \
    136 		-MD -MF $(@:%.o=%.d) -o $@ -c $<
    137 	$(transform-d-to-p)
    138 $(call include-depfile,$(GEN:%.o=%.P),$(GEN))
    139 
    140 # Clear temp vars
    141 my_libc_crt_target_ldflags :=
    142 my_libc_crt_target_so_cflags :=
    143 my_libc_crt_target_cflags :=
    144 my_libc_crt_target_crtbegin_so_file :=
    145 my_libc_crt_target_crtbegin_file :=
    146 my_arch :=
    147