OSDN Git Service

dcd51bb1beca8d03f6e8c39630d2c88ab0b41777
[uclinux-h8/uclibc-ng.git] / libc / Makefile
1 # Makefile for uClibc
2 #
3 # Copyright (C) 2000 by Lineo, inc.
4 # Copyright (C) 2000,2001 Erik Andersen <andersen@uclibc.org>
5 #
6 # This program is free software; you can redistribute it and/or modify it under
7 # the terms of the GNU Library General Public License as published by the Free
8 # Software Foundation; either version 2 of the License, or (at your option) any
9 # later version.
10 #
11 # This program is distributed in the hope that it will be useful, but WITHOUT
12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13 # FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
14 # details.
15 #
16 # You should have received a copy of the GNU Library General Public License
17 # along with this program; if not, write to the Free Software Foundation, Inc.,
18 # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 #
20 # Derived in part from the Linux-8086 C library, the GNU C Library, and several
21 # other sundry sources.  Files within this library are copyright by their
22 # respective copyright holders.
23
24 #--------------------------------------------------------
25 #
26 #There are a number of configurable options in "Config"
27 #
28 #--------------------------------------------------------
29
30 TOPDIR=../
31 include $(TOPDIR)Rules.mak
32
33 DIRS = misc pwd_grp stdio string termios inet signal stdlib sysdeps unistd
34
35 # Check if the target architecture has a version script for
36 # libc, and if so, include it when linking.
37 VERSION_SCRIPT:=${shell if [ -f sysdeps/linux/$(TARGET_ARCH)/libc.map ] ; then \
38         echo "--version-script sysdeps/linux/$(TARGET_ARCH)/libc.map"; fi}
39
40 LIBNAME_TARGET:=$(TOPDIR)lib/$(LIBNAME)
41
42 all: halfclean $(LIBNAME_TARGET) $(DO_SHARED)
43
44 # Some functions are duplicated across subdirs, and when you pass $(AR)
45 # the same object file more than once, it'll add it to the archive multiple 
46 # times (boo!).  So what we do here is:
47 #  - import all the objects (thus we may have dupes)
48 #  - delete all the dupes
49 #  - re-import certain objects based upon preference
50 #    - the sysdeps dir should override all other symbols for example
51 # We need to use shell globbing with obj.* because if we use make's wildcard,
52 # the wildcard will be evaluated when `make` is run instead of when the make 
53 # target is evaluated.  That means if you run `rm obj.* ; make`, the wildcard 
54 # will evaluate to no files :(.
55 $(LIBNAME) shared_$(LIBNAME) ar-target: subdirs
56         $(RM) $(LIBNAME) shared_$(LIBNAME)
57         objs=`cat obj.*` ; \
58         $(AR) $(ARFLAGS) $(LIBNAME) $$objs && \
59         $(AR) dN 2 $(LIBNAME) $$objs && \
60         $(AR) dN 2 $(LIBNAME) $$objs
61         @for objfile in obj.signal \
62                         obj.string.generic obj.string.$(TARGET_ARCH) obj.string \
63                         obj.sysdeps.common obj.sysdeps.$(TARGET_ARCH) ; do \
64                 if [ -e $$objfile ] ; then \
65                         if [ "$(MAKE_IS_SILENT)" = "n" ] ; then \
66                                 echo $(AR) $(ARFLAGS) $(LIBNAME) $$objfile ; \
67                         fi ; \
68                         objs=`cat $$objfile` ; \
69                 fi ; \
70                 $(AR) $(ARFLAGS) $(LIBNAME) $$objs || exit 1 ; \
71         done
72         cp $(LIBNAME) shared_$(LIBNAME)
73         $(AR) $(ARFLAGS) $(LIBNAME) misc/internals/static.o
74         $(RANLIB) $(LIBNAME)
75
76 $(LIBNAME_TARGET): $(LIBNAME)
77         $(INSTALL) -d $(TOPDIR)lib
78         $(RM) $(TOPDIR)lib/$(LIBNAME)
79         $(INSTALL) -m 644 $(LIBNAME) $(TOPDIR)lib
80
81 shared: shared_$(LIBNAME)
82         $(LD) $(LDFLAGS) $(VERSION_SCRIPT) -soname=$(SHARED_MAJORNAME) -o $(SHARED_FULLNAME) \
83                 --whole-archive shared_$(LIBNAME) \
84                 $(TOPDIR)libc/misc/internals/interp.o --no-whole-archive \
85                 -init __uClibc_init $(TOPDIR)lib/ld-uClibc.so.0 $(LIBGCC) $(LDADD_LIBFLOAT)
86         @true #$(RM) -r tmp
87         $(INSTALL) -d $(TOPDIR)lib
88         $(RM) $(TOPDIR)lib/$(SHARED_FULLNAME)
89         $(INSTALL) -m 644 $(SHARED_FULLNAME) $(TOPDIR)lib
90         $(LN) -sf $(SHARED_FULLNAME) $(TOPDIR)lib/libc.so
91         $(LN) -sf $(SHARED_FULLNAME) $(TOPDIR)lib/$(SHARED_MAJORNAME)
92
93 halfclean:
94         @$(RM) $(LIBNAME) shared_$(LIBNAME) uClibc_config.h
95         @$(RM) $(SHARED_FULLNAME) $(SHARED_MAJORNAME) uClibc-0.* libc.so*
96
97 tags:
98         ctags -R
99
100 clean: subdirs_clean halfclean
101         @$(RM) -r tmp
102         $(RM) include/asm include/linux include/bits
103         $(RM) obj.*
104
105 subdirs: $(patsubst %, _dir_%, $(DIRS))
106 subdirs_clean: $(patsubst %, _dirclean_%, $(DIRS))
107
108 $(patsubst %, _dir_%, $(DIRS)) : dummy
109         $(MAKE) -C $(patsubst _dir_%, %, $@)
110
111 $(patsubst %, _dirclean_%, $(DIRS)) : dummy
112         $(MAKE) -C $(patsubst _dirclean_%, %, $@) clean
113
114 .PHONY: dummy subdirs