]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/uclibc/lib/uclibc/Makefile
update
[l4.git] / l4 / pkg / uclibc / lib / uclibc / Makefile
1 PKGDIR          ?= ../..
2 L4DIR           ?= $(PKGDIR)/../..
3
4 CXXFLAGS_amd64 += -mcmodel=medium
5 CFLAGS_amd64 += -mcmodel=medium
6
7 include $(L4DIR)/mk/Makeconf
8
9 SYSTEMS         = x86 arm amd64 ppc32
10 TARGET          = libuc_c.a libuc_c.so
11 PC_LIBS         = -luc_c
12 LDFLAGS         = -z combreloc -z relro --sort-common \
13                   --sort-section alignment --warn-common \
14                   --warn-once
15
16 LDFLAGS_libuc_c.so := -init __uClibc_init
17
18 PC_FILENAME     := libc
19 SYSDEPS         := libc/sysdeps/linux
20 VPATH_SRC_BASE  = $(OBJ_DIR)
21
22 FILES_all       := $(PKGDIR_ABS)/lib/uclibc/contrib_files_all.lst
23 FILES_x86       := $(PKGDIR_ABS)/lib/uclibc/contrib_files_x86.lst
24 FILES_arm       := $(PKGDIR_ABS)/lib/uclibc/contrib_files_arm.lst
25 FILES_amd64     := $(PKGDIR_ABS)/lib/uclibc/contrib_files_amd64.lst
26 FILES_ppc32     := $(PKGDIR_ABS)/lib/uclibc/contrib_files_ppc32.lst
27 CONTRIB_DIR     := $(PKGDIR_ABS)/lib/contrib/uclibc
28 PTHLIB_DIR      := $(PKGDIR_ABS)/lib/libpthread
29
30 ifneq ($(SYSTEM),)
31 UCLIBC_ARCH_x86   := i386
32 UCLIBC_ARCH_arm   := arm
33 UCLIBC_ARCH_amd64 := x86_64
34 UCLIBC_ARCH_ppc32 := powerpc
35 UCLIBC_ARCH       := $(UCLIBC_ARCH_$(ARCH))
36 DIRS            := libc/stdio libc/stdlib libc/stdlib/malloc-standard libc/string \
37                    libc/string/$(UCLIBC_ARCH) libc/string/generic \
38                    libc/inet libc/misc libc/misc/assert libc/misc/ctype \
39                    libc/misc/dirent libc/misc/error libc/misc/internals \
40                    libc/misc/locale libc/misc/elf \
41                    libc/misc/time libc/pwd_grp libc/unistd libc/termios \
42                    libc/misc/wctype libc/misc/wchar libc/misc/fnmatch \
43                    libc/misc/glob libc/misc/search libc libcrypt \
44                    libc/signal $(SYSDEPS)/$(UCLIBC_ARCH) \
45                    $(SYSDEPS)/common libm libm/$(UCLIBC_ARCH)
46
47 BOTH_SRC_CC     := $(foreach arch,all $(ARCH),\
48                     $(foreach dir,$(DIRS), \
49                      $(addprefix ARCH-$(arch)/$(dir)/,\
50                       $(notdir $(wildcard ../ARCH-$(arch)/$(dir)/*.cc)))))
51 BOTH_SRC_C      := $(foreach arch,all $(ARCH),\
52                     $(foreach dir,$(DIRS), \
53                      $(addprefix ARCH-$(arch)/$(dir)/,\
54                       $(notdir $(wildcard ../ARCH-$(arch)/$(dir)/*.c)))))
55 BOTH_SRC_S      := $(foreach arch,all $(ARCH),\
56                     $(foreach dir,$(DIRS), \
57                      $(addprefix ARCH-$(arch)/$(dir)/,\
58                       $(notdir $(wildcard ../ARCH-$(arch)/$(dir)/*.S)))))
59
60 # some files cannot be compiled alone but are included by
61 # other files and thus needs to be linked
62 BOTH_SRC_C      := $(filter-out ARCH-all/libc/misc/fnmatch/fnmatch_loop.c ARCH-all/libc/pwd_grp/pwd_grp_internal.c ARCH-ppc32/libc/string/generic/_memcpy_fwd.c,$(BOTH_SRC_C))
63
64 STATICONLY_SRC_C := dl-core.c
65
66 SRC_C_libuc_c.a   := $(BOTH_SRC_C)
67 SRC_C_libuc_c.so  := $(filter-out $(addprefix %/,$(STATICONLY_SRC_C)), $(BOTH_SRC_C))
68 SRC_CC_libuc_c.a  := $(BOTH_SRC_CC)
69 SRC_CC_libuc_c.so := $(BOTH_SRC_CC)
70 SRC_S_libuc_c.a   := $(BOTH_SRC_S)
71 SRC_S_libuc_c.so  := $(BOTH_SRC_S)
72
73 private_incdirs = $(SRC_DIR)/ARCH-$(ARCH)/include $(SRC_DIR)/ARCH-all/include \
74                   $(OBJ_DIR)/ARCH-$(ARCH)/include $(OBJ_DIR)/ARCH-all/include \
75                   $(OBJ_DIR)/ARCH-all/libc/string \
76                   $(SRC_DIR)/../contrib/uclibc/libc/misc/internals \
77                   $(if $(1),$(OBJ_BASE)/include/$(ARCH)/$(L4API)) \
78                   $(OBJ_BASE)/include/$(ARCH) \
79                   $(OBJ_BASE)/include \
80                   $(OBJ_BASE)/include/uclibc \
81                   $(SRC_DIR)/../contrib/uclibc/libcrypt
82
83 PRIVATE_INCDIR  = $(call private_incdirs)
84 LIBCINCDIR      = $(addprefix -I,$(GCCINCDIR))
85 CPPFLAGS        += -nostdinc -include \
86                   $(OBJ_DIR)/ARCH-all/include/libc-symbols.h
87 CFLAGS          += -fno-builtin
88 CFLAGS          += -DUCLIBC_INTERNAL
89 # CFLAGS        += -std=iso9899:199901
90 DEFINES         = -DNDEBUG -D_LIBC -D__UCLIBC_CTOR_DTOR__
91 WARNINGS        = -Wall -Wstrict-prototypes
92
93 CPPFLAGS_dl-iterate-phdr.c += -I$(SRC_DIR)/../contrib/uclibc/ldso/include \
94                               -I$(SRC_DIR)/../contrib/uclibc/ldso/ldso/$(UCLIBC_ARCH)
95 CPPFLAGS_dl-core.c         += -I$(SRC_DIR)/../contrib/uclibc/ldso/ldso/$(UCLIBC_ARCH) \
96                               -I$(SRC_DIR)/../contrib/uclibc/ldso/include
97 CPPFLAGS_$(OBJ_DIR)/ARCH-all/libc/inet += -DRESOLVER="\"resolv.c\""
98
99 PRIVATE_INCDIR_ARCH-all/libc/string/wcslen.o    = $(SRC_DIR)/../contrib/uclibc/libc/string
100 PRIVATE_INCDIR_ARCH-all/libc/string/wcslen.s.o  = $(SRC_DIR)/../contrib/uclibc/libc/string
101 PRIVATE_INCDIR_ARCH-all/libc/string/wcsnlen.o   = $(SRC_DIR)/../contrib/uclibc/libc/string
102 PRIVATE_INCDIR_ARCH-all/libc/string/wcsnlen.s.o = $(SRC_DIR)/../contrib/uclibc/libc/string
103 PRIVATE_INCDIR_ARCH-all/libc/string/wmemcpy.o   = $(SRC_DIR)/../contrib/uclibc/libc/string
104 PRIVATE_INCDIR_ARCH-all/libc/string/wmemcpy.s.o = $(SRC_DIR)/../contrib/uclibc/libc/string
105
106 PRIVATE_INCDIR_ARCH-all/libc/misc/search/hcreate_r.o    = $(SRC_DIR)/../contrib/uclibc/libc/misc/search
107 PRIVATE_INCDIR_ARCH-all/libc/misc/search/hcreate_r.s.o  = $(SRC_DIR)/../contrib/uclibc/libc/misc/search
108 PRIVATE_INCDIR_ARCH-all/libc/misc/search/hdestroy_r.o   = $(SRC_DIR)/../contrib/uclibc/libc/misc/search
109 PRIVATE_INCDIR_ARCH-all/libc/misc/search/hdestroy_r.s.o = $(SRC_DIR)/../contrib/uclibc/libc/misc/search
110 PRIVATE_INCDIR_ARCH-all/libc/misc/search/hsearch_r.o    = $(SRC_DIR)/../contrib/uclibc/libc/misc/search
111 PRIVATE_INCDIR_ARCH-all/libc/misc/search/hsearch_r.s.o  = $(SRC_DIR)/../contrib/uclibc/libc/misc/search
112 PRIVATE_INCDIR_ARCH-all/libc/misc/search/lfind.o        = $(SRC_DIR)/../contrib/uclibc/libc/misc/search
113 PRIVATE_INCDIR_ARCH-all/libc/misc/search/lfind.s.o      = $(SRC_DIR)/../contrib/uclibc/libc/misc/search
114 PRIVATE_INCDIR_ARCH-all/libc/misc/search/tfind.o        = $(SRC_DIR)/../contrib/uclibc/libc/misc/search
115 PRIVATE_INCDIR_ARCH-all/libc/misc/search/tfind.s.o      = $(SRC_DIR)/../contrib/uclibc/libc/misc/search
116 PRIVATE_INCDIR_ARCH-all/libc/misc/search/lsearch.o      = $(SRC_DIR)/../contrib/uclibc/libc/misc/search
117 PRIVATE_INCDIR_ARCH-all/libc/misc/search/lsearch.s.o    = $(SRC_DIR)/../contrib/uclibc/libc/misc/search
118 PRIVATE_INCDIR_ARCH-all/libc/misc/search/tdestroy.o     = $(SRC_DIR)/../contrib/uclibc/libc/misc/search
119 PRIVATE_INCDIR_ARCH-all/libc/misc/search/tdestroy.s.o   = $(SRC_DIR)/../contrib/uclibc/libc/misc/search
120 PRIVATE_INCDIR_ARCH-all/libc/misc/search/tdelete.o      = $(SRC_DIR)/../contrib/uclibc/libc/misc/search
121 PRIVATE_INCDIR_ARCH-all/libc/misc/search/tdelete.s.o    = $(SRC_DIR)/../contrib/uclibc/libc/misc/search
122 PRIVATE_INCDIR_ARCH-all/libc/misc/search/tsearch.o      = $(SRC_DIR)/../contrib/uclibc/libc/misc/search
123 PRIVATE_INCDIR_ARCH-all/libc/misc/search/tsearch.s.o    = $(SRC_DIR)/../contrib/uclibc/libc/misc/search
124 PRIVATE_INCDIR_ARCH-all/libc/misc/search/twalk.o        = $(SRC_DIR)/../contrib/uclibc/libc/misc/search
125 PRIVATE_INCDIR_ARCH-all/libc/misc/search/twalk.s.o      = $(SRC_DIR)/../contrib/uclibc/libc/misc/search
126
127 ifneq ($(L4API),)
128 DEFINES             += -DL4_THREAD_SAFE
129 TARGET              := r/libuc_c.a r/libuc_c.so
130 LDFLAGS_r/libuc_c.so := $(LDFLAGS_libuc_c.so)
131 SRC_C_r/libuc_c.a   := $(SRC_C_libuc_c.a)
132 SRC_C_r/libuc_c.so  := $(SRC_C_libuc_c.so) libpthread/src/forward.c
133 SRC_CC_r/libuc_c.a  := $(SRC_CC_libuc_c.a)
134 SRC_CC_r/libuc_c.so := $(SRC_CC_libuc_c.so)
135 SRC_S_r/libuc_c.a   := $(SRC_S_libuc_c.a)
136 SRC_S_r/libuc_c.so  := $(SRC_S_libuc_c.so)
137 PRIVATE_INCDIR       = $(call private_incdirs,1)
138 vpath libpthread/src/forward.c $(PTHLIB_DIR)/..
139 PRIVATE_INCDIR_libpthread/src/forward.s.o += $(PTHLIB_DIR)/src/sysdeps/$(UCLIBC_ARCH_$(ARCH)) \
140                                              $(PTHLIB_DIR)/src
141 endif
142
143 endif
144
145 BUILD_ARCHS     := all $(BUILD_ARCH)
146
147 .general.d: $(FILES_x86) $(FILE_arm) $(FILES_amd64) $(FILES_all)
148
149 ifeq ($(SYSTEM),)
150
151 INCDIRS         = $(addsuffix /include,$(addprefix $(OBJ_DIR)/ARCH-,$(BUILD_ARCHS)))
152 INCDIRS_OBJ_m   = $(addsuffix /Makefile,$(INCDIRS))
153
154 pre-obj:: include
155
156 $(INCDIRS_OBJ_m):
157         $(VERBOSE)install -d $(dir $@)
158         $(VERBOSE)echo 'PKGDIR   ?= $(PKGDIR_ABS)' > $@
159         $(VERBOSE)echo 'L4DIR    ?= $(L4DIR_ABS)' >> $@
160         $(VERBOSE)echo 'OBJ_BASE ?= $(OBJ_BASE)' >> $@
161         $(VERBOSE)echo 'OBJ_DIR  ?= $(OBJ_DIR)' >> $@
162         $(VERBOSE)echo 'INSTALL_INC_PREFIX = $$(PKGNAME)' >> $@
163         $(VERBOSE)echo 'include $$(L4DIR)/mk/include.mk' >> $@
164
165 .PHONY: include
166
167 include:: $(addprefix $(OBJ_DIR)/ARCH-,$(addsuffix /links-done,$(BUILD_ARCHS))) $(INCDIRS_OBJ_m)
168         $(VERBOSE)for i in $(INCDIRS); do \
169           PWD=$$i $(MAKE) -C $$i all; \
170         done
171
172 install:: all
173         $(VERBOSE)set -e; $(foreach d,$(INCDIRS), \
174           if [ -f $d/Makefile ]; then \
175             PWD=$(PWD)/$d $(MAKE) -C $d $@ $(MKFLAGS); \
176           fi;)
177
178 # ok, we have a list of files to check in FILES
179 # for each file do
180 # check if it exists, yes? go on
181 #   no? create an apropriate link with a relative path to the contrib dir
182
183 REBUILD_LINKS_CONTRIB =                                                  \
184   set -e; arch=$1;                                                       \
185     cat contrib_files_$${arch}.lst | while read file flags;              \
186     do                                                                   \
187       path_file=`dirname $${file}`;                                      \
188       path_ctrb=`dirname $(CONTRIB_DIR)/$${file}`;                       \
189       if [ -n "$${flags}" ]; then                                        \
190         dest="$${path_file}/$${flags}.c";                                \
191       else                                                               \
192         dest="$${file}";                                                 \
193       fi;                                                                \
194       if [ "$${path_file}" = "$(SYSDEPS)/i386/bits" -o                   \
195            "$${path_file}" = "$(SYSDEPS)/arm/bits"  -o                   \
196            "$${path_file}" = "$(SYSDEPS)/x86_64/bits" -o                 \
197            "$${path_file}" = "$(SYSDEPS)/powerpc/bits" -o                \
198            "$${path_file}" = "$(SYSDEPS)/common/bits" ]; then            \
199         if [ \( ! -e ARCH-$${arch}/include/bits/`basename $${dest}` \)   \
200                   -a \( -e $(CONTRIB_DIR)/$${file} \) ]; then            \
201           b=`basename $${file}`;                                         \
202           from=$${path_ctrb}/$$b;                                        \
203           to=$(OBJ_DIR)/ARCH-$${arch}/include/bits/$$b;                  \
204         fi;                                                              \
205       elif [ "$${path_file}" = "$(SYSDEPS)/i386/sys" -o                  \
206              "$${path_file}" = "$(SYSDEPS)/arm/sys"  -o                  \
207              "$${path_file}" = "$(SYSDEPS)/x86_64/sys"  -o               \
208              "$${path_file}" = "$(SYSDEPS)/powerpc/sys"  -o              \
209              "$${path_file}" = "$(SYSDEPS)/common/sys" ]; then           \
210         if [ \( ! -e ARCH-$${arch}/include/sys/`basename $${dest}` \)    \
211                   -a \( -e $(CONTRIB_DIR)/$${file} \) ]; then            \
212           b=`basename $${file}`;                                         \
213           from=$${path_ctrb}/$$b;                                        \
214           to=$(OBJ_DIR)/ARCH-$${arch}/include/sys/$$b;                   \
215         fi;                                                              \
216       elif [ \( "$${path_file}" = "$(SYSDEPS)/i386" -o                   \
217                 "$${path_file}" = "$(SYSDEPS)/arm"  -o                   \
218                 "$${path_file}" = "$(SYSDEPS)/x86_64"  -o                \
219                 "$${path_file}" = "$(SYSDEPS)/powerpc"  -o               \
220                 "$${path_file}" = "$(SYSDEPS)/common" \)                 \
221              -a $${file%.h} != $${file} ]; then                          \
222         if [ \( ! -e ARCH-$${arch}/include/`basename $${dest}` \)        \
223                   -a \( -e $(CONTRIB_DIR)/$${file} \) ]; then            \
224           b=`basename $${file}`;                                         \
225           from=$${path_ctrb}/$$b;                                        \
226           to=$(OBJ_DIR)/ARCH-$${arch}/include/$$b;                       \
227         fi;                                                              \
228       else                                                               \
229         if [ -e $(CONTRIB_DIR)/$${file} ] ; then                         \
230           from=$${path_ctrb}/`basename $${file}`;                        \
231           to=$(OBJ_DIR)/ARCH-$${arch}/$${dest};                          \
232         fi;                                                              \
233       fi;                                                                \
234       if [ -n "$$to" -a -n "$$from" -a ! -e "$$to" ]; then               \
235         d=`dirname $$to`;                                                \
236         [ -d "$$d" ] || mkdir -p $$d;                                    \
237         ln -s$(if $(VERBOSE),,v) "$$from" "$$to";                        \
238       fi;                                                                \
239       unset to; unset from;                                              \
240     done;
241
242 REBUILD_LINKS_SRC =                                                      \
243   set -e; arch=$1;                                                       \
244     find ARCH-$$arch -name \*.h -o -name \*.c -o -name \*.cc -o -name \*.S |            \
245     while read file;                                                     \
246     do                                                                   \
247       to=$(OBJ_DIR)/$$file;                                              \
248       d=$$(dirname $$to);                                                \
249       [ -d "$$d" ] || mkdir -p $$d;                                      \
250       if [ ! -e "$$to" ] ; then                                          \
251         ln -s$(if $(VERBOSE),,v) "$(SRC_DIR)/$$file" "$$to";             \
252       fi;                                                                \
253     done;
254
255
256 $(OBJ_DIR)/ARCH-%/links-done: contrib_files_%.lst Makefile
257         @echo -n "  ... Checking and fixing contrib file links, cleaning .o [$*]"
258         $(VERBOSE)if [ -d "$(OBJ_DIR)/ARCH-$*" ]; then                      \
259           find $(OBJ_DIR)/ARCH-$* -type l | xargs rm -f$(if $(VERBOSE),,v); \
260         fi
261         $(VERBOSE)$(call REBUILD_LINKS_SRC,$*)
262         $(VERBOSE)$(call REBUILD_LINKS_CONTRIB,$*)
263         @touch $@
264         @echo " ... done!"
265
266 else
267
268 CONTRIB: $(addprefix $(OBJ_DIR)/ARCH-,$(addsuffix /links-done,$(BUILD_ARCHS)))
269
270 endif
271
272 cleanall::
273         $(VERBOSE)find $(OBJ_DIR) -type l | xargs rm -f$(if $(VERBOSE),,v)
274         $(VERBOSE)$(RM) $(OBJ_DIR)/ARCH-*/links-done
275         $(VERBOSE)$(RM) $(OBJ_DIR)/ARCH-*/include/.general.d
276
277 # static and shared
278 $(SRC_CC_libuc_c.so:.cc=.s.o)   $(SRC_C_libuc_c.so:.c=.s.o)  : DEFINES += -DSHARED
279 $(SRC_CC_libuc_c.a:.cc=.o)      $(SRC_C_libuc_c.a:.c=.o)     : DEFINES += -DSTATIC
280
281 # some special defines
282 O_AND_SO_OBJS   = $(SRC_CC_libuc_c.a:.cc=.o) $(SRC_CC_libuc_c.so:.cc=.s.o)
283 O_AND_SO_OBJS  += $(SRC_C_libuc_c.a:.c=.o)   $(SRC_C_libuc_c.so:.c=.s.o)
284 $(filter %__DO_UNLOCKED.o %__DO_UNLOCKED.s.o,$(O_AND_SO_OBJS)):\
285         DEFINES += -D__DO_UNLOCKED
286 $(filter %__DO_LARGEFILE.o %__DO_LARGEFILE.s.o,$(O_AND_SO_OBJS)):\
287         DEFINES += -D__DO_LARGEFILE
288 $(filter %__FN.o,$(SRC_C_libuc_c.a:.c=.o)):\
289         DEFINES += -DL_$(patsubst %__FN.o,%,$(notdir $@))
290 $(filter %__FN.s.o,$(SRC_C_libuc_c.a:.c=.s.o)):\
291         DEFINES += -DL_$(patsubst %__FN.s.o,%,$(notdir $@))
292
293 $(SRC_C_libm:.c=.o) $(SRC_C_libm:.c=.s.o):\
294         DEFINES += -D_IEEE_LIBM -D_ISOC99_SOURCE -D_SVID_SOURCE
295
296 $(filter %__FN.o,$(SRC_CC:.cc=.o)):\
297         DEFINES += -DL_$(patsubst %__FN.o,%,$(notdir $@))
298 $(filter %__FN.s.o,$(SRC_CC:.cc=.s.o)):\
299         DEFINES += -DL_$(patsubst %__FN.s.o,%,$(notdir $@))
300
301 $(SRC_CC_libm:.cc=.o) $(SRC_CC_libm:.cc=.s.o):\
302         DEFINES += -D_IEEE_LIBM -D_ISOC99_SOURCE -D_SVID_SOURCE
303
304 include $(L4DIR)/mk/lib.mk