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