]>
Commit | Line | Data |
---|---|---|
568035b7 | 1 | # Copyright (C) 1991-2013 Free Software Foundation, Inc. |
28f540f4 RM |
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 | |
41bdb6e2 AJ |
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. | |
28f540f4 RM |
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 | |
41bdb6e2 | 12 | # Lesser General Public License for more details. |
28f540f4 | 13 | |
41bdb6e2 | 14 | # You should have received a copy of the GNU Lesser General Public |
59ba27a6 PE |
15 | # License along with the GNU C Library; if not, see |
16 | # <http://www.gnu.org/licenses/>. | |
28f540f4 RM |
17 | |
18 | # | |
19 | # Rules for making a subdirectory in the GNU C library. | |
20 | # Each subdirectory Makefile defines some variables and includes this. | |
21 | # | |
22 | ifneq (,) | |
23 | This makefile requires GNU Make. | |
24 | endif | |
25 | ||
26 | all: # Don't let the default goal come from Makeconfig. | |
27 | ||
e0a3ed4f | 28 | include $(firstword $(..) ../)Makeconfig |
28f540f4 RM |
29 | |
30 | ifndef subdir | |
31 | Each subdirectory makefile must define the `subdir' variable. | |
32 | endif | |
c7562c74 | 33 | # This ` unconfuses emacs. |
28f540f4 RM |
34 | # This is benign and useless in GNU make before 3.63. |
35 | export subdir := $(subdir) | |
36 | \f | |
37 | # This is the default target; it makes the library and auxiliary programs. | |
38 | .PHONY: all | |
96f873b9 | 39 | all: objs lib others |
28f540f4 | 40 | |
0413b54c | 41 | ifeq ($(build-programs),yes) |
a182affd | 42 | others: $(addprefix $(objpfx),$(extra-objs) \ |
6c3ebebd UD |
43 | $(install-lib) \ |
44 | $(install-bin) $(install-bin-script) \ | |
1ef32c3d | 45 | $(install-rootsbin) $(install-sbin)) |
0413b54c UD |
46 | else |
47 | others: $(addprefix $(objpfx),$(extra-objs) \ | |
48 | $(install-lib)) | |
49 | endif | |
a182affd | 50 | |
28f540f4 RM |
51 | ifneq "$(findstring env,$(origin headers))" "" |
52 | headers := | |
53 | endif | |
54 | ||
55 | ifneq "$(findstring env,$(origin generated))" "" | |
56 | generated := | |
57 | endif | |
58 | ||
924840c5 TBB |
59 | ifneq "$(findstring env,$(origin common-generated))" "" |
60 | common-generated := | |
61 | endif | |
62 | ||
adee0e1f RM |
63 | # See below. This must be set before Makerules processes it. |
64 | before-compile += $(common-objpfx)bits/stdio_lim.h | |
65 | ||
e0a3ed4f | 66 | include $(..)Makerules |
28f540f4 RM |
67 | |
68 | .PHONY: subdir_lib | |
3bbceb12 | 69 | subdir_lib: lib-noranlib |
28f540f4 RM |
70 | |
71 | # Some subdirs need to install a dummy library. | |
72 | # They can use "$(objpfx)libfnord.a: $(dep-dummy-lib); $(make-dummy-lib)". | |
6e953631 | 73 | dep-dummy-lib = $(common-objpfx)dummy.o |
28f540f4 RM |
74 | define make-dummy-lib |
75 | $(AR) cr$(verbose) $@ $< | |
76 | endef | |
74015205 | 77 | |
6e953631 | 78 | $(common-objpfx)dummy.c: |
f0097fa0 | 79 | rm -f $@ |
27ee0a55 AJ |
80 | (echo 'extern void __dummy__ (void);'; \ |
81 | echo 'void __dummy__ (void) { }') > $@ | |
464d646f | 82 | common-generated += dummy.o dummy.c |
28f540f4 | 83 | \f |
6d52618b | 84 | # This makes all the auxiliary and test programs. |
28f540f4 | 85 | |
8cfdb7e0 | 86 | .PHONY: others tests bench |
11dd4af6 L |
87 | ifeq ($(multi-arch),no) |
88 | tests := $(filter-out $(tests-ifunc), $(tests)) | |
89 | xtests := $(filter-out $(xtests-ifunc), $(xtests)) | |
90 | endif | |
91 | ||
0413b54c | 92 | ifeq ($(build-programs),yes) |
414fd335 | 93 | others: $(addprefix $(objpfx),$(others) $(sysdep-others) $(extra-objs)) |
0413b54c UD |
94 | else |
95 | others: $(addprefix $(objpfx),$(extra-objs)) | |
96 | endif | |
03ac099f | 97 | ifeq ($(run-built-tests),no) |
7cabd57c | 98 | tests: $(addprefix $(objpfx),$(tests) $(test-srcs)) |
c238ecf7 | 99 | xtests: tests |
28f540f4 | 100 | else |
daaa7713 JM |
101 | tests: $(tests:%=$(objpfx)%.out) |
102 | xtests: tests $(xtests:%=$(objpfx)%.out) | |
786a5421 | 103 | endif |
28f540f4 | 104 | |
0413b54c | 105 | ifeq ($(build-programs),yes) |
95f5a9a8 JM |
106 | binaries-all-notests = $(others) $(sysdep-others) |
107 | binaries-all-tests = $(tests) $(xtests) $(test-srcs) | |
108 | binaries-all = $(binaries-all-notests) $(binaries-all-tests) | |
109 | binaries-static-notests = $(others-static) | |
110 | binaries-static-tests = $(tests-static) $(xtests-static) | |
111 | binaries-static = $(binaries-static-notests) $(binaries-static-tests) | |
da62f81b | 112 | ifeq (yesyes,$(have-fpie)$(build-shared)) |
740b3dbe L |
113 | binaries-pie-tests = $(tests-pie) $(xtests-pie) |
114 | binaries-pie-notests = $(others-pie) | |
da62f81b | 115 | else |
740b3dbe L |
116 | binaries-pie-tests = |
117 | binaries-pie-notests = | |
da62f81b | 118 | endif |
0413b54c | 119 | else |
95f5a9a8 JM |
120 | binaries-all-notests = |
121 | binaries-all-tests = $(tests) $(xtests) $(test-srcs) | |
122 | binaries-all = $(binaries-all-tests) | |
123 | binaries-static-notests = | |
124 | binaries-static-tests = | |
3c5edd4d | 125 | binaries-static = |
740b3dbe L |
126 | binaries-pie-tests = |
127 | binaries-pie-notests = | |
e1586792 UD |
128 | endif |
129 | ||
740b3dbe | 130 | binaries-pie = $(binaries-pie-tests) $(binaries-pie-notests) |
95f5a9a8 JM |
131 | binaries-shared-tests = $(filter-out $(binaries-pie) $(binaries-static), \ |
132 | $(binaries-all-tests)) | |
133 | binaries-shared-notests = $(filter-out $(binaries-pie) $(binaries-static), \ | |
134 | $(binaries-all-notests)) | |
e1586792 | 135 | |
95f5a9a8 JM |
136 | ifneq "$(strip $(binaries-shared-notests))" "" |
137 | $(addprefix $(objpfx),$(binaries-shared-notests)): %: %.o \ | |
9992e360 | 138 | $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ |
0413b54c UD |
139 | $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) |
140 | $(+link) | |
141 | endif | |
e1586792 | 142 | |
95f5a9a8 JM |
143 | ifneq "$(strip $(binaries-shared-tests))" "" |
144 | $(addprefix $(objpfx),$(binaries-shared-tests)): %: %.o \ | |
145 | $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ | |
146 | $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) | |
147 | $(+link-tests) | |
148 | endif | |
149 | ||
740b3dbe L |
150 | ifneq "$(strip $(binaries-pie-tests))" "" |
151 | $(addprefix $(objpfx),$(binaries-pie-tests)): %: %.o \ | |
152 | $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ | |
153 | $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) | |
154 | $(+link-pie-tests) | |
155 | endif | |
156 | ||
157 | ifneq "$(strip $(binaries-pie-notests))" "" | |
158 | $(addprefix $(objpfx),$(binaries-pie-notests)): %: %.o \ | |
da62f81b AS |
159 | $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ |
160 | $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) | |
161 | $(+link-pie) | |
162 | endif | |
163 | ||
95f5a9a8 JM |
164 | ifneq "$(strip $(binaries-static-notests))" "" |
165 | $(addprefix $(objpfx),$(binaries-static-notests)): %: %.o \ | |
9992e360 | 166 | $(sort $(filter $(common-objpfx)lib%,$(link-libc-static))) \ |
e1586792 UD |
167 | $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) |
168 | $(+link-static) | |
0413b54c | 169 | endif |
28f540f4 | 170 | |
95f5a9a8 JM |
171 | ifneq "$(strip $(binaries-static-tests))" "" |
172 | $(addprefix $(objpfx),$(binaries-static-tests)): %: %.o \ | |
173 | $(sort $(filter $(common-objpfx)lib%,$(link-libc-static-tests))) \ | |
174 | $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) | |
175 | $(+link-static-tests) | |
176 | endif | |
177 | ||
c238ecf7 | 178 | ifneq "$(strip $(tests) $(xtests) $(test-srcs))" "" |
28f540f4 RM |
179 | # These are the implicit rules for making test outputs |
180 | # from the test programs and whatever input files are present. | |
41d998a6 | 181 | |
cc1290d0 JM |
182 | make-test-out = $(test-wrapper-env) \ |
183 | GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C \ | |
740b3dbe | 184 | $($*-ENV) $(host-test-program-cmd) $($*-ARGS) |
196980f5 | 185 | $(objpfx)%.out: %.input $(objpfx)% |
41d998a6 | 186 | $(make-test-out) > $@ < $(word 1,$^) |
196980f5 | 187 | $(objpfx)%.out: /dev/null $(objpfx)% # Make it 2nd arg for canned sequence. |
41d998a6 GM |
188 | $(make-test-out) > $@ |
189 | ||
28f540f4 | 190 | endif # tests |
8cfdb7e0 | 191 | |
28f540f4 RM |
192 | \f |
193 | .PHONY: distclean realclean subdir_distclean subdir_realclean \ | |
3c5edd4d | 194 | subdir_clean subdir_mostlyclean subdir_testclean |
28f540f4 RM |
195 | subdir_mostlyclean: mostlyclean |
196 | subdir_clean: clean | |
197 | subdir_distclean: distclean | |
198 | subdir_realclean: realclean | |
3c5edd4d | 199 | subdir_testclean: do-tests-clean |
28f540f4 RM |
200 | realclean: distclean |
201 | distclean: clean | |
202 | ||
28f540f4 RM |
203 | # We want to install everything except the library itself, but update all |
204 | # our portions of the library because the parent make will install it later | |
205 | # (likewise the stubs file). | |
206 | .PHONY: subdir_install | |
613a76ff | 207 | subdir_install: install-no-libc.a lib-noranlib stubs |
28f540f4 | 208 | |
9de06f3c | 209 | .PHONY: subdir_objs subdir_stubs |
5d9e8991 RM |
210 | subdir_objs: objs |
211 | subdir_stubs: stubs | |
28f540f4 | 212 | |
bd78530f UD |
213 | # Target required by the Hurd to ensure that all the MiG-generated |
214 | # headers are in place before building a subdirectory. | |
215 | .PHONY: before-compile | |
216 | before-compile: $(before-compile) | |
217 | ||
3c5edd4d UD |
218 | $(common-objpfx)dummy.o: $(common-objpfx)dummy.c $(before-compile); |
219 | $(compile-command.c) | |
7ef90c15 | 220 | |
c238ecf7 UD |
221 | # Local Variables: |
222 | # mode: makefile | |
223 | # End: |