]>
Commit | Line | Data |
---|---|---|
1 | # Copyright (C) 1991-2000,2002,2003 Free Software Foundation, Inc. | |
2 | # This file is part of the GNU C Library. | |
3 | ||
4 | # The GNU C Library is free software; you can redistribute it and/or | |
5 | # modify it under the terms of the GNU Lesser General Public | |
6 | # License as published by the Free Software Foundation; either | |
7 | # version 2.1 of the License, or (at your option) any later version. | |
8 | ||
9 | # The GNU C Library is distributed in the hope that it will be useful, | |
10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
12 | # Lesser General Public License for more details. | |
13 | ||
14 | # You should have received a copy of the GNU Lesser General Public | |
15 | # License along with the GNU C Library; if not, write to the Free | |
16 | # Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA | |
17 | # 02111-1307 USA. | |
18 | ||
19 | # | |
20 | # Rules for making a subdirectory in the GNU C library. | |
21 | # Each subdirectory Makefile defines some variables and includes this. | |
22 | # | |
23 | ifneq (,) | |
24 | This makefile requires GNU Make. | |
25 | endif | |
26 | ||
27 | all: # Don't let the default goal come from Makeconfig. | |
28 | ||
29 | include ../Makeconfig | |
30 | ||
31 | ifndef subdir | |
32 | Each subdirectory makefile must define the `subdir' variable. | |
33 | endif | |
34 | # This ` unconfuses emacs. | |
35 | # This is benign and useless in GNU make before 3.63. | |
36 | export subdir := $(subdir) | |
37 | \f | |
38 | # This is the default target; it makes the library and auxiliary programs. | |
39 | .PHONY: all | |
40 | all: objs lib others | |
41 | ||
42 | ifeq ($(build-programs),yes) | |
43 | others: $(addprefix $(objpfx),$(extra-objs) \ | |
44 | $(install-lib) \ | |
45 | $(install-bin) $(install-bin-script) \ | |
46 | $(install-rootsbin) $(install-sbin)) | |
47 | else | |
48 | others: $(addprefix $(objpfx),$(extra-objs) \ | |
49 | $(install-lib)) | |
50 | endif | |
51 | ||
52 | ifneq "$(findstring env,$(origin headers))" "" | |
53 | headers := | |
54 | endif | |
55 | ||
56 | ifneq "$(findstring env,$(origin generated))" "" | |
57 | generated := | |
58 | endif | |
59 | ||
60 | ifneq "$(findstring env,$(origin common-generated))" "" | |
61 | common-generated := | |
62 | endif | |
63 | ||
64 | # See below. This must be set before Makerules processes it. | |
65 | before-compile += $(common-objpfx)bits/stdio_lim.h | |
66 | ||
67 | include ../Makerules | |
68 | ||
69 | .PHONY: subdir_lib | |
70 | subdir_lib: lib-noranlib | |
71 | ||
72 | # Some subdirs need to install a dummy library. | |
73 | # They can use "$(objpfx)libfnord.a: $(dep-dummy-lib); $(make-dummy-lib)". | |
74 | dep-dummy-lib = $(common-objpfx)dummy.o | |
75 | define make-dummy-lib | |
76 | $(AR) cr$(verbose) $@ $< | |
77 | endef | |
78 | ||
79 | $(common-objpfx)dummy.c: | |
80 | rm -f $@ | |
81 | (echo 'extern void __dummy__ (void);'; \ | |
82 | echo 'void __dummy__ (void) { }') > $@ | |
83 | common-generated += dummy.o dummy.c | |
84 | \f | |
85 | # This makes all the auxiliary and test programs. | |
86 | ||
87 | .PHONY: others tests | |
88 | ifeq ($(build-programs),yes) | |
89 | others: $(addprefix $(objpfx),$(others) $(sysdep-others) $(extra-objs)) | |
90 | else | |
91 | others: $(addprefix $(objpfx),$(extra-objs)) | |
92 | endif | |
93 | ifeq ($(cross-compiling),yes) | |
94 | tests: $(addprefix $(objpfx),$(tests) $(test-srcs)) | |
95 | xtests: tests | |
96 | else | |
97 | ifeq ($(build-bounded),yes) | |
98 | tests-bp.out = $(tests:%=$(objpfx)%-bp.out) | |
99 | xtests-bp.out = $(tests:%=$(objpfx)%-bp.out) $(xtests:%=$(objpfx)%-bp.out) | |
100 | endif | |
101 | tests: $(tests:%=$(objpfx)%.out) $(tests-bp.out) | |
102 | xtests: $(tests:%=$(objpfx)%.out) $(xtests:%=$(objpfx)%.out) $(xtests-bp.out) | |
103 | endif | |
104 | ||
105 | ifeq ($(build-programs),yes) | |
106 | binaries-all = $(others) $(sysdep-others) $(tests) $(xtests) $(test-srcs) | |
107 | binaries-static = $(others-static) $(tests-static) | |
108 | else | |
109 | binaries-all = $(tests) $(xtests) $(test-srcs) | |
110 | binaries-static = | |
111 | endif | |
112 | ||
113 | binaries-shared = $(filter-out $(binaries-static), $(binaries-all)) | |
114 | ||
115 | ifneq "$(strip $(binaries-shared))" "" | |
116 | $(addprefix $(objpfx),$(binaries-shared)): %: %.o \ | |
117 | $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ | |
118 | $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) | |
119 | $(+link) | |
120 | endif | |
121 | ||
122 | ifneq "$(strip $(binaries-static))" "" | |
123 | $(addprefix $(objpfx),$(binaries-static)): %: %.o \ | |
124 | $(sort $(filter $(common-objpfx)lib%,$(link-libc-static))) \ | |
125 | $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) | |
126 | $(+link-static) | |
127 | endif | |
128 | ||
129 | ifeq ($(build-bounded),yes) | |
130 | binaries-bounded = $(addsuffix -bp,$(tests) $(xtests) $(test-srcs)) | |
131 | $(addprefix $(objpfx),$(binaries-bounded)): %-bp: %.ob \ | |
132 | $(sort $(filter $(common-objpfx)lib%,$(link-libc-bounded))) \ | |
133 | $(addprefix $(csu-objpfx),start.ob) $(+preinit) $(+postinit) | |
134 | $(+link-bounded) | |
135 | endif | |
136 | ||
137 | ifneq "$(strip $(tests) $(xtests) $(test-srcs))" "" | |
138 | # These are the implicit rules for making test outputs | |
139 | # from the test programs and whatever input files are present. | |
140 | ||
141 | make-test-out = GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C \ | |
142 | $($*-ENV) $(built-program-cmd) $($*-ARGS) | |
143 | $(objpfx)%-bp.out: %.input $(objpfx)%-bp | |
144 | $(make-test-out) > $@ < $(word 1,$^) | |
145 | $(objpfx)%.out: %.input $(objpfx)% | |
146 | $(make-test-out) > $@ < $(word 1,$^) | |
147 | $(objpfx)%.out: /dev/null $(objpfx)% # Make it 2nd arg for canned sequence. | |
148 | $(make-test-out) > $@ | |
149 | ||
150 | endif # tests | |
151 | \f | |
152 | .PHONY: distclean realclean subdir_distclean subdir_realclean \ | |
153 | subdir_clean subdir_mostlyclean subdir_testclean | |
154 | subdir_mostlyclean: mostlyclean | |
155 | subdir_clean: clean | |
156 | subdir_distclean: distclean | |
157 | subdir_realclean: realclean | |
158 | subdir_testclean: do-tests-clean | |
159 | realclean: distclean | |
160 | distclean: clean | |
161 | ||
162 | .PHONY: subdir_echo-headers | |
163 | subdir_echo-headers: echo-headers | |
164 | ||
165 | .PHONY: subdir_echo-distinfo | |
166 | subdir_echo-distinfo: | |
167 | @echo $(addprefix +header+,$(headers) $(filter %.h,$(distribute))) \ | |
168 | $(addprefix +nodist+,$(generated) $(common-generated) $(dont_distribute)) | |
169 | ||
170 | # We want to install everything except the library itself, but update all | |
171 | # our portions of the library because the parent make will install it later | |
172 | # (likewise the stubs file). | |
173 | .PHONY: subdir_install | |
174 | subdir_install: install-no-libc.a lib-noranlib stubs | |
175 | ||
176 | .PHONY: subdir_TAGS subdir_dist | |
177 | subdir_TAGS: TAGS | |
178 | subdir_dist: dist | |
179 | ||
180 | # Target required by the Hurd to ensure that all the MiG-generated | |
181 | # headers are in place before building a subdirectory. | |
182 | .PHONY: before-compile | |
183 | before-compile: $(before-compile) | |
184 | ||
185 | $(common-objpfx)dummy.o: $(common-objpfx)dummy.c $(before-compile); | |
186 | $(compile-command.c) | |
187 | ||
188 | # Local Variables: | |
189 | # mode: makefile | |
190 | # End: |