blob: d8060fed1f1f5f40712c79f6d7612f2948f134f7 [file] [log] [blame]
Eric Fiselierd720d1f2015-08-22 19:40:49 +00001==============
2Testing libc++
3==============
4
5.. contents::
6 :local:
7
8Getting Started
9===============
10
11libc++ uses LIT to configure and run its tests. The primary way to run the
12libc++ tests is by using make check-libcxx. However since libc++ can be used
13in any number of possible configurations it is important to customize the way
14LIT builds and runs the tests. This guide provides information on how to use
15LIT directly to test libc++.
16
17Please see the `Lit Command Guide`_ for more information about LIT.
18
19.. _LIT Command Guide: http://llvm.org/docs/CommandGuide/lit.html
20
Eric Fiselierd720d1f2015-08-22 19:40:49 +000021Setting up the Environment
22--------------------------
23
24After building libc++ you must setup your environment to test libc++ using
25LIT.
26
27#. Create a shortcut to the actual lit executable so that you can invoke it
28 easily from the command line.
29
30 .. code-block:: bash
31
32 $ alias lit='python path/to/llvm/utils/lit/lit.py'
33
34#. Tell LIT where to find your build configuration.
35
36 .. code-block:: bash
37
38 $ export LIBCXX_SITE_CONFIG=path/to/build-libcxx/test/lit.site.cfg
39
Eric Fiselier4ac88092015-10-14 20:44:44 +000040Example Usage
41-------------
42
43Once you have your environment set up and you have built libc++ you can run
44parts of the libc++ test suite by simply running `lit` on a specified test or
45directory. For example:
46
47.. code-block:: bash
48
49 $ cd path/to/src/libcxx
50 $ lit -sv test/std/re # Run all of the std::regex tests
51 $ lit -sv test/std/depr/depr.c.headers/stdlib_h.pass.cpp # Run a single test
52 $ lit -sv test/std/atomics test/std/threads # Test std::thread and std::atomic
53
54Sometimes you'll want to change the way LIT is running the tests. Custom options
55can be specified using the `--param=<name>=<val>` flag. The most common option
56you'll want to change is the standard dialect (ie -std=c++XX). By default the
57test suite will select the newest C++ dialect supported by the compiler and use
58that. However if you want to manually specify the option like so:
59
60.. code-block:: bash
61
62 $ lit -sv test/std/containers # Run the tests with the newest -std
63 $ lit -sv --param=std=c++03 test/std/containers # Run the tests in C++03
64
65Occasionally you'll want to add extra compile or link flags when testing.
66You can do this as follows:
67
68.. code-block:: bash
69
70 $ lit -sv --param=compile_flags='-Wcustom-warning'
71 $ lit -sv --param=link_flags='-L/custom/library/path'
72
73Some other common examples include:
74
75.. code-block:: bash
76
77 # Specify a custom compiler.
78 $ lit -sv --param=cxx_under_test=/opt/bin/g++ test/std
79
80 # Enable warnings in the test suite
81 $ lit -sv --param=enable_warnings=true test/std
82
83 # Use UBSAN when running the tests.
84 $ lit -sv --param=use_sanitizer=Undefined
85
Eric Fiselierd720d1f2015-08-22 19:40:49 +000086
87LIT Options
88===========
89
90:program:`lit` [*options*...] [*filenames*...]
91
92Command Line Options
93--------------------
94
95To use these options you pass them on the LIT command line as --param NAME or
96--param NAME=VALUE. Some options have default values specified during CMake's
97configuration. Passing the option on the command line will override the default.
98
99.. program:: lit
100
Eric Fiselier4fe629c2016-10-14 06:15:27 +0000101.. option:: cxx_under_test=<path/to/compiler>
Eric Fiselier4ac88092015-10-14 20:44:44 +0000102
103 Specify the compiler used to build the tests.
104
Eric Fiselier4fe629c2016-10-14 06:15:27 +0000105.. option:: cxx_stdlib_under_test=<stdlib name>
106
107 **Values**: libc++, libstdc++
Eric Fiselierbbbbd112016-10-12 00:00:37 +0000108
109 Specify the C++ standard library being tested. Unless otherwise specified
110 libc++ is used. This option is intended to allow running the libc++ test
111 suite against other standard library implementations.
112
Eric Fiselier4ac88092015-10-14 20:44:44 +0000113.. option:: std=<standard version>
114
Eric Fiselier32f3f702017-11-07 20:26:23 +0000115 **Values**: c++98, c++03, c++11, c++14, c++17, c++2a
Eric Fiselier4ac88092015-10-14 20:44:44 +0000116
117 Change the standard version used when building the tests.
118
Eric Fiselier4fe629c2016-10-14 06:15:27 +0000119.. option:: libcxx_site_config=<path/to/lit.site.cfg>
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000120
121 Specify the site configuration to use when running the tests. This option
Eric Fiselier17ec5b12017-05-09 23:47:20 +0000122 overrides the environment variable LIBCXX_SITE_CONFIG.
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000123
Eric Fiselier4fe629c2016-10-14 06:15:27 +0000124.. option:: cxx_headers=<path/to/headers>
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000125
Eric Fiselierbbbbd112016-10-12 00:00:37 +0000126 Specify the c++ standard library headers that are tested. By default the
127 headers in the source tree are used.
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000128
Eric Fiselier4fe629c2016-10-14 06:15:27 +0000129.. option:: cxx_library_root=<path/to/lib/>
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000130
Eric Fiselier661b0c12016-04-20 04:17:39 +0000131 Specify the directory of the libc++ library to be tested. By default the
132 library folder of the build directory is used. This option cannot be used
Eric Fiselier60be2462016-12-23 19:09:14 +0000133 when use_system_cxx_lib is provided.
Eric Fiselier661b0c12016-04-20 04:17:39 +0000134
135
Eric Fiselier4fe629c2016-10-14 06:15:27 +0000136.. option:: cxx_runtime_root=<path/to/lib/>
Eric Fiselier661b0c12016-04-20 04:17:39 +0000137
138 Specify the directory of the libc++ library to use at runtime. This directory
139 is not added to the linkers search path. This can be used to compile tests
140 against one version of libc++ and run them using another. The default value
Louis Dionnee70b1dd2018-12-14 18:19:14 +0000141 for this option is `cxx_library_root`.
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000142
Eric Fiselier60be2462016-12-23 19:09:14 +0000143.. option:: use_system_cxx_lib=<bool>
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000144
145 **Default**: False
146
147 Enable or disable testing against the installed version of libc++ library.
148 Note: This does not use the installed headers.
149
Eric Fiselier4fe629c2016-10-14 06:15:27 +0000150.. option:: use_lit_shell=<bool>
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000151
152 Enable or disable the use of LIT's internal shell in ShTests. If the
153 environment variable LIT_USE_INTERNAL_SHELL is present then that is used as
154 the default value. Otherwise the default value is True on Windows and False
155 on every other platform.
156
Eric Fiselier4fe629c2016-10-14 06:15:27 +0000157.. option:: compile_flags="<list-of-args>"
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000158
159 Specify additional compile flags as a space delimited string.
160 Note: This options should not be used to change the standard version used.
161
Eric Fiselier4fe629c2016-10-14 06:15:27 +0000162.. option:: link_flags="<list-of-args>"
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000163
164 Specify additional link flags as a space delimited string.
165
Eric Fiselier4fe629c2016-10-14 06:15:27 +0000166.. option:: debug_level=<level>
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000167
168 **Values**: 0, 1
169
170 Enable the use of debug mode. Level 0 enables assertions and level 1 enables
171 assertions and debugging of iterator misuse.
172
173.. option:: use_sanitizer=<sanitizer name>
174
175 **Values**: Memory, MemoryWithOrigins, Address, Undefined
176
177 Run the tests using the given sanitizer. If LLVM_USE_SANITIZER was given when
178 building libc++ then that sanitizer will be used by default.
179
180.. option:: color_diagnostics
181
182 Enable the use of colorized compile diagnostics. If the color_diagnostics
183 option is specified or the environment variable LIBCXX_COLOR_DIAGNOSTICS is
184 present then color diagnostics will be enabled.
185
Petr Hosek7b9f43a2019-02-05 19:50:47 +0000186.. option:: llvm_unwinder
187
188 Enable the use of LLVM unwinder instead of libgcc.
189
190.. option:: builtins_library
191
192 Path to the builtins library to use instead of libgcc.
193
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000194
195Environment Variables
196---------------------
197
Eric Fiselier71646ec2016-05-05 08:12:25 +0000198.. envvar:: LIBCXX_SITE_CONFIG=<path/to/lit.site.cfg>
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000199
200 Specify the site configuration to use when running the tests.
Eric Fiselier887b86b2016-09-16 03:47:53 +0000201 Also see `libcxx_site_config`.
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000202
203.. envvar:: LIBCXX_COLOR_DIAGNOSTICS
204
205 If ``LIBCXX_COLOR_DIAGNOSTICS`` is defined then the test suite will attempt
206 to use color diagnostic outputs from the compiler.
Eric Fiselier887b86b2016-09-16 03:47:53 +0000207 Also see `color_diagnostics`.
Eric Fiselier9e3e1372016-07-19 23:07:03 +0000208
209Benchmarks
210==========
211
212Libc++ contains benchmark tests separately from the test of the test suite.
213The benchmarks are written using the `Google Benchmark`_ library, a copy of which
214is stored in the libc++ repository.
215
216For more information about using the Google Benchmark library see the
217`official documentation <https://github.com/google/benchmark>`_.
218
219.. _`Google Benchmark`: https://github.com/google/benchmark
220
221Building Benchmarks
222-------------------
223
Eric Fiselier93f212c2016-08-29 19:50:49 +0000224The benchmark tests are not built by default. The benchmarks can be built using
225the ``cxx-benchmarks`` target.
Eric Fiselier9e3e1372016-07-19 23:07:03 +0000226
227An example build would look like:
228
229.. code-block:: bash
230
231 $ cd build
Eric Fiselier93f212c2016-08-29 19:50:49 +0000232 $ cmake [options] <path to libcxx sources>
233 $ make cxx-benchmarks
Eric Fiselier9e3e1372016-07-19 23:07:03 +0000234
235This will build all of the benchmarks under ``<libcxx-src>/benchmarks`` to be
236built against the just-built libc++. The compiled tests are output into
237``build/benchmarks``.
238
239The benchmarks can also be built against the platforms native standard library
240using the ``-DLIBCXX_BUILD_BENCHMARKS_NATIVE_STDLIB=ON`` CMake option. This
241is useful for comparing the performance of libc++ to other standard libraries.
242The compiled benchmarks are named ``<test>.libcxx.out`` if they test libc++ and
243``<test>.native.out`` otherwise.
244
245Also See:
246
247 * :ref:`Building Libc++ <build instructions>`
248 * :ref:`CMake Options`
249
250Running Benchmarks
251------------------
252
253The benchmarks must be run manually by the user. Currently there is no way
254to run them as part of the build.
255
256For example:
257
258.. code-block:: bash
259
260 $ cd build/benchmarks
Eric Fiselier93f212c2016-08-29 19:50:49 +0000261 $ make cxx-benchmarks
Eric Fiselier9e3e1372016-07-19 23:07:03 +0000262 $ ./algorithms.libcxx.out # Runs all the benchmarks
263 $ ./algorithms.libcxx.out --benchmark_filter=BM_Sort.* # Only runs the sort benchmarks
264
265For more information about running benchmarks see `Google Benchmark`_.