2 # Licensed under LGPL v2.1, see the file COPYING.LIB in this tarball for details.
5 top_builddir = $(TOPDIR)
7 compile.c = $(CC) -c $< -o $@ $(CPPFLAGS) $(CFLAGS) $(ARCH_CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$@) $(CFLAGS-$<)
8 compile.S = $(compile.c) $(S_CPPFLAGS) $(ASFLAGS) $(ARCH_ASFLAGS) $(ASFLAGS-$(suffix $@)) $(ASFLAGS-$@) $(ASFLAGS-$<)
9 compile.m = $(compile.c) -DL_$(patsubst %.$(suffix $@),%, $@)
11 #S_CPPFLAGS = -D__ASSEMBLER__ $(asm-CPPFLAGS)
14 DISABLE_PIC := $(PICFLAG)
16 DISABLE_PIC := -fno-PIC
20 ifeq ($(strip $(CSRC)),)
21 CSRC = $(wildcard *.c)
24 COBJ_PIC = $(COBJ:.o=.os)
27 #MOBJ = has to be defined if used
28 MOBJ_PIC = $(MOBJ:.o=.os)
29 MOBJ2_PIC = $(MOBJ2:.o=.os)
30 MOBJ3_PIC = $(MOBJ3:.o=.os)
32 #SSRC = $(wildcard *.S)
34 SOBJ_PIC = $(SOBJ:.o=.os)
36 #ARCH_DIR = $(TARGET_ARCH)
37 #ARCH_CSRC = $(wildcard $(ARCH_DIR)/*.c)
38 ARCH_COBJ = $(ARCH_CSRC:.c=.o)
39 ARCH_COBJ_PIC = $(ARCH_COBJ:.o=.os)
41 #ARCH_SSRC = $(wildcard $(TARGET_ARCH)/*.S)
42 ARCH_SOBJ = $(ARCH_SSRC:.S=.o)
43 ARCH_SOBJ_PIC = $(ARCH_SOBJ:.o=.os)
45 OBJS = $(COBJ) $(SOBJ) $(MOBJ) $(MOBJ2) $(MOBJ3)
46 OBJS_PIC = $(COBJ_PIC) $(SOBJ_PIC) $(MOBJ_PIC) $(MOBJ2_PIC) $(MOBJ3_PIC)
48 ARCH_OBJS = $(ARCH_COBJ) $(ARCH_SOBJ)
49 ARCH_OBJS_PIC = $(ARCH_COBJ_PIC) $(ARCH_SOBJ_PIC)
52 $(compile.c) $(DISABLE_PIC)
55 $(compile.m) $(DISABLE_PIC)
58 $(compile.m) $(DISABLE_PIC)
61 $(compile.m) $(DISABLE_PIC)
64 $(compile.S) $(DISABLE_PIC)
66 $(COBJ_PIC): %.os : %.c
67 $(compile.c) $(PICFLAG)
70 $(compile.m) $(PICFLAG)
72 $(MOBJ2_PIC): $(MSRC2)
73 $(compile.m) $(PICFLAG)
75 $(MOBJ3_PIC): $(MSRC3)
76 $(compile.m) $(PICFLAG)
78 $(SOBJ_PIC): %.os : %.S
79 $(compile.S) $(PICFLAG)
81 $(ARCH_COBJ): %.o : %.c
82 $(compile.c) $(DISABLE_PIC)
84 $(ARCH_SOBJ): %.o : %.S
85 $(compile.S) $(DISABLE_PIC)
87 $(ARCH_COBJ_PIC): %.os : %.c
88 $(compile.c) $(PICFLAG)
90 $(ARCH_SOBJ_PIC): %.os : %.S
91 $(compile.S) $(PICFLAG)
93 #ifeq ($(strip $(OBJ_DIR)),)
94 #OBJ_DIR = $(patsubst %libc/,, $(shell pwd))
96 OBJ_FILE = $(subst /,., $(OBJ_DIR))
97 OBJ_LIST = $(patsubst %,$(TOPDIR)libc/obj.%, $(OBJ_FILE))
98 OBJ_LIST_PIC = $(patsubst %,$(TOPDIR)libc/obj_pic.%, $(OBJ_FILE))
101 objs: $(OBJ_LIST_PIC)
103 objs: $(OBJ_LIST) $(OBJ_LIST_PIC)
107 $(STRIPTOOL) -x -R .note -R .comment $^
108 echo $(patsubst %,$(OBJ_DIR)/%, $^) > $@
110 $(OBJ_LIST_PIC): $(OBJS_PIC)
111 $(STRIPTOOL) -x -R .note -R .comment $^
112 echo $(patsubst %,$(OBJ_DIR)/%, $^) > $@
116 AR_LIB_NAME = $(TOPDIR)lib/$(LIB_NAME).a
117 AR_PIC_LIB_NAME = $(LIB_NAME)_pic.a
118 ifeq ($(strip $(SO_LIB_NAME)),)
119 SO_LIB_NAME = $(TOPDIR)lib/$(LIB_NAME).so
121 ifeq ($(strip $(SO_FULL_NAME)),)
122 SO_FULL_NAME = $(LIB_NAME)-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so
124 ifeq ($(strip $(SO_MAJOR_NAME)),)
125 SO_MAJOR_NAME = $(LIB_NAME).so.$(MAJOR_VERSION)
128 # this should be changed to .os after libc/misc/internals/ is done
129 interp := $(TOPDIR)libc/misc/internals/interp.o
130 ifeq ($(strip $(EXTRA_LINK_LIBS)),)
131 EXTRA_LINK_LIBS = $(interp) -L$(TOPDIR)lib -lc $(LDADD_LIBFLOAT) $(LIBGCC)
134 libs: libs_shared $(AR_LIB_NAME)
135 ifeq ($(HAVE_SHARED),y)
136 libs_shared: $(SO_LIB_NAME)
141 $(AR_PIC_LIB_NAME): $(OBJS_PIC) $(ARCH_OBJS_PIC)
143 ifneq ($(strip $(STRIP_FLAGS)),)
144 $(STRIPTOOL) $(STRIP_FLAGS) $^
146 $(STRIPTOOL) -x -R .note -R .comment $^
148 $(AR) $(ARFLAGS) $@ $(OBJS_PIC)
149 ifneq ($(strip $(ARCH_OBJS_PIC)),)
150 $(AR) $(ARFLAGS) $@ $(ARCH_OBJS_PIC)
154 $(AR_LIB_NAME): $(AR_PIC_LIB_NAME)
155 $(INSTALL) -d $(TOPDIR)lib
159 $(AR_LIB_NAME): $(OBJS) $(ARCH_OBJS)
160 $(INSTALL) -d $(TOPDIR)lib
162 ifneq ($(strip $(STRIP_FLAGS)),)
163 $(STRIPTOOL) $(STRIP_FLAGS) $^
165 $(STRIPTOOL) -x -R .note -R .comment $^
167 $(AR) $(ARFLAGS) $@ $(OBJS)
168 ifneq ($(strip $(ARCH_OBJS)),)
169 $(AR) $(ARFLAGS) $@ $(ARCH_OBJS)
173 $(SO_LIB_NAME): $(AR_PIC_LIB_NAME)
174 $(INSTALL) -d $(TOPDIR)lib
175 $(RM) $(TOPDIR)lib/$(SO_FULL_NAME) $(TOPDIR)lib/$(SO_MAJOR_NAME) $@
176 $(LD) $(LDFLAGS) -soname=$(SO_MAJOR_NAME) -o $(TOPDIR)lib/$(SO_FULL_NAME) \
177 $(EXTRA_LINK_OPTS) $(SHARED_START_FILES) --whole-archive $< \
178 --no-whole-archive $(EXTRA_LINK_LIBS) $(SHARED_END_FILES)
179 $(LN) -sf $(SO_FULL_NAME) $(TOPDIR)lib/$(SO_MAJOR_NAME)
180 $(LN) -sf $(SO_FULL_NAME) $@
189 CTOR_TARGETS := $(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o
191 crts: $(TOPDIR)lib/$(CRT).o $(TOPDIR)lib/S$(CRT).o $(CTOR_TARGETS)
193 $(TOPDIR)lib/$(CRT).o: $(CRT).S
194 $(compile.S) $(DISABLE_PIC) -DL_$*
195 $(STRIPTOOL) -x -R .note -R .comment $@
197 $(TOPDIR)lib/S$(CRT).o: $(CRT).S
198 $(compile.S) $(PIEFLAG) -DL_$*
199 $(STRIPTOOL) -x -R .note -R .comment $@
201 ifeq ($(UCLIBC_CTOR_DTOR),y)
202 $(TOPDIR)lib/crti.o: crti.S
203 $(INSTALL) -d $(TOPDIR)lib/
204 $(compile.S) $(PICFLAG) $(SSP_DISABLE_FLAGS)
206 $(TOPDIR)lib/crtn.o: crtn.S
207 $(INSTALL) -d $(TOPDIR)lib/
208 $(compile.S) $(PICFLAG) $(SSP_DISABLE_FLAGS)
211 $(INSTALL) -d $(TOPDIR)lib/
223 ifneq ($(strip $(ARCH_DIR)),)
224 $(RM) $(ARCH_DIR)/*.o $(ARCH_DIR)/*.os
227 subdirs: $(patsubst %, _dir_%, $(DIRS))
228 subdirs_clean: $(patsubst %, _dirclean_%, $(ALL_SUBDIRS))
230 $(patsubst %, _dir_%, $(DIRS)) : dummy
231 $(MAKE) -C $(patsubst _dir_%, %, $@)
233 $(patsubst %, _dirclean_%, $(ALL_SUBDIRS)) : dummy
234 $(MAKE) -C $(patsubst _dirclean_%, %, $@) clean