]>
Commit | Line | Data |
---|---|---|
dff8da6b | 1 | # Copyright (C) 1991-2024 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 | 15 | # License along with the GNU C Library; if not, see |
5a82c748 | 16 | # <https://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 | ||
e0a3ed4f | 63 | include $(..)Makerules |
28f540f4 RM |
64 | |
65 | .PHONY: subdir_lib | |
3bbceb12 | 66 | subdir_lib: lib-noranlib |
28f540f4 RM |
67 | |
68 | # Some subdirs need to install a dummy library. | |
69 | # They can use "$(objpfx)libfnord.a: $(dep-dummy-lib); $(make-dummy-lib)". | |
6e953631 | 70 | dep-dummy-lib = $(common-objpfx)dummy.o |
28f540f4 RM |
71 | define make-dummy-lib |
72 | $(AR) cr$(verbose) $@ $< | |
73 | endef | |
74015205 | 74 | |
6e953631 | 75 | $(common-objpfx)dummy.c: |
f0097fa0 | 76 | rm -f $@ |
27ee0a55 AJ |
77 | (echo 'extern void __dummy__ (void);'; \ |
78 | echo 'void __dummy__ (void) { }') > $@ | |
464d646f | 79 | common-generated += dummy.o dummy.c |
47755784 ZW |
80 | |
81 | ifneq "$(headers)" "" | |
711a322a ZW |
82 | # Test that all of the headers installed by this directory can be compiled |
83 | # in isolation. | |
47755784 | 84 | tests-special += $(objpfx)check-installed-headers-c.out |
7c3018f9 | 85 | libof-check-installed-headers-c := testsuite |
47755784 ZW |
86 | $(objpfx)check-installed-headers-c.out: \ |
87 | $(..)scripts/check-installed-headers.sh $(headers) | |
a3090c2c | 88 | $(SHELL) $(..)scripts/check-installed-headers.sh c $(supported-fortify) \ |
47755784 ZW |
89 | "$(CC) $(filter-out -std=%,$(CFLAGS)) -D_ISOMAC $(+includes)" \ |
90 | $(headers) > $@; \ | |
91 | $(evaluate-test) | |
92 | ||
93 | ifneq "$(CXX)" "" | |
711a322a ZW |
94 | # If a C++ compiler is available, also test that they can be compiled |
95 | # in isolation as C++. | |
47755784 | 96 | tests-special += $(objpfx)check-installed-headers-cxx.out |
7c3018f9 | 97 | libof-check-installed-headers-cxx := testsuite |
47755784 ZW |
98 | $(objpfx)check-installed-headers-cxx.out: \ |
99 | $(..)scripts/check-installed-headers.sh $(headers) | |
a3090c2c | 100 | $(SHELL) $(..)scripts/check-installed-headers.sh c++ $(supported-fortify) \ |
47755784 ZW |
101 | "$(CXX) $(filter-out -std=%,$(CXXFLAGS)) -D_ISOMAC $(+includes)" \ |
102 | $(headers) > $@; \ | |
103 | $(evaluate-test) | |
ad18dade FW |
104 | endif # $(CXX) |
105 | ||
711a322a ZW |
106 | # Test that a wrapper header exists in include/ for each non-sysdeps header. |
107 | # This script does not need $(py-env). | |
ad18dade FW |
108 | tests-special += $(objpfx)check-wrapper-headers.out |
109 | $(objpfx)check-wrapper-headers.out: \ | |
110 | $(..)scripts/check-wrapper-headers.py $(headers) | |
111 | $(PYTHON) $< --root=$(..) --subdir=$(subdir) $(headers) > $@; \ | |
112 | $(evaluate-test) | |
113 | ||
711a322a ZW |
114 | # Test that none of the headers installed by this directory use certain |
115 | # obsolete constructs (e.g. legacy BSD typedefs superseded by stdint.h). | |
116 | # This script does not need $(py-env). | |
117 | tests-special += $(objpfx)check-obsolete-constructs.out | |
118 | libof-check-obsolete-constructs := testsuite | |
119 | $(objpfx)check-obsolete-constructs.out: \ | |
120 | $(..)scripts/check-obsolete-constructs.py $(headers) | |
121 | $(PYTHON) $^ > $@ 2>&1; \ | |
122 | $(evaluate-test) | |
123 | ||
ad18dade | 124 | endif # $(headers) |
28f540f4 | 125 | \f |
6d52618b | 126 | # This makes all the auxiliary and test programs. |
28f540f4 | 127 | |
a00d3f4a | 128 | .PHONY: others tests bench bench-build |
11dd4af6 | 129 | |
23b5cae1 MG |
130 | # Test programs for the pretty printers. |
131 | tests-printers-programs := $(addprefix $(objpfx),$(tests-printers)) | |
132 | ||
133 | # .out files with the output of running the pretty printer tests. | |
134 | tests-printers-out := $(patsubst %,$(objpfx)%.out,$(tests-printers)) | |
135 | ||
0413b54c | 136 | ifeq ($(build-programs),yes) |
414fd335 | 137 | others: $(addprefix $(objpfx),$(others) $(sysdep-others) $(extra-objs)) |
0413b54c UD |
138 | else |
139 | others: $(addprefix $(objpfx),$(extra-objs)) | |
140 | endif | |
23b5cae1 MG |
141 | |
142 | # Generate constant files for Python pretty printers if required. | |
143 | others: $(py-const) | |
144 | ||
03ac099f | 145 | ifeq ($(run-built-tests),no) |
7c3018f9 | 146 | tests: $(addprefix $(objpfx),$(filter-out $(tests-unsupported), \ |
561b0bec DD |
147 | $(tests) $(tests-internal) \ |
148 | $(tests-container)) \ | |
31cd0548 SP |
149 | $(test-srcs)) $(tests-special) \ |
150 | $(tests-printers-programs) | |
f214606a | 151 | xtests: tests $(xtests-special) |
28f540f4 | 152 | else |
7c3018f9 | 153 | tests: $(tests:%=$(objpfx)%.out) $(tests-internal:%=$(objpfx)%.out) \ |
561b0bec | 154 | $(tests-container:%=$(objpfx)%.out) \ |
784fff6e | 155 | $(tests-mcheck:%=$(objpfx)%-mcheck.out) \ |
451659cc | 156 | $(tests-malloc-check:%=$(objpfx)%-malloc-check.out) \ |
5f6d8d97 | 157 | $(tests-malloc-hugetlb1:%=$(objpfx)%-malloc-hugetlb1.out) \ |
98d5fcb8 | 158 | $(tests-malloc-hugetlb2:%=$(objpfx)%-malloc-hugetlb2.out) \ |
7c3018f9 | 159 | $(tests-special) $(tests-printers-out) |
f214606a | 160 | xtests: tests $(xtests:%=$(objpfx)%.out) $(xtests-special) |
786a5421 | 161 | endif |
28f540f4 | 162 | |
265d52ab JM |
163 | tests-special-notdir = $(patsubst $(objpfx)%, %, $(tests-special)) |
164 | xtests-special-notdir = $(patsubst $(objpfx)%, %, $(xtests-special)) | |
e64e1171 JM |
165 | ifeq ($(run-built-tests),no) |
166 | tests-expected = | |
167 | else | |
561b0bec | 168 | tests-expected = $(tests) $(tests-internal) $(tests-printers) \ |
784fff6e | 169 | $(tests-container) $(tests-malloc-check:%=%-malloc-check) \ |
5f6d8d97 | 170 | $(tests-malloc-hugetlb1:%=%-malloc-hugetlb1) \ |
98d5fcb8 | 171 | $(tests-malloc-hugetlb2:%=%-malloc-hugetlb2) \ |
784fff6e | 172 | $(tests-mcheck:%=%-mcheck) |
e64e1171 | 173 | endif |
265d52ab JM |
174 | tests: |
175 | $(..)scripts/merge-test-results.sh -s $(objpfx) $(subdir) \ | |
3d6bfcac | 176 | $(sort $(tests-expected) $(tests-special-notdir:.out=)) \ |
265d52ab JM |
177 | > $(objpfx)subdir-tests.sum |
178 | xtests: | |
179 | $(..)scripts/merge-test-results.sh -s $(objpfx) $(subdir) \ | |
180 | $(sort $(xtests) $(xtests-special-notdir:.out=)) \ | |
181 | > $(objpfx)subdir-xtests.sum | |
182 | ||
0413b54c | 183 | ifeq ($(build-programs),yes) |
95f5a9a8 | 184 | binaries-all-notests = $(others) $(sysdep-others) |
561b0bec DD |
185 | binaries-all-tests = $(tests) $(tests-internal) $(xtests) $(test-srcs) \ |
186 | $(tests-container) | |
95f5a9a8 JM |
187 | binaries-all = $(binaries-all-notests) $(binaries-all-tests) |
188 | binaries-static-notests = $(others-static) | |
189 | binaries-static-tests = $(tests-static) $(xtests-static) | |
190 | binaries-static = $(binaries-static-notests) $(binaries-static-tests) | |
5f245f3b | 191 | binaries-shared-2.0-tests = $(tests-2.0) |
da62f81b | 192 | ifeq (yesyes,$(have-fpie)$(build-shared)) |
740b3dbe L |
193 | binaries-pie-tests = $(tests-pie) $(xtests-pie) |
194 | binaries-pie-notests = $(others-pie) | |
da62f81b | 195 | else |
740b3dbe L |
196 | binaries-pie-tests = |
197 | binaries-pie-notests = | |
da62f81b | 198 | endif |
784fff6e | 199 | binaries-mcheck-tests = $(tests-mcheck:%=%-mcheck) |
451659cc | 200 | binaries-malloc-check-tests = $(tests-malloc-check:%=%-malloc-check) |
5f6d8d97 | 201 | binaries-malloc-hugetlb1-tests = $(tests-malloc-hugetlb1:%=%-malloc-hugetlb1) |
98d5fcb8 | 202 | binaries-malloc-hugetlb2-tests = $(tests-malloc-hugetlb2:%=%-malloc-hugetlb2) |
0413b54c | 203 | else |
95f5a9a8 | 204 | binaries-all-notests = |
7c3018f9 | 205 | binaries-all-tests = $(tests) $(tests-internal) $(xtests) $(test-srcs) |
95f5a9a8 JM |
206 | binaries-all = $(binaries-all-tests) |
207 | binaries-static-notests = | |
208 | binaries-static-tests = | |
3c5edd4d | 209 | binaries-static = |
740b3dbe L |
210 | binaries-pie-tests = |
211 | binaries-pie-notests = | |
784fff6e | 212 | binaries-mcheck-tests = |
451659cc | 213 | binaries-malloc-check-tests = |
5f6d8d97 | 214 | binaries-malloc-hugetlb1-tests = |
98d5fcb8 | 215 | binaries-malloc-hugetlb2-tests = |
e1586792 UD |
216 | endif |
217 | ||
740b3dbe | 218 | binaries-pie = $(binaries-pie-tests) $(binaries-pie-notests) |
5f245f3b L |
219 | binaries-shared-tests = $(filter-out $(binaries-pie) $(binaries-static) \ |
220 | $(binaries-shared-2.0-tests), \ | |
95f5a9a8 JM |
221 | $(binaries-all-tests)) |
222 | binaries-shared-notests = $(filter-out $(binaries-pie) $(binaries-static), \ | |
223 | $(binaries-all-notests)) | |
e1586792 | 224 | |
95f5a9a8 JM |
225 | ifneq "$(strip $(binaries-shared-notests))" "" |
226 | $(addprefix $(objpfx),$(binaries-shared-notests)): %: %.o \ | |
9992e360 | 227 | $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ |
0413b54c UD |
228 | $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) |
229 | $(+link) | |
230 | endif | |
e1586792 | 231 | |
95f5a9a8 JM |
232 | ifneq "$(strip $(binaries-shared-tests))" "" |
233 | $(addprefix $(objpfx),$(binaries-shared-tests)): %: %.o \ | |
76dcbf42 | 234 | $(link-extra-libs-tests) \ |
95f5a9a8 JM |
235 | $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ |
236 | $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) | |
237 | $(+link-tests) | |
238 | endif | |
239 | ||
5f245f3b L |
240 | # Linking test programs with crt1.o from glibc 2.0. |
241 | ifneq "$(strip $(binaries-shared-2.0-tests))" "" | |
242 | $(addprefix $(objpfx),$(binaries-shared-2.0-tests)): %: %.o \ | |
243 | $(link-extra-libs-tests) \ | |
244 | $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ | |
245 | $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) | |
246 | $(+link-2.0-tests) | |
247 | endif | |
248 | ||
784fff6e SP |
249 | ifneq "$(strip $(binaries-mcheck-tests))" "" |
250 | $(addprefix $(objpfx),$(binaries-mcheck-tests)): %-mcheck: %.o \ | |
251 | $(link-extra-libs-tests) \ | |
252 | $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ | |
253 | $(common-objpfx)malloc/libmcheck.a \ | |
254 | $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) | |
255 | $(+link-tests) | |
256 | endif | |
257 | ||
451659cc SP |
258 | ifneq "$(strip $(binaries-malloc-check-tests))" "" |
259 | $(addprefix $(objpfx),$(binaries-malloc-check-tests)): %-malloc-check: %.o \ | |
4f969166 SP |
260 | $(link-extra-libs-tests) \ |
261 | $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ | |
262 | $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) | |
263 | $(+link-tests) | |
264 | endif | |
265 | ||
5f6d8d97 AZ |
266 | ifneq "$(strip $(binaries-malloc-hugetlb1-tests))" "" |
267 | $(addprefix $(objpfx),$(binaries-malloc-hugetlb1-tests)): %-malloc-hugetlb1: %.o \ | |
268 | $(link-extra-libs-tests) \ | |
269 | $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ | |
270 | $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) | |
271 | $(+link-tests) | |
272 | endif | |
273 | ||
98d5fcb8 AZ |
274 | ifneq "$(strip $(binaries-malloc-hugetlb2-tests))" "" |
275 | $(addprefix $(objpfx),$(binaries-malloc-hugetlb2-tests)): %-malloc-hugetlb2: %.o \ | |
276 | $(link-extra-libs-tests) \ | |
277 | $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ | |
278 | $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) | |
279 | $(+link-tests) | |
280 | endif | |
281 | ||
740b3dbe L |
282 | ifneq "$(strip $(binaries-pie-tests))" "" |
283 | $(addprefix $(objpfx),$(binaries-pie-tests)): %: %.o \ | |
76dcbf42 | 284 | $(link-extra-libs-tests) \ |
740b3dbe L |
285 | $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ |
286 | $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) | |
287 | $(+link-pie-tests) | |
288 | endif | |
289 | ||
290 | ifneq "$(strip $(binaries-pie-notests))" "" | |
291 | $(addprefix $(objpfx),$(binaries-pie-notests)): %: %.o \ | |
da62f81b AS |
292 | $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ |
293 | $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) | |
294 | $(+link-pie) | |
295 | endif | |
296 | ||
95f5a9a8 JM |
297 | ifneq "$(strip $(binaries-static-notests))" "" |
298 | $(addprefix $(objpfx),$(binaries-static-notests)): %: %.o \ | |
9992e360 | 299 | $(sort $(filter $(common-objpfx)lib%,$(link-libc-static))) \ |
e1586792 UD |
300 | $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) |
301 | $(+link-static) | |
0413b54c | 302 | endif |
28f540f4 | 303 | |
95f5a9a8 JM |
304 | ifneq "$(strip $(binaries-static-tests))" "" |
305 | $(addprefix $(objpfx),$(binaries-static-tests)): %: %.o \ | |
76dcbf42 | 306 | $(link-extra-libs-tests) \ |
95f5a9a8 JM |
307 | $(sort $(filter $(common-objpfx)lib%,$(link-libc-static-tests))) \ |
308 | $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) | |
309 | $(+link-static-tests) | |
310 | endif | |
311 | ||
451659cc SP |
312 | # All malloc-check tests will be run with MALLOC_CHECK_=3 |
313 | define malloc-check-ENVS | |
2d2d9f2b SP |
314 | $(1)-malloc-check-ENV = MALLOC_CHECK_=3 \ |
315 | LD_PRELOAD=$(common-objpfx)/malloc/libc_malloc_debug.so | |
4f969166 | 316 | endef |
451659cc | 317 | $(foreach t,$(tests-malloc-check),$(eval $(call malloc-check-ENVS,$(t)))) |
4f969166 | 318 | |
5f6d8d97 AZ |
319 | # All malloc-hugetlb1 tests will be run with GLIBC_TUNABLES=glibc.malloc.hugetlb=1 |
320 | define malloc-hugetlb1-ENVS | |
321 | $(1)-malloc-hugetlb1-ENV += GLIBC_TUNABLES=glibc.malloc.hugetlb=1 | |
322 | endef | |
323 | $(foreach t,$(tests-malloc-hugetlb1),$(eval $(call malloc-hugetlb1-ENVS,$(t)))) | |
324 | ||
98d5fcb8 AZ |
325 | # All malloc-hugetlb2 tests will be run with GLIBC_TUNABLE=glibc.malloc.hugetlb=2 |
326 | define malloc-hugetlb2-ENVS | |
327 | $(1)-malloc-hugetlb2-ENV += GLIBC_TUNABLES=glibc.malloc.hugetlb=2 | |
328 | endef | |
329 | $(foreach t,$(tests-malloc-hugetlb2),$(eval $(call malloc-hugetlb2-ENVS,$(t)))) | |
5f6d8d97 | 330 | |
2d2d9f2b SP |
331 | # mcheck tests need the debug DSO to support -lmcheck. |
332 | define mcheck-ENVS | |
333 | $(1)-mcheck-ENV = LD_PRELOAD=$(common-objpfx)/malloc/libc_malloc_debug.so | |
334 | endef | |
335 | $(foreach t,$(tests-mcheck),$(eval $(call mcheck-ENVS,$(t)))) | |
336 | ||
7c3018f9 | 337 | ifneq "$(strip $(tests) $(tests-internal) $(xtests) $(test-srcs))" "" |
28f540f4 RM |
338 | # These are the implicit rules for making test outputs |
339 | # from the test programs and whatever input files are present. | |
41d998a6 | 340 | |
9162c01d RM |
341 | define make-test-out |
342 | $(if $($*-ENV-only),$(test-wrapper-env-only) $($*-ENV-only),\ | |
343 | $(test-wrapper-env) $(run-program-env) $($*-ENV)) \ | |
344 | $(host-test-program-cmd) $($*-ARGS) | |
345 | endef | |
196980f5 | 346 | $(objpfx)%.out: %.input $(objpfx)% |
591aeaf7 TD |
347 | $(make-test-out) > $@ < $(word 1,$^); \ |
348 | $(evaluate-test) | |
196980f5 | 349 | $(objpfx)%.out: /dev/null $(objpfx)% # Make it 2nd arg for canned sequence. |
591aeaf7 TD |
350 | $(make-test-out) > $@; \ |
351 | $(evaluate-test) | |
41d998a6 | 352 | |
561b0bec DD |
353 | |
354 | # Any tests that require an isolated container (filesystem, network | |
355 | # and pid namespaces) in which to run, should be added to | |
356 | # tests-container. | |
357 | $(tests-container:%=$(objpfx)%.out): $(objpfx)%.out : $(if $(wildcard $(objpfx)%.files),$(objpfx)%.files,/dev/null) $(objpfx)% | |
358 | $(test-wrapper-env) $(run-program-env) $(run-via-rtld-prefix) \ | |
359 | $(common-objpfx)support/test-container env $(run-program-env) $($*-ENV) \ | |
360 | $(host-test-program-cmd) $($*-ARGS) > $@; \ | |
361 | $(evaluate-test) | |
362 | ||
363 | ||
44a6213c RM |
364 | # tests-unsupported lists tests that we will not try to build at all in |
365 | # this configuration. Note this runs every time because it does not | |
366 | # actually create its target. The dependency on Makefile is meant to | |
367 | # ensure that it runs after a Makefile change to add a test to the list | |
368 | # when it previously ran and produced a .out file (probably for a failure). | |
369 | ifneq "$(strip $(tests-unsupported))" "" | |
370 | $(tests-unsupported:%=$(objpfx)%.out): $(objpfx)%.out: Makefile | |
371 | @rm -f $@ | |
372 | $(..)scripts/evaluate-test.sh $(patsubst $(common-objpfx)%.out,%,$@) \ | |
373 | 77 false false > $(@:.out=.test-result) | |
374 | endif | |
375 | ||
28f540f4 | 376 | endif # tests |
8cfdb7e0 | 377 | |
23b5cae1 | 378 | ifneq "$(strip $(tests-printers))" "" |
2de9d74f | 379 | |
23b5cae1 MG |
380 | # Static pattern rule for building the test programs for the pretty printers. |
381 | $(tests-printers-programs): %: %.o $(tests-printers-libs) \ | |
382 | $(sort $(filter $(common-objpfx)lib%,$(link-libc-static-tests))) \ | |
383 | $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) | |
384 | $(+link-printers-tests) | |
385 | ||
386 | # Add the paths to the generated constants file and test_common_printers.py | |
387 | # to PYTHONPATH so the test scripts can find them. | |
388 | py-env := PYTHONPATH=$(py-const-dir):$(..)scripts:$${PYTHONPATH} | |
389 | ||
390 | # Static pattern rule that matches the test-* targets to their .c and .py | |
391 | # prerequisites. It'll run the corresponding test script for each test program | |
392 | # we compiled and place its output in the corresponding .out file. | |
393 | # The pretty printer files and test_common_printers.py must be present for all. | |
394 | $(tests-printers-out): $(objpfx)%.out: $(objpfx)% %.py %.c $(pretty-printers) \ | |
395 | $(..)scripts/test_printers_common.py | |
396 | $(test-wrapper-env) $(py-env) \ | |
8ce8299f | 397 | $(PYTHON) $*.py $*.c $(objpfx)$* $(pretty-printers) > $@; \ |
23b5cae1 MG |
398 | $(evaluate-test) |
399 | endif | |
400 | ||
28f540f4 RM |
401 | \f |
402 | .PHONY: distclean realclean subdir_distclean subdir_realclean \ | |
3c5edd4d | 403 | subdir_clean subdir_mostlyclean subdir_testclean |
28f540f4 RM |
404 | subdir_mostlyclean: mostlyclean |
405 | subdir_clean: clean | |
406 | subdir_distclean: distclean | |
407 | subdir_realclean: realclean | |
3c5edd4d | 408 | subdir_testclean: do-tests-clean |
28f540f4 RM |
409 | realclean: distclean |
410 | distclean: clean | |
411 | ||
28f540f4 RM |
412 | # We want to install everything except the library itself, but update all |
413 | # our portions of the library because the parent make will install it later | |
414 | # (likewise the stubs file). | |
415 | .PHONY: subdir_install | |
613a76ff | 416 | subdir_install: install-no-libc.a lib-noranlib stubs |
28f540f4 | 417 | |
9de06f3c | 418 | .PHONY: subdir_objs subdir_stubs |
5d9e8991 RM |
419 | subdir_objs: objs |
420 | subdir_stubs: stubs | |
28f540f4 | 421 | |
bd78530f UD |
422 | # Target required by the Hurd to ensure that all the MiG-generated |
423 | # headers are in place before building a subdirectory. | |
424 | .PHONY: before-compile | |
425 | before-compile: $(before-compile) | |
426 | ||
3c5edd4d UD |
427 | $(common-objpfx)dummy.o: $(common-objpfx)dummy.c $(before-compile); |
428 | $(compile-command.c) | |
7ef90c15 | 429 | |
c238ecf7 UD |
430 | # Local Variables: |
431 | # mode: makefile | |
432 | # End: |