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 35 # See the comment in crtbrand.c for the reason why we need to generate 36 # crtbrand.s before generating crtbrand.o. 37 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbrand.s 38 $(GEN): PRIVATE_CC := $($(my_2nd_arch_prefix)TARGET_CC) 39 $(GEN): PRIVATE_CFLAGS := $(my_libc_crt_target_so_cflags) 40 $(GEN): $(LOCAL_PATH)/bionic/crtbrand.c 41 @mkdir -p $(dir $@) 42 $(hide) $(PRIVATE_CC) $(PRIVATE_CFLAGS) -S \ 43 -MD -MF $(@:%.s=%.d) -o $@ $< 44 $(hide) sed -i -e '/\.note\.ABI-tag/s/progbits/note/' $@ 45 $(call transform-d-to-p-args,$(@:%.s=%.d),$(@:%.s=%.P)) 46 -include $(GEN:%.s=%.P) 47 48 49 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbrand.o 50 $(GEN): PRIVATE_CC := $($(my_2nd_arch_prefix)TARGET_CC) 51 $(GEN): PRIVATE_CFLAGS := $(my_libc_crt_target_so_cflags) 52 $(GEN): $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbrand.s 53 @mkdir -p $(dir $@) 54 $(hide) $(PRIVATE_CC) $(PRIVATE_CFLAGS) -o $@ -c $< 55 56 57 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so.o 58 $(GEN): PRIVATE_CC := $($(my_2nd_arch_prefix)TARGET_CC) 59 $(GEN): PRIVATE_CFLAGS := $(my_libc_crt_target_so_cflags) 60 $(GEN): $(my_libc_crt_target_crtbegin_so_file) 61 @mkdir -p $(dir $@) 62 $(hide) $(PRIVATE_CC) $(PRIVATE_CFLAGS) \ 63 -MD -MF $(@:%.o=%.d) -o $@ -c $< 64 $(transform-d-to-p) 65 -include $(GEN:%.o=%.P) 66 67 68 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_so.o 69 $(GEN): PRIVATE_CC := $($(my_2nd_arch_prefix)TARGET_CC) 70 $(GEN): PRIVATE_CFLAGS := $(my_libc_crt_target_so_cflags) 71 $(GEN): $(LOCAL_PATH)/arch-common/bionic/crtend_so.S 72 @mkdir -p $(dir $@) 73 $(hide) $(PRIVATE_CC) $(PRIVATE_CFLAGS) \ 74 -MD -MF $(@:%.o=%.d) -o $@ -c $< 75 $(transform-d-to-p) 76 -include $(GEN:%.o=%.P) 77 78 79 # The following two are installed to device 80 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_SHARED_LIBRARIES)/crtbegin_so.o 81 $(GEN): $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so.o 82 $(hide) mkdir -p $(dir $@) && cp -f $< $@ 83 ALL_GENERATED_SOURCES += $(GEN) 84 85 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_SHARED_LIBRARIES)/crtend_so.o 86 $(GEN): $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_so.o 87 $(hide) mkdir -p $(dir $@) && cp -f $< $@ 88 ALL_GENERATED_SOURCES += $(GEN) 89 90 91 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static1.o 92 $(GEN): PRIVATE_CC := $($(my_2nd_arch_prefix)TARGET_CC) 93 $(GEN): PRIVATE_CFLAGS := $(my_libc_crt_target_cflags) 94 $(GEN): $(my_libc_crt_target_crtbegin_file) 95 @mkdir -p $(dir $@) 96 $(hide) $(PRIVATE_CC) $(PRIVATE_CFLAGS) \ 97 -MD -MF $(@:%.o=%.d) -o $@ -c $< 98 $(transform-d-to-p) 99 -include $(GEN:%.o=%.P) 100 101 102 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static.o 103 $(GEN): PRIVATE_LD := $($(my_2nd_arch_prefix)TARGET_LD) 104 $(GEN): PRIVATE_LDFLAGS := $(my_libc_crt_target_ldflags) 105 $(GEN): $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static1.o \ 106 $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbrand.o 107 @mkdir -p $(dir $@) 108 $(hide) $(PRIVATE_LD) $(PRIVATE_LDFLAGS) -r -o $@ $^ 109 110 111 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic1.o 112 $(GEN): PRIVATE_CC := $($(my_2nd_arch_prefix)TARGET_CC) 113 $(GEN): PRIVATE_CFLAGS := $(my_libc_crt_target_cflags) 114 $(GEN): $(my_libc_crt_target_crtbegin_file) 115 @mkdir -p $(dir $@) 116 $(hide) $(PRIVATE_CC) $(PRIVATE_CFLAGS) \ 117 -MD -MF $(@:%.o=%.d) -o $@ -c $< 118 $(transform-d-to-p) 119 -include $(GEN:%.o=%.P) 120 121 122 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic.o 123 $(GEN): PRIVATE_LD := $($(my_2nd_arch_prefix)TARGET_LD) 124 $(GEN): PRIVATE_LDFLAGS := $(my_libc_crt_target_ldflags) 125 $(GEN): $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic1.o \ 126 $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbrand.o 127 @mkdir -p $(dir $@) 128 $(hide) $(PRIVATE_LD) $(PRIVATE_LDFLAGS) -r -o $@ $^ 129 130 131 # We rename crtend.o to crtend_android.o to avoid a 132 # name clash between gcc and bionic. 133 GEN := $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_android.o 134 $(GEN): PRIVATE_CC := $($(my_2nd_arch_prefix)TARGET_CC) 135 $(GEN): PRIVATE_CFLAGS := $(my_libc_crt_target_cflags) 136 $(GEN): $(LOCAL_PATH)/arch-common/bionic/crtend.S 137 @mkdir -p $(dir $@) 138 $(hide) $(PRIVATE_CC) $(PRIVATE_CFLAGS) \ 139 -MD -MF $(@:%.o=%.d) -o $@ -c $< 140 $(transform-d-to-p) 141 -include $(GEN:%.o=%.P) 142 143 # Clear temp vars 144 my_libc_crt_target_ldflags := 145 my_libc_crt_target_so_cflags := 146 my_libc_crt_target_cflags := 147 my_libc_crt_target_crtbegin_so_file := 148 my_libc_crt_target_crtbegin_file := 149 my_arch := 150