1 <!DOCTYPE html> 2 <html> 3 <!-- Created by GNU Texinfo 7.2, https://www.gnu.org/software/texinfo/ --> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 6 <!-- Copyright 1988-2024 Free Software Foundation, Inc. 7 8 Permission is granted to copy, distribute and/or modify this document 9 under the terms of the GNU Free Documentation License, Version 1.3 or 10 any later version published by the Free Software Foundation; with no 11 Invariant Sections, the Front-Cover texts being (a) (see below), and 12 with the Back-Cover Texts being (b) (see below). A copy of the 13 license is included in the section entitled "GNU 14 Free Documentation License". 15 16 (a) The FSF's Front-Cover Text is: 17 18 A GNU Manual 19 20 (b) The FSF's Back-Cover Text is: 21 22 You have freedom to copy and modify this GNU Manual, like GNU 23 software. Copies published by the Free Software Foundation raise 24 funds for GNU development. --> 25 <title>Installing GCC: Testing</title> 26 27 <meta name="description" content="Installing GCC: Testing"> 28 <meta name="keywords" content="Installing GCC: Testing"> 29 <meta name="resource-type" content="document"> 30 <meta name="distribution" content="global"> 31 <meta name="Generator" content="makeinfo"> 32 <meta name="viewport" content="width=device-width,initial-scale=1"> 33 34 <style type="text/css"> 35 <!-- 36 a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em} 37 div.example {margin-left: 3.2em} 38 span:hover a.copiable-link {visibility: visible} 39 ul.mark-bullet {list-style-type: disc} 40 --> 41 </style> 42 43 44 </head> 45 46 <body lang="en"> 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 <a class="index-entry-id" id="index-Testing"></a> 72 <a class="index-entry-id" id="index-Installing-GCC_003a-Testing"></a> 73 <a class="index-entry-id" id="index-Testsuite"></a> 74 75 <p>Before you install GCC, we encourage you to run the testsuites and to 76 compare your results with results from a similar configuration that have 77 been submitted to the 78 <a class="uref" href="https://gcc.gnu.org/ml/gcc-testresults/">gcc-testresults mailing list</a>. 79 This step is optional and may require you to download additional software, 80 but it can give you confidence in your new GCC installation or point out 81 problems before you install and start using your new GCC. 82 </p> 83 <p>First, you must have <a class="uref" href="download.html">downloaded the testsuites</a>. 84 These are included in the source tarball. 85 </p> 86 <p>Second, you must have the testing tools installed. This includes 87 <a class="uref" href="https://www.gnu.org/software/dejagnu/">DejaGnu</a>, Tcl, and Expect; 88 the DejaGnu site has links to these. 89 Some optional tests also require Python3 and pytest module. 90 </p> 91 <p>If the directories where <code class="command">runtest</code> and <code class="command">expect</code> were 92 installed are not in the <code class="env">PATH</code>, you may need to set the following 93 environment variables appropriately, as in the following example (which 94 assumes that DejaGnu has been installed under <samp class="file">/usr/local</samp>): 95 </p> 96 <div class="example smallexample"> 97 <pre class="example-preformatted">TCL_LIBRARY = /usr/local/share/tcl8.0 98 DEJAGNULIBS = /usr/local/share/dejagnu 99 </pre></div> 100 101 <p>(On systems such as Cygwin, these paths are required to be actual 102 paths, not mounts or links; presumably this is due to some lack of 103 portability in the DejaGnu code.) 104 </p> 105 106 <p>Finally, you can run the testsuite (which may take a long time): 107 </p><div class="example smallexample"> 108 <pre class="example-preformatted">cd <var class="var">objdir</var>; make -k check 109 </pre></div> 110 111 <p>This will test various components of GCC, such as compiler 112 front ends and runtime libraries. While running the testsuite, DejaGnu 113 might emit some harmless messages resembling 114 ‘<samp class="samp">WARNING: Couldn't find the global config file.</samp>’ or 115 ‘<samp class="samp">WARNING: Couldn't find tool init file</samp>’ that can be ignored. 116 </p> 117 <p>If you are testing a cross-compiler, you may want to run the testsuite 118 on a simulator as described at <a class="uref" href="https://gcc.gnu.org/simtest-howto.html">https://gcc.gnu.org/simtest-howto.html</a>. 119 </p> 120 <div class="section-level-extent" id="How-can-you-run-the-testsuite-on-selected-tests_003f"> 121 <h3 class="section"><span>How can you run the testsuite on selected tests?<a class="copiable-link" href="#How-can-you-run-the-testsuite-on-selected-tests_003f"> ¶</a></span></h3> 122 123 <p>In order to run sets of tests selectively, there are targets 124 ‘<samp class="samp">make check-gcc</samp>’ and language specific ‘<samp class="samp">make check-c</samp>’, 125 ‘<samp class="samp">make check-c++</samp>’, ‘<samp class="samp">make check-d</samp>’ ‘<samp class="samp">make check-fortran</samp>’, 126 ‘<samp class="samp">make check-ada</samp>’, ‘<samp class="samp">make check-m2</samp>’, ‘<samp class="samp">make check-objc</samp>’, 127 ‘<samp class="samp">make check-obj-c++</samp>’, ‘<samp class="samp">make check-lto</samp>’ in the <samp class="file">gcc</samp> 128 subdirectory of the object directory. You can also just run 129 ‘<samp class="samp">make check</samp>’ in a subdirectory of the object directory. 130 </p> 131 132 <p>A more selective way to just run all <code class="command">gcc</code> execute tests in the 133 testsuite is to use 134 </p> 135 <div class="example smallexample"> 136 <pre class="example-preformatted">make check-gcc RUNTESTFLAGS="execute.exp <var class="var">other-options</var>" 137 </pre></div> 138 139 <p>Likewise, in order to run only the <code class="command">g++</code> “old-deja” tests in 140 the testsuite with filenames matching ‘<samp class="samp">9805*</samp>’, you would use 141 </p> 142 <div class="example smallexample"> 143 <pre class="example-preformatted">make check-g++ RUNTESTFLAGS="old-deja.exp=9805* <var class="var">other-options</var>" 144 </pre></div> 145 146 <p>The file-matching expression following <var class="var">filename</var><code class="command">.exp=</code> is treated 147 as a series of whitespace-delimited glob expressions so that multiple patterns 148 may be passed, although any whitespace must either be escaped or surrounded by 149 single quotes if multiple expressions are desired. For example, 150 </p> 151 <div class="example smallexample"> 152 <pre class="example-preformatted">make check-g++ RUNTESTFLAGS="old-deja.exp=9805*\ virtual2.c <var class="var">other-options</var>" 153 make check-g++ RUNTESTFLAGS="'old-deja.exp=9805* virtual2.c' <var class="var">other-options</var>" 154 </pre></div> 155 156 <p>The <samp class="file">*.exp</samp> files are located in the testsuite directories of the GCC 157 source, the most important ones being <samp class="file">compile.exp</samp>, 158 <samp class="file">execute.exp</samp>, <samp class="file">dg.exp</samp> and <samp class="file">old-deja.exp</samp>. 159 To get a list of the possible <samp class="file">*.exp</samp> files, pipe the 160 output of ‘<samp class="samp">make check</samp>’ into a file and look at the 161 ‘<samp class="samp">Running … .exp</samp>’ lines. 162 </p> 163 </div> 164 <div class="section-level-extent" id="Passing-options-and-running-multiple-testsuites"> 165 <h3 class="section"><span>Passing options and running multiple testsuites<a class="copiable-link" href="#Passing-options-and-running-multiple-testsuites"> ¶</a></span></h3> 166 167 <p>You can pass multiple options to the testsuite using the 168 ‘<samp class="samp">--target_board</samp>’ option of DejaGNU, either passed as part of 169 ‘<samp class="samp">RUNTESTFLAGS</samp>’, or directly to <code class="command">runtest</code> if you prefer to 170 work outside the makefiles. For example, 171 </p> 172 <div class="example smallexample"> 173 <pre class="example-preformatted">make check-g++ RUNTESTFLAGS="--target_board=unix/-O3/-fmerge-constants" 174 </pre></div> 175 176 <p>will run the standard <code class="command">g++</code> testsuites (“unix” is the target name 177 for a standard native testsuite situation), passing 178 ‘<samp class="samp">-O3 -fmerge-constants</samp>’ to the compiler on every test, i.e., 179 slashes separate options. 180 </p> 181 <p>You can run the testsuites multiple times using combinations of options 182 with a syntax similar to the brace expansion of popular shells: 183 </p> 184 <div class="example smallexample"> 185 <pre class="example-preformatted">..."--target_board=arm-sim\{-mhard-float,-msoft-float\}\{-O1,-O2,-O3,\}" 186 </pre></div> 187 188 <p>(Note the empty option caused by the trailing comma in the final group.) 189 The following will run each testsuite eight times using the ‘<samp class="samp">arm-sim</samp>’ 190 target, as if you had specified all possible combinations yourself: 191 </p> 192 <div class="example smallexample"> 193 <pre class="example-preformatted">--target_board='arm-sim/-mhard-float/-O1 \ 194 arm-sim/-mhard-float/-O2 \ 195 arm-sim/-mhard-float/-O3 \ 196 arm-sim/-mhard-float \ 197 arm-sim/-msoft-float/-O1 \ 198 arm-sim/-msoft-float/-O2 \ 199 arm-sim/-msoft-float/-O3 \ 200 arm-sim/-msoft-float' 201 </pre></div> 202 203 <p>They can be combined as many times as you wish, in arbitrary ways. This 204 list: 205 </p> 206 <div class="example smallexample"> 207 <pre class="example-preformatted">..."--target_board=unix/-Wextra\{-O3,-fno-strength\}\{-fomit-frame,\}" 208 </pre></div> 209 210 <p>will generate four combinations, all involving ‘<samp class="samp">-Wextra</samp>’. 211 </p> 212 <p>The disadvantage to this method is that the testsuites are run in serial, 213 which is a waste on multiprocessor systems. For users with GNU Make and 214 a shell which performs brace expansion, you can run the testsuites in 215 parallel by having the shell perform the combinations and <code class="command">make</code> 216 do the parallel runs. Instead of using ‘<samp class="samp">--target_board</samp>’, use a 217 special makefile target: 218 </p> 219 <div class="example smallexample"> 220 <pre class="example-preformatted">make -j<var class="var">N</var> check-<var class="var">testsuite</var>//<var class="var">test-target</var>/<var class="var">option1</var>/<var class="var">option2</var>/... 221 </pre></div> 222 223 <p>For example, 224 </p> 225 <div class="example smallexample"> 226 <pre class="example-preformatted">make -j3 check-gcc//sh-hms-sim/{-m1,-m2,-m3,-m3e,-m4}/{,-nofpu} 227 </pre></div> 228 229 <p>will run three concurrent “make-gcc” testsuites, eventually testing all 230 ten combinations as described above. Note that this is currently only 231 supported in the <samp class="file">gcc</samp> subdirectory. (To see how this works, try 232 typing <code class="command">echo</code> before the example given here.) 233 </p> 234 235 </div> 236 <div class="section-level-extent" id="How-to-interpret-test-results"> 237 <h3 class="section"><span>How to interpret test results<a class="copiable-link" href="#How-to-interpret-test-results"> ¶</a></span></h3> 238 239 <p>The result of running the testsuite are various <samp class="file">*.sum</samp> and <samp class="file">*.log</samp> 240 files in the testsuite subdirectories. The <samp class="file">*.log</samp> files contain a 241 detailed log of the compiler invocations and the corresponding 242 results, the <samp class="file">*.sum</samp> files summarize the results. These summaries 243 contain status codes for all tests: 244 </p> 245 <ul class="itemize mark-bullet"> 246 <li>PASS: the test passed as expected 247 </li><li>XPASS: the test unexpectedly passed 248 </li><li>FAIL: the test unexpectedly failed 249 </li><li>XFAIL: the test failed as expected 250 </li><li>UNSUPPORTED: the test is not supported on this platform 251 </li><li>ERROR: the testsuite detected an error 252 </li><li>WARNING: the testsuite detected a possible problem 253 </li></ul> 254 255 <p>It is normal for some tests to report unexpected failures. At the 256 current time the testing harness does not allow fine grained control 257 over whether or not a test is expected to fail. This problem should 258 be fixed in future releases. 259 </p> 260 261 </div> 262 <div class="section-level-extent" id="Submitting-test-results"> 263 <h3 class="section"><span>Submitting test results<a class="copiable-link" href="#Submitting-test-results"> ¶</a></span></h3> 264 265 <p>If you want to report the results to the GCC project, use the 266 <samp class="file">contrib/test_summary</samp> shell script. Start it in the <var class="var">objdir</var> with 267 </p> 268 <div class="example smallexample"> 269 <pre class="example-preformatted"><var class="var">srcdir</var>/contrib/test_summary -p your_commentary.txt \ 270 -m gcc-testresults (a] gcc.gnu.org |sh 271 </pre></div> 272 273 <p>This script uses the <code class="command">Mail</code> program to send the results, so 274 make sure it is in your <code class="env">PATH</code>. The file <samp class="file">your_commentary.txt</samp> is 275 prepended to the testsuite summary and should contain any special 276 remarks you have on your results or your build environment. Please 277 do not edit the testsuite result block or the subject line, as these 278 messages may be automatically processed. 279 </p> 280 <hr /> 281 <p> 282 <p><a class="uref" href="./index.html">Return to the GCC Installation page</a> 283 </p> 284 285 286 287 288 289 </div> 290 291 292 293 </body> 294 </html> 295