]>
Commit | Line | Data |
---|---|---|
7f98c6bc GDR |
1 | ## Makefile for the testsuite subdirectory of the GNU C++ Standard library. |
2 | ## | |
83ffe9cd | 3 | ## Copyright (C) 2001-2023 Free Software Foundation, Inc. |
7f98c6bc GDR |
4 | ## |
5 | ## This file is part of the libstdc++ version 3 distribution. | |
6 | ## Process this file with automake to produce Makefile.in. | |
7 | ||
8 | ## This file is part of the GNU ISO C++ Library. This library is free | |
9 | ## software; you can redistribute it and/or modify it under the | |
10 | ## terms of the GNU General Public License as published by the | |
748086b7 | 11 | ## Free Software Foundation; either version 3, or (at your option) |
7f98c6bc GDR |
12 | ## any later version. |
13 | ||
14 | ## This library is distributed in the hope that it will be useful, | |
15 | ## but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 | ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 | ## GNU General Public License for more details. | |
18 | ||
19 | ## You should have received a copy of the GNU General Public License along | |
748086b7 JJ |
20 | ## with this library; see the file COPYING3. If not see |
21 | ## <http://www.gnu.org/licenses/>. | |
7f98c6bc | 22 | |
7134e605 JJ |
23 | AUTOMAKE_OPTIONS = nostdinc |
24 | RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir | |
25 | EXPECT = expect | |
7f98c6bc | 26 | |
0df3f383 | 27 | include $(top_srcdir)/fragment.am |
a1af4623 | 28 | |
4b260c20 BK |
29 | # Generated lists of files to run. All of these names are valid make |
30 | # targets, if you wish to generate a list manually. | |
31 | lists_of_files = \ | |
32 | testsuite_files \ | |
33 | testsuite_files_interactive \ | |
02e32295 MK |
34 | testsuite_files_performance \ |
35 | testsuite_files_simd | |
4b260c20 | 36 | |
5305b1ae BK |
37 | # This rule generates all of the testsuite_files* lists at once. |
38 | ${lists_of_files}: | |
39 | ${glibcxx_srcdir}/scripts/create_testsuite_files \ | |
40 | ${glibcxx_srcdir}/testsuite `${PWD_COMMAND}` | |
4b260c20 | 41 | |
d54bc1d8 PE |
42 | # We need more things in site.exp, but automake completely controls the |
43 | # creation of that file; there's no way to append to it without messing up | |
44 | # the dependancy chains. So we overrule automake. This rule is exactly | |
45 | # what it would have generated, plus our own additions. | |
46 | site.exp: Makefile | |
47 | @echo 'Making a new site.exp file...' | |
48 | @echo '## these variables are automatically generated by make ##' >site.tmp | |
49 | @echo '# Do not edit here. If you wish to override these values' >>site.tmp | |
50 | @echo '# edit the last section' >>site.tmp | |
bc7a4f2f | 51 | @echo 'set tool libstdc++' >>site.tmp |
d54bc1d8 PE |
52 | @echo 'set srcdir $(srcdir)' >>site.tmp |
53 | @echo "set objdir `pwd`" >>site.tmp | |
54 | @echo 'set build_alias "$(build_alias)"' >>site.tmp | |
55 | @echo 'set build_triplet $(build_triplet)' >>site.tmp | |
56 | @echo 'set host_alias "$(host_alias)"' >>site.tmp | |
57 | @echo 'set host_triplet $(host_triplet)' >>site.tmp | |
58 | @echo 'set target_alias "$(target_alias)"' >>site.tmp | |
59 | @echo 'set target_triplet $(target_triplet)' >>site.tmp | |
d54bc1d8 | 60 | @echo 'set libiconv "$(LIBICONV)"' >>site.tmp |
68c512f6 | 61 | @echo 'set baseline_dir "$(baseline_dir)"' >> site.tmp |
00fc1bf6 | 62 | @echo 'set baseline_subdir_switch "$(baseline_subdir_switch)"' >> site.tmp |
0805e111 | 63 | @echo 'set TEST_GCC_EXEC_PREFIX "$(libdir)/gcc/"' >> site.tmp |
3a0e01f6 | 64 | @echo 'set v3-use-std-list 1' >> site.tmp |
d54bc1d8 PE |
65 | @echo '## All variables above are generated by configure. Do Not Edit ##' >>site.tmp |
66 | @test ! -f site.exp || \ | |
67 | sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp | |
68 | @-rm -f site.bak | |
69 | @test ! -f site.exp || mv site.exp site.bak | |
70 | @mv site.tmp site.exp | |
71 | ||
5305b1ae | 72 | |
e1208a57 | 73 | extract_symvers = $(glibcxx_builddir)/scripts/extract_symvers |
c4c064e7 | 74 | |
00fc1bf6 | 75 | baseline_subdir := $(shell $(CXX) $(baseline_subdir_switch)) |
c18dc5cc | 76 | |
c4c064e7 | 77 | baseline_symbols: |
c18dc5cc | 78 | -@(output=${baseline_dir}/${baseline_subdir}/baseline_symbols.txt; \ |
c4c064e7 BK |
79 | if test ! -f $${output}; then \ |
80 | echo "Baseline file doesn't exist."; \ | |
81 | echo "Try 'make new-abi-baseline' to create it."; \ | |
82 | exit 1; \ | |
7685a26d | 83 | fi; true) |
c4c064e7 | 84 | |
ca618b60 | 85 | new-abi-baseline: |
33f49367 | 86 | -@$(mkinstalldirs) ${baseline_dir}/${baseline_subdir} |
c18dc5cc | 87 | -@(output=${baseline_dir}/${baseline_subdir}/baseline_symbols.txt; \ |
c4c064e7 BK |
88 | if test -f $${output}; then \ |
89 | output=$${output}.new; \ | |
90 | t=`echo $${output} | sed 's=.*config/abi/=='`; \ | |
91 | echo "Baseline file already exists, writing to $${t} instead."; \ | |
92 | fi; \ | |
93 | ${extract_symvers} ../src/.libs/libstdc++.so $${output}) | |
94 | ||
7134e605 | 95 | %/site.exp: site.exp |
2eac0853 | 96 | -@test -d $* || mkdir $* |
7134e605 | 97 | @srcdir=`cd $(srcdir); ${PWD_COMMAND}`; |
2eac0853 | 98 | @objdir=`${PWD_COMMAND}`/$*; \ |
7134e605 JJ |
99 | sed -e "s|^set srcdir .*$$|set srcdir $$srcdir|" \ |
100 | -e "s|^set objdir .*$$|set objdir $$objdir|" \ | |
101 | site.exp > $*/site.exp.tmp | |
102 | @-rm -f $*/site.bak | |
103 | @test ! -f $*/site.exp || mv $*/site.exp $*/site.bak | |
104 | @mv $*/site.exp.tmp $*/site.exp | |
105 | ||
717c4789 JJ |
106 | check_p_numbers0:=1 2 3 4 5 6 7 8 9 |
107 | check_p_numbers1:=0 $(check_p_numbers0) | |
108 | check_p_numbers2:=$(foreach i,$(check_p_numbers0),$(addprefix $(i),$(check_p_numbers1))) | |
109 | check_p_numbers3:=$(addprefix 0,$(check_p_numbers1)) $(check_p_numbers2) | |
110 | check_p_numbers4:=$(foreach i,$(check_p_numbers0),$(addprefix $(i),$(check_p_numbers3))) | |
111 | check_p_numbers5:=$(addprefix 0,$(check_p_numbers3)) $(check_p_numbers4) | |
112 | check_p_numbers6:=$(foreach i,$(check_p_numbers0),$(addprefix $(i),$(check_p_numbers5))) | |
113 | check_p_numbers:=$(check_p_numbers0) $(check_p_numbers2) $(check_p_numbers4) $(check_p_numbers6) | |
114 | check_p_subdirs=$(wordlist 1,$(if $(GCC_TEST_PARALLEL_SLOTS),$(GCC_TEST_PARALLEL_SLOTS),128),$(check_p_numbers)) | |
115 | check_DEJAGNU_normal_targets = $(addprefix check-DEJAGNUnormal,$(check_p_subdirs)) | |
7134e605 JJ |
116 | $(check_DEJAGNU_normal_targets): check-DEJAGNUnormal%: normal%/site.exp |
117 | ||
118 | # Run the testsuite in normal mode. | |
119 | check-DEJAGNU $(check_DEJAGNU_normal_targets): check-DEJAGNU%: site.exp | |
67009f14 | 120 | @$(if $*,@)AR="$(AR)"; export AR; \ |
8927b7c0 | 121 | RANLIB="$(RANLIB)"; export RANLIB; \ |
b2b0acbe | 122 | if [ -z "$*" ] && [ -n "$(filter -j%, $(MFLAGS))" ]; then \ |
717c4789 JJ |
123 | rm -rf normal-parallel || true; \ |
124 | mkdir normal-parallel; \ | |
f1ee724c | 125 | $(MAKE) $(AM_MAKEFLAGS) $(check_DEJAGNU_normal_targets); \ |
717c4789 JJ |
126 | rm -rf normal-parallel || true; \ |
127 | for idx in $(check_p_subdirs); do \ | |
128 | if [ -d normal$$idx ]; then \ | |
129 | mv -f normal$$idx/libstdc++.sum normal$$idx/libstdc++.sum.sep; \ | |
130 | mv -f normal$$idx/libstdc++.log normal$$idx/libstdc++.log.sep; \ | |
131 | fi; \ | |
7134e605 | 132 | done; \ |
7134e605 | 133 | $(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh \ |
717c4789 | 134 | normal[0-9]*/libstdc++.sum.sep > libstdc++.sum; \ |
7134e605 | 135 | $(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh -L \ |
717c4789 | 136 | normal[0-9]*/libstdc++.log.sep > libstdc++.log; \ |
7134e605 JJ |
137 | exit 0; \ |
138 | fi; \ | |
139 | srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \ | |
140 | EXPECT=$(EXPECT); export EXPECT; \ | |
141 | runtest=$(RUNTEST); \ | |
142 | if [ -z "$$runtest" ]; then runtest=runtest; fi; \ | |
143 | tool=libstdc++; \ | |
717c4789 JJ |
144 | if [ -n "$*" ]; then \ |
145 | if [ -f normal-parallel/finished ]; then rm -rf "$*"; exit 0; fi; \ | |
146 | GCC_RUNTEST_PARALLELIZE_DIR=`${PWD_COMMAND}`/normal-parallel; \ | |
147 | export GCC_RUNTEST_PARALLELIZE_DIR; \ | |
148 | cd "$*"; \ | |
149 | fi; \ | |
7134e605 | 150 | if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \ |
717c4789 | 151 | $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) \ |
7134e605 | 152 | $(RUNTESTFLAGS); \ |
717c4789 JJ |
153 | if [ -n "$*" ]; then \ |
154 | touch $$GCC_RUNTEST_PARALLELIZE_DIR/finished; \ | |
7134e605 | 155 | fi; \ |
717c4789 JJ |
156 | else \ |
157 | echo "WARNING: could not find \`runtest'" 1>&2; :;\ | |
7134e605 JJ |
158 | fi |
159 | ||
160 | check-am: | |
161 | $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU | |
162 | .PHONY: check-DEJAGNU | |
163 | ||
c4c064e7 BK |
164 | # Use 'new-abi-baseline' to create an initial symbol file. Then run |
165 | # 'check-abi' to test for changes against that file. | |
4569a895 | 166 | check-abi: site.exp baseline_symbols |
68c512f6 | 167 | -@runtest $(AM_RUNTESTFLAGS) --tool libstdc++ $(RUNTESTFLAGS) abi.exp |
6b543e86 | 168 | |
5305b1ae BK |
169 | # Runs the testsuite, but in compile only mode. |
170 | # Can be used to test sources with non-GNU FE's at various warning | |
171 | # levels and for checking compile time across releases. | |
172 | # See script. | |
173 | compile_script=${glibcxx_srcdir}/scripts/check_compile | |
174 | check-compile: testsuite_files ${compile_script} | |
175 | -@(chmod + ${compile_script}; \ | |
176 | ${compile_script} ${glibcxx_srcdir} ${glibcxx_builddir}) | |
0676e930 BK |
177 | |
178 | ||
ca618b60 | 179 | # Runs the testsuite/performance tests. |
0676e930 BK |
180 | # Some of these tests create large (~75MB) files, allocate huge |
181 | # ammounts of memory, or otherwise tie up machine resources. Thus, | |
182 | # running this is off by default. | |
4569a895 AT |
183 | # XXX Need to add dependency on libtestc++.a |
184 | check_performance_script=${glibcxx_srcdir}/scripts/check_performance | |
ac3d7b44 | 185 | check-performance: testsuite_files_performance ${performance_script} |
4569a895 | 186 | -@(chmod + ${check_performance_script}; \ |
6ce2cb11 | 187 | CXXFLAGS='$(CXXFLAGS)'; export CXXFLAGS; \ |
4569a895 AT |
188 | ${check_performance_script} ${glibcxx_srcdir} ${glibcxx_builddir}) |
189 | ||
02e32295 MK |
190 | # Runs the simd tests. |
191 | check-simd: $(srcdir)/experimental/simd/generate_makefile.sh \ | |
192 | ${glibcxx_srcdir}/scripts/check_simd \ | |
193 | testsuite_files_simd \ | |
194 | ${glibcxx_builddir}/scripts/testsuite_flags | |
0a8bc61f | 195 | @rm -f .simd.summary |
3de9bd16 | 196 | @echo "Generating simd testsuite subdirs and Makefiles ..." |
15f2669c | 197 | @${glibcxx_srcdir}/scripts/check_simd "${glibcxx_srcdir}" "${glibcxx_builddir}" "$(CXXFLAGS)" | \ |
02e32295 MK |
198 | while read subdir; do \ |
199 | $(MAKE) -C "$${subdir}"; \ | |
200 | tail -n20 $${subdir}/simd_testsuite.sum | \ | |
201 | grep -A20 -B1 'Summary ===' >> .simd.summary; \ | |
202 | done; \ | |
203 | cat .simd.summary && rm .simd.summary | |
204 | ||
da9debb8 PC |
205 | # Runs the testsuite in debug mode. |
206 | debug_flags = "unix/-D_GLIBCXX_DEBUG" | |
0676e930 | 207 | |
c2ba9709 JS |
208 | # Runs the testsuite in parallel mode. |
209 | libgomp_dir=${glibcxx_builddir}/../libgomp | |
210 | libgomp_flags=-B${glibcxx_builddir}/../libgomp \ | |
211 | -I${glibcxx_builddir}/../libgomp \ | |
212 | -L${glibcxx_builddir}/../libgomp/.libs -lgomp | |
213 | ||
214 | atomic_flags=$(ATOMIC_FLAGS) | |
215 | parallel_flags="unix/-D_GLIBCXX_PARALLEL/-fopenmp" | |
216 | ||
da9debb8 PC |
217 | check-debug: site.exp |
218 | outputdir=debug; export outputdir; \ | |
219 | if test ! -d $${outputdir}; then \ | |
220 | mkdir $${outputdir}; \ | |
221 | fi; \ | |
222 | srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \ | |
223 | EXPECT=$(EXPECT); export EXPECT; \ | |
224 | $(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) conformance.exp --outdir $${outputdir} --objdir $${outputdir} --target_board=$(debug_flags)" check-DEJAGNU; | |
225 | ||
c2ba9709 JS |
226 | check-parallel: site.exp |
227 | -@(if test ! -d $${libgomp_dir}; then \ | |
228 | echo "Testing parallel mode failed as libgomp not present."; \ | |
229 | exit 1; \ | |
230 | fi; \ | |
231 | outputdir=parallel; export outputdir; \ | |
232 | if test ! -d $${outputdir}; then \ | |
233 | mkdir $${outputdir}; \ | |
234 | fi; \ | |
235 | srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \ | |
236 | EXPECT=$(EXPECT); export EXPECT; \ | |
18080e8e | 237 | $(MAKE) CXXFLAGS="$(atomic_flags) $(libgomp_flags)" RUNTESTFLAGS="$(RUNTESTFLAGS) conformance.exp --outdir $${outputdir} --objdir $${outputdir} --target_board=$(parallel_flags)" check-DEJAGNU; ) |
c2ba9709 JS |
238 | |
239 | check-performance-parallel: testsuite_files_performance ${performance_script} | |
240 | -@(chmod + ${check_performance_script}; \ | |
241 | CXXFLAGS="-D_GLIBCXX_PARALLEL -fopenmp $(atomic_flags) $(libgomp_flags)"; export CXXFLAGS; \ | |
242 | ${check_performance_script} ${glibcxx_srcdir} ${glibcxx_builddir}) | |
ac3d7b44 | 243 | |
5305b1ae | 244 | .PHONY: baseline_symbols new-abi-baseline \ |
544be2be | 245 | check-abi check-compile check-performance check-parallel |
0676e930 | 246 | |
6b543e86 | 247 | # By adding these files here, automake will remove them for 'make clean' |
0c45b8e0 | 248 | CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp* ostream_* *.log *.sum \ |
fd1e1726 | 249 | testsuite_* site.exp abi_check baseline_symbols *TEST* *.dat \ |
cbef15a5 | 250 | *.ii *.s *.o *.cc *.x *.a *.so *.xml *.raw *.out *.gdb |
c2ba9709 JS |
251 | |
252 | # To remove directories. | |
253 | clean-local: | |
02e32295 | 254 | rm -rf de fr debug parallel binaries normal* simd |