OSDN Git Service

This file is a temporarily used one, until all the tree is converted to new structure...
[uclinux-h8/uClibc.git] / Makerules
1 #
2 # Licensed under LGPL v2.1, see the file COPYING.LIB in this tarball for details.
3 #
4 top_srcdir = $(TOPDIR)
5 top_builddir = $(TOPDIR)
6
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 $@),%, $@)
10
11 #S_CPPFLAGS = -D__ASSEMBLER__ $(asm-CPPFLAGS)
12
13 ifeq ($(DOPIC),y)
14 DISABLE_PIC := $(PICFLAG)
15 else
16 DISABLE_PIC := -fno-PIC
17 endif
18
19 # objects
20 ifeq ($(strip $(CSRC)),)
21 CSRC = $(wildcard *.c)
22 endif
23 COBJ = $(CSRC:.c=.o)
24 COBJ_PIC = $(COBJ:.o=.os)
25
26 #MSRC = some.c
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)
31
32 #SSRC = $(wildcard *.S)
33 SOBJ = $(SSRC:.S=.o)
34 SOBJ_PIC = $(SOBJ:.o=.os)
35
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)
40
41 #ARCH_SSRC = $(wildcard $(TARGET_ARCH)/*.S)
42 ARCH_SOBJ = $(ARCH_SSRC:.S=.o)
43 ARCH_SOBJ_PIC = $(ARCH_SOBJ:.o=.os)
44
45 OBJS = $(COBJ) $(SOBJ) $(MOBJ) $(MOBJ2) $(MOBJ3)
46 OBJS_PIC = $(COBJ_PIC) $(SOBJ_PIC) $(MOBJ_PIC) $(MOBJ2_PIC) $(MOBJ3_PIC)
47
48 ARCH_OBJS = $(ARCH_COBJ) $(ARCH_SOBJ)
49 ARCH_OBJS_PIC = $(ARCH_COBJ_PIC) $(ARCH_SOBJ_PIC)
50
51 $(COBJ): %.o : %.c
52         $(compile.c) $(DISABLE_PIC)
53
54 $(MOBJ): $(MSRC)
55         $(compile.m) $(DISABLE_PIC)
56
57 $(MOBJ2): $(MSRC2)
58         $(compile.m) $(DISABLE_PIC)
59
60 $(MOBJ3): $(MSRC3)
61         $(compile.m) $(DISABLE_PIC)
62
63 $(SOBJ): %.o : %.S
64         $(compile.S) $(DISABLE_PIC)
65
66 $(COBJ_PIC): %.os : %.c
67         $(compile.c) $(PICFLAG)
68
69 $(MOBJ_PIC): $(MSRC)
70         $(compile.m) $(PICFLAG)
71
72 $(MOBJ2_PIC): $(MSRC2)
73         $(compile.m) $(PICFLAG)
74
75 $(MOBJ3_PIC): $(MSRC3)
76         $(compile.m) $(PICFLAG)
77
78 $(SOBJ_PIC): %.os : %.S
79         $(compile.S) $(PICFLAG)
80
81 $(ARCH_COBJ): %.o : %.c
82         $(compile.c) $(DISABLE_PIC)
83
84 $(ARCH_SOBJ): %.o : %.S
85         $(compile.S) $(DISABLE_PIC)
86
87 $(ARCH_COBJ_PIC): %.os : %.c
88         $(compile.c) $(PICFLAG)
89
90 $(ARCH_SOBJ_PIC): %.os : %.S
91         $(compile.S) $(PICFLAG)
92
93 #ifeq ($(strip $(OBJ_DIR)),)
94 #OBJ_DIR = $(patsubst %libc/,, $(shell pwd))
95 #endif
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))
99
100 ifeq ($(DOPIC),y)
101 objs: $(OBJ_LIST_PIC)
102 else
103 objs: $(OBJ_LIST) $(OBJ_LIST_PIC)
104 endif
105
106 $(OBJ_LIST): $(OBJS)
107         $(STRIPTOOL) -x -R .note -R .comment $^
108         echo $(patsubst %,$(OBJ_DIR)/%, $^) > $@
109
110 $(OBJ_LIST_PIC): $(OBJS_PIC)
111         $(STRIPTOOL) -x -R .note -R .comment $^
112         echo $(patsubst %,$(OBJ_DIR)/%, $^) > $@
113
114 # libraries
115 #LIB_NAME=libsome
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
120 endif
121 ifeq ($(strip $(SO_FULL_NAME)),)
122 SO_FULL_NAME = $(LIB_NAME)-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so
123 endif
124 ifeq ($(strip $(SO_MAJOR_NAME)),)
125 SO_MAJOR_NAME = $(LIB_NAME).so.$(MAJOR_VERSION)
126 endif
127
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)
132 endif
133
134 libs: libs_shared $(AR_LIB_NAME)
135 ifeq ($(HAVE_SHARED),y)
136 libs_shared: $(SO_LIB_NAME)
137 else
138 libs_shared:
139 endif
140
141 $(AR_PIC_LIB_NAME): $(OBJS_PIC) $(ARCH_OBJS_PIC)
142         $(RM) $@
143 ifneq ($(strip $(STRIP_FLAGS)),)
144         $(STRIPTOOL) $(STRIP_FLAGS) $^
145 else
146         $(STRIPTOOL) -x -R .note -R .comment $^
147 endif
148         $(AR) $(ARFLAGS) $@ $(OBJS_PIC)
149 ifneq ($(strip $(ARCH_OBJS_PIC)),)
150         $(AR) $(ARFLAGS) $@ $(ARCH_OBJS_PIC)
151 endif
152
153 ifeq ($(DOPIC),y)
154 $(AR_LIB_NAME): $(AR_PIC_LIB_NAME)
155         $(INSTALL) -d $(TOPDIR)lib
156         $(RM) $@
157         cp $< $@
158 else
159 $(AR_LIB_NAME): $(OBJS) $(ARCH_OBJS)
160         $(INSTALL) -d $(TOPDIR)lib
161         $(RM) $@
162 ifneq ($(strip $(STRIP_FLAGS)),)
163         $(STRIPTOOL) $(STRIP_FLAGS) $^
164 else
165         $(STRIPTOOL) -x -R .note -R .comment $^
166 endif
167         $(AR) $(ARFLAGS) $@ $(OBJS)
168 ifneq ($(strip $(ARCH_OBJS)),)
169         $(AR) $(ARFLAGS) $@ $(ARCH_OBJS)
170 endif
171 endif
172
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) $@
181
182 # crt stuff
183 ifeq ($(HAVE_ELF),y)
184 CRT = crt1
185 else
186 CRT = crt0
187 endif
188
189 CTOR_TARGETS := $(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o
190
191 crts: $(TOPDIR)lib/$(CRT).o $(TOPDIR)lib/S$(CRT).o $(CTOR_TARGETS)
192
193 $(TOPDIR)lib/$(CRT).o: $(CRT).S
194         $(compile.S) $(DISABLE_PIC) -DL_$*
195         $(STRIPTOOL) -x -R .note -R .comment $@
196
197 $(TOPDIR)lib/S$(CRT).o: $(CRT).S
198         $(compile.S) $(PIEFLAG) -DL_$*
199         $(STRIPTOOL) -x -R .note -R .comment $@
200
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)
205
206 $(TOPDIR)lib/crtn.o: crtn.S
207         $(INSTALL) -d $(TOPDIR)lib/
208         $(compile.S) $(PICFLAG) $(SSP_DISABLE_FLAGS)
209 else
210 $(CTOR_TARGETS):
211         $(INSTALL) -d $(TOPDIR)lib/
212         $(AR) $(ARFLAGS) $@
213 endif
214
215 # addons
216 headers:
217
218 tags:
219         ctags -R
220
221 clean:
222         $(RM) *.o *.os *.a
223 ifneq ($(strip $(ARCH_DIR)),)
224         $(RM) $(ARCH_DIR)/*.o $(ARCH_DIR)/*.os
225 endif
226
227 subdirs: $(patsubst %, _dir_%, $(DIRS))
228 subdirs_clean: $(patsubst %, _dirclean_%, $(ALL_SUBDIRS))
229
230 $(patsubst %, _dir_%, $(DIRS)) : dummy
231         $(MAKE) -C $(patsubst _dir_%, %, $@)
232
233 $(patsubst %, _dirclean_%, $(ALL_SUBDIRS)) : dummy
234         $(MAKE) -C $(patsubst _dirclean_%, %, $@) clean
235
236 .PHONY: dummy
237 #