OSDN Git Service

Remove a bunch of guessing about the location of the kernel
[uclinux-h8/uclibc-ng.git] / Makefile
1 # Makefile for uClibc
2 #
3 # Copyright (C) 2000-2003 Erik Andersen <andersen@uclibc.org>
4 #
5 # This program is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU Library General Public
7 # License as published by the Free Software Foundation; either
8 # version 2 of the License, or (at your option) any later
9 # version.
10 #
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU Library General Public License for more details.
15 #
16 # You should have received a copy of the GNU Library General
17 # Public License along with this program; if not, write to the
18 # Free Software Foundation, Inc., 59 Temple Place, Suite 330,
19 # Boston, MA 02111-1307 USA
20
21
22 #--------------------------------------------------------------
23 # You shouldn't need to mess with anything beyond this point...
24 #--------------------------------------------------------------
25 noconfig_targets := menuconfig config oldconfig randconfig \
26         defconfig allyesconfig allnoconfig clean distclean \
27         release tags TAGS
28 TOPDIR=./
29 include Rules.mak
30
31 DIRS = extra ldso libc libcrypt libresolv libnsl libutil libm libpthread libintl
32
33 ifeq ($(strip $(HAVE_DOT_CONFIG)),y)
34
35 all: headers subdirs shared utils finished
36
37 # In this section, we need .config
38 -include .config.cmd
39
40 .PHONY: $(SHARED_TARGET)
41 shared: $(SHARED_TARGET)
42 ifeq ($(strip $(HAVE_SHARED)),y)
43         @$(MAKE) -C libc shared
44         @$(MAKE) -C ldso shared
45         @$(MAKE) -C libcrypt shared
46         @$(MAKE) -C libresolv shared
47         @$(MAKE) -C libnsl shared
48         @$(MAKE) -C libutil shared
49         @$(MAKE) -C libm shared
50         @$(MAKE) -C libpthread shared
51         @$(MAKE) -C libintl shared
52 else
53 ifeq ($(SHARED_TARGET),)
54         @echo
55         @echo Not building shared libraries...
56         @echo
57 endif
58 endif
59
60 ifneq ($(SHARED_TARGET),)
61
62 lib/main.o: $(ROOTDIR)/lib/libc/main.c
63         $(CC) $(CFLAGS) $(ARCH_CFLAGS) -c -o $@ $(ROOTDIR)/lib/libc/main.c
64
65 bogus $(SHARED_TARGET): lib/libc.a lib/main.o Makefile
66         make -C $(ROOTDIR) relink
67         $(CC) -nostartfiles -o $(SHARED_TARGET) $(ARCH_CFLAGS) -Wl,-elf2flt -nostdlib           \
68                 -Wl,-shared-lib-id,${LIBID}                             \
69                 lib/main.o \
70                 -Wl,--whole-archive,lib/libc.a,-lgcc,--no-whole-archive
71         $(OBJCOPY) -L _GLOBAL_OFFSET_TABLE_ -L main -L __main -L _start \
72                 -L __uClibc_main -L __uClibc_start_main -L lib_main \
73                 -L _exit_dummy_ref              \
74                 -L __do_global_dtors -L __do_global_ctors               \
75                 -L __CTOR_LIST__ -L __DTOR_LIST__                       \
76                 -L _current_shared_library_a5_offset_                   \
77                 $(SHARED_TARGET).gdb
78         ln -sf $(SHARED_TARGET).gdb .
79 endif
80
81 finished: shared
82         @echo
83         @echo Finally finished compiling...
84         @echo
85
86 #
87 # Target for uClinux distro
88 #
89 .PHONY: romfs
90 romfs:
91         @if [ "$(CONFIG_BINFMT_SHARED_FLAT)" = "y" ]; then \
92                 [ -e $(ROMFSDIR)/lib ] || mkdir -p $(ROMFSDIR)/lib; \
93                 $(ROMFSINST) $(SHARED_TARGET) /lib/lib$(LIBID).so; \
94         fi
95 ifeq ($(strip $(HAVE_SHARED)),y)
96         install -d $(ROMFSDIR)/lib
97         install -m 644 lib/lib*-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so \
98                 $(ROMFSDIR)/lib
99         cp -fa lib/*.so.* $(ROMFSDIR)/lib/.
100         @if [ -x lib/ld-uClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so ] ; then \
101             set -x -e; \
102             install -m 755 lib/ld-uClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so \
103                         $(ROMFSDIR)/lib; \
104                 $(ROMFSINST) -s \
105                         /lib/ld-uClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so \
106                         /lib/ld-linux.so.2; \
107         fi;
108 endif
109
110 include/bits/uClibc_config.h: .config
111         @if [ ! -x ./extra/config/conf ] ; then \
112             make -C extra/config conf; \
113         fi;
114         rm -rf include/bits
115         mkdir -p include/bits
116         @./extra/config/conf -o extra/Configs/Config.$(TARGET_ARCH)
117
118 headers: include/bits/uClibc_config.h
119 ifeq ($(strip $(UCLIBC_HAS_MMU)),y)
120         @./extra/scripts/fix_includes.sh -k $(KERNEL_SOURCE) -t $(TARGET_ARCH)
121 else
122         @./extra/scripts/fix_includes.sh -k $(KERNEL_SOURCE) -t $(TARGET_ARCH) -n
123 endif
124         @if [ "$(TARGET_ARCH)" = "mipsel" ]; then \
125             (cd libc/sysdeps/linux; \
126             ln -fs mips mipsel); \
127             (cd ldso/ldso; \
128             ln -fs mips mipsel); \
129             (cd libpthread/linuxthreads/sysdeps; \
130             ln -fs mips mipsel); \
131         fi;
132         @cd include/bits; \
133         set -e; \
134         for i in `ls ../../libc/sysdeps/linux/common/bits/*.h` ; do \
135                 ln -fs $$i .; \
136         done; \
137         if [ -d ../../libc/sysdeps/linux/$(TARGET_ARCH)/bits ] ; then \
138                 for i in `ls ../../libc/sysdeps/linux/$(TARGET_ARCH)/bits/*.h` ; do \
139                         ln -fs $$i .; \
140                 done; \
141         fi
142         @cd include/sys; \
143         set -e; \
144         for i in `ls ../../libc/sysdeps/linux/common/sys/*.h` ; do \
145                 ln -fs $$i .; \
146         done; \
147         if [ -d ../../libc/sysdeps/linux/$(TARGET_ARCH)/sys ] ; then \
148                 for i in `ls ../../libc/sysdeps/linux/$(TARGET_ARCH)/sys/*.h` ; do \
149                         ln -fs $$i .; \
150                 done; \
151         fi
152         @cd $(TOPDIR); \
153         set -x -e; \
154         TOPDIR=. CC="$(CC)" /bin/sh extra/scripts/gen_bits_syscall_h.sh > include/bits/sysnum.h.new; \
155         if cmp include/bits/sysnum.h include/bits/sysnum.h.new >/dev/null 2>&1; then \
156                 $(RM) include/bits/sysnum.h.new; \
157         else \
158                 mv -f include/bits/sysnum.h.new include/bits/sysnum.h; \
159         fi
160         $(MAKE) -C libc/sysdeps/linux/$(TARGET_ARCH) headers
161
162 subdirs: $(patsubst %, _dir_%, $(DIRS))
163
164 $(patsubst %, _dir_%, $(DIRS)) : dummy
165         $(MAKE) -C $(patsubst _dir_%, %, $@)
166
167 tags:
168         ctags -R
169
170 install: install_dev install_runtime install_toolchain install_utils finished2
171
172
173 # Installs header files and development library links.
174 install_dev:
175         install -d $(PREFIX)$(DEVEL_PREFIX)/lib
176         install -d $(PREFIX)$(DEVEL_PREFIX)/usr/lib
177         install -d $(PREFIX)$(DEVEL_PREFIX)/include
178         -install -m 644 lib/*.[ao] $(PREFIX)$(DEVEL_PREFIX)/lib/
179         tar -chf - include | tar -xf - -C $(PREFIX)$(DEVEL_PREFIX);
180         -@for i in `find  $(PREFIX)$(DEVEL_PREFIX) -type d` ; do \
181             chmod -f 755 $$i; chmod -f 644 $$i/*.h; \
182         done;
183         -find $(PREFIX)$(DEVEL_PREFIX) -name CVS | xargs rm -rf;
184         -chown -R `id | sed 's/^uid=\([0-9]*\).*gid=\([0-9]*\).*$$/\1.\2/'` $(PREFIX)$(DEVEL_PREFIX)
185 ifeq ($(strip $(HAVE_SHARED)),y)
186         -install -m 644 lib/*.so $(PREFIX)$(DEVEL_PREFIX)/lib/
187         -find lib/ -type l -name '*.so' -exec cp -fa {} $(PREFIX)$(DEVEL_PREFIX)/lib ';'
188         # If we build shared libraries then the static libs are PIC...
189         # Make _pic.a symlinks to make mklibs.py and similar tools happy.
190         for i in `find lib/  -type f -name '*.a' | sed -e 's/lib\///'` ; do \
191                 ln -sf $$i $(PREFIX)$(DEVEL_PREFIX)/lib/`echo $$i | sed -e 's/\.a$$/_pic.a/'`; \
192         done
193 endif
194
195
196 # Installs run-time libraries and helper apps onto the host system
197 # allowing cross development.  If you want to deploy to a target 
198 # system, use the "install_target" target instead... 
199 install_runtime:
200 ifeq ($(strip $(HAVE_SHARED)),y)
201         install -d $(PREFIX)$(DEVEL_PREFIX)/lib
202         install -d $(PREFIX)$(DEVEL_PREFIX)/bin
203         install -m 644 lib/lib*-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so \
204                 $(PREFIX)$(DEVEL_PREFIX)/lib
205         cp -fa lib/*.so.* $(PREFIX)$(DEVEL_PREFIX)/lib
206         @if [ -x lib/ld-uClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so ] ; then \
207             set -x -e; \
208             install -m 755 lib/ld-uClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so \
209                         $(PREFIX)$(DEVEL_PREFIX)/lib; \
210         fi;
211         #@if [ -x lib/ld-uClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so ] ; then \
212         #    install -d $(PREFIX)$(SHARED_LIB_LOADER_PATH); \
213         #    ln -sf $(PREFIX)$(DEVEL_PREFIX)/lib/ld-uClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so \
214         #               $(PREFIX)$(SHARED_LIB_LOADER_PATH)/$(UCLIBC_LDSO); \
215         #fi;
216 endif
217
218 install_toolchain:
219         install -d $(PREFIX)$(DEVEL_PREFIX)/lib
220         install -d $(PREFIX)$(DEVEL_PREFIX)/bin
221         install -d $(PREFIX)$(DEVEL_TOOL_PREFIX)/bin
222         install -d $(PREFIX)$(SYSTEM_DEVEL_PREFIX)/bin
223         $(MAKE) -C extra/gcc-uClibc install
224
225 ifeq ($(strip $(HAVE_SHARED)),y)
226 utils: $(TOPDIR)ldso/util/ldd
227         $(MAKE) -C ldso utils
228 else
229 utils: dummy
230 endif
231
232 install_utils: utils
233 ifeq ($(strip $(HAVE_SHARED)),y)
234         install -d $(PREFIX)$(DEVEL_TOOL_PREFIX)/bin;
235         install -m 755 ldso/util/ldd \
236                 $(PREFIX)$(SYSTEM_DEVEL_PREFIX)/bin/$(TARGET_ARCH)-uclibc-ldd
237         ln -fs $(SYSTEM_DEVEL_PREFIX)/bin/$(TARGET_ARCH)-uclibc-ldd \
238                 $(PREFIX)$(DEVEL_TOOL_PREFIX)/bin/ldd
239         # For now, don't bother with readelf since surely the host
240         # system has binutils, or we couldn't have gotten this far...
241         #install -m 755 ldso/util/readelf \
242         #       $(PREFIX)$(SYSTEM_DEVEL_PREFIX)/bin/$(TARGET_ARCH)-uclibc-readelf
243         #ln -fs $(SYSTEM_DEVEL_PREFIX)/bin/$(TARGET_ARCH)-uclibc-readelf \
244         #       $(PREFIX)$(DEVEL_TOOL_PREFIX)/bin/readelf
245         @if [ -x ldso/util/ldconfig ] ; then \
246             set -x -e; \
247             install -d $(PREFIX)$(DEVEL_PREFIX)/etc; \
248             install -m 755 ldso/util/ldconfig \
249                     $(PREFIX)$(SYSTEM_DEVEL_PREFIX)/bin/$(TARGET_ARCH)-uclibc-ldconfig; \
250             ln -fs $(SYSTEM_DEVEL_PREFIX)/bin/$(TARGET_ARCH)-uclibc-ldconfig \
251                     $(PREFIX)$(DEVEL_TOOL_PREFIX)/bin/ldconfig; \
252         fi;
253 endif
254
255 # Installs run-time libraries and helper apps in preparation for
256 # deploying onto a target system, but installed below wherever
257 # $PREFIX is set to, allowing you to package up the result for
258 # deployment onto your target system.
259 install_target:
260 ifeq ($(strip $(HAVE_SHARED)),y)
261         install -d $(PREFIX)$(TARGET_PREFIX)/lib
262         install -d $(PREFIX)$(TARGET_PREFIX)/usr/bin
263         install -m 644 lib/lib*-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so \
264                 $(PREFIX)$(TARGET_PREFIX)/lib
265         cp -fa lib/*.so.* $(PREFIX)$(TARGET_PREFIX)/lib
266         @if [ -x lib/ld-uClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so ] ; then \
267             set -x -e; \
268             install -m 755 lib/ld-uClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so \
269                         $(PREFIX)$(TARGET_PREFIX)/lib; \
270         fi;
271         #@if [ -x lib/ld-uClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so ] ; then \
272         #    install -d $(PREFIX)$(SHARED_LIB_LOADER_PATH); \
273         #    ln -sf $(PREFIX)$(TARGET_PREFIX)/lib/ld-uClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so \
274         #               $(PREFIX)$(SHARED_LIB_LOADER_PATH)/$(UCLIBC_LDSO); \
275         #fi;
276 endif
277
278 install_target_utils:
279 ifeq ($(strip $(HAVE_SHARED)),y)
280         @$(MAKE) -C ldso/util ldd.target readelf.target #ldconfig.target
281         install -d $(PREFIX)$(TARGET_PREFIX)/usr/bin;
282         install -m 755 ldso/util/ldd.target $(PREFIX)$(TARGET_PREFIX)/usr/bin/ldd
283         install -m 755 ldso/util/readelf.target $(PREFIX)$(TARGET_PREFIX)/usr/bin/readelf
284         @if [ -x ldso/util/ldconfig.target ] ; then \
285             set -x -e; \
286             install -d $(PREFIX)$(TARGET_PREFIX)/etc; \
287             install -d $(PREFIX)$(TARGET_PREFIX)/sbin; \
288             install -m 755 ldso/util/ldconfig.target $(PREFIX)$(TARGET_PREFIX)/sbin/ldconfig; \
289         fi;
290 endif
291 ifeq ($(strip $(UCLIBC_HAS_LOCALE)),y)
292         @$(MAKE) -C libc/misc/wchar iconv.target
293         install -d $(PREFIX)$(TARGET_PREFIX)/usr/bin;
294         install -m 755 libc/misc/wchar/iconv.target $(PREFIX)$(TARGET_PREFIX)/usr/bin/iconv
295 endif
296
297 finished2:
298         @echo
299         @echo Finished installing...
300         @echo
301
302 else # ifeq ($(strip $(HAVE_DOT_CONFIG)),y)
303
304 all: menuconfig
305
306 # configuration
307 # ---------------------------------------------------------------------------
308
309 extra/config/conf:
310         make -C extra/config conf
311         -@if [ ! -f .config ] ; then \
312                 cp extra/Configs/Config.$(TARGET_ARCH).default .config; \
313         fi
314
315 extra/config/mconf:
316         make -C extra/config ncurses conf mconf
317         -@if [ ! -f .config ] ; then \
318                 cp extra/Configs/Config.$(TARGET_ARCH).default .config; \
319         fi
320
321 menuconfig: extra/config/mconf
322         rm -rf include/bits
323         mkdir -p include/bits
324         @./extra/config/mconf extra/Configs/Config.$(TARGET_ARCH)
325
326 config: extra/config/conf
327         rm -rf include/bits
328         mkdir -p include/bits
329         @./extra/config/conf extra/Configs/Config.$(TARGET_ARCH)
330
331 oldconfig: extra/config/conf
332         rm -rf include/bits
333         mkdir -p include/bits
334         @./extra/config/conf -o extra/Configs/Config.$(TARGET_ARCH)
335
336 randconfig: extra/config/conf
337         rm -rf include/bits
338         mkdir -p include/bits
339         @./extra/config/conf -r extra/Configs/Config.$(TARGET_ARCH)
340
341 allyesconfig: extra/config/conf
342         rm -rf include/bits
343         mkdir -p include/bits
344         @./extra/config/conf -y extra/Configs/Config.$(TARGET_ARCH)
345
346 allnoconfig: extra/config/conf
347         rm -rf include/bits
348         mkdir -p include/bits
349         @./extra/config/conf -n extra/Configs/Config.$(TARGET_ARCH)
350
351 defconfig: extra/config/conf
352         rm -rf include/bits
353         mkdir -p include/bits
354         @./extra/config/conf -d extra/Configs/Config.$(TARGET_ARCH)
355
356
357 clean:
358         - find . \( -name \*.o -o -name \*.a -o -name \*.so -o -name core -o -name .\#\* \) -exec rm -f {} \;
359         @rm -rf tmp lib include/bits libc/tmp _install
360         $(MAKE) -C test clean
361         $(MAKE) -C ldso clean
362         $(MAKE) -C libc/misc/internals clean
363         $(MAKE) -C libc/misc/wchar clean
364         $(MAKE) -C libc/unistd clean
365         $(MAKE) -C libc/sysdeps/linux/common clean
366         $(MAKE) -C extra/gcc-uClibc clean
367         $(MAKE) -C extra/locale clean
368         @set -e; \
369         for i in `(cd $(TOPDIR)/libc/sysdeps/linux/common/sys; ls *.h)` ; do \
370                 rm -f include/sys/$$i; \
371         done; \
372         if [ -d libc/sysdeps/linux/$(TARGET_ARCH)/sys ] ; then \
373                 for i in `(cd libc/sysdeps/linux/$(TARGET_ARCH)/sys; ls *.h)` ; do \
374                         rm -f include/sys/$$i; \
375                 done; \
376         fi;
377         @rm -f include/linux include/scsi include/asm
378         @if [ -d libc/sysdeps/linux/$(TARGET_ARCH) ]; then              \
379             $(MAKE) -C libc/sysdeps/linux/$(TARGET_ARCH) clean;         \
380         fi;
381         @if [ "$(TARGET_ARCH)" = "mipsel" ]; then \
382             $(MAKE) -C libc/sysdeps/linux/mips clean; \
383             rm -f ldso/ldso/mipsel; \
384             rm -f libc/sysdeps/linux/mipsel; \
385             rm -f libpthread/linuxthreads/sysdeps/mipsel; \
386         fi;
387
388 distclean: clean
389         rm -f .config .config.old .config.cmd
390         $(MAKE) -C extra clean
391
392 release: distclean
393         cd ..;                                  \
394         rm -rf uClibc-$(VERSION);               \
395         cp -fa uClibc uClibc-$(VERSION);                \
396         find uClibc-$(VERSION)/ -type f         \
397             -name .\#* -exec rm -rf {} \; ;     \
398         find uClibc-$(VERSION)/ -type d         \
399             -name CVS  -exec rm -rf {} \; ;     \
400                                                 \
401         tar -cvzf uClibc-$(VERSION).tar.gz uClibc-$(VERSION)/;
402
403 endif # ifeq ($(strip $(HAVE_DOT_CONFIG)),y)
404
405 .PHONY: dummy subdirs release distclean clean config oldconfig menuconfig
406
407