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.
19 my_arch := $(TARGET_$(my_2nd_arch_prefix)ARCH)
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))
24 my_libc_crt_target_cflags := \
25 $(libc_crt_target_cflags) \
26 $(libc_crt_target_cflags_$(my_arch))
28 my_libc_crt_target_so_cflags := \
29 $(libc_crt_target_so_cflags_$(my_arch)) \
30 $(my_libc_crt_target_cflags)
32 my_libc_crt_target_ldflags := $(libc_crt_target_ldflags_$(my_arch))
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)
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 $<
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)
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)
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)
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)
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)
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 $@ $^
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)
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 $@ $^
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)
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 :=