1 ============== 2 Testing libc++ 3 ============== 4 5 .. contents:: 6 :local: 7 8 Getting Started 9 =============== 10 11 libc++ uses LIT to configure and run its tests. The primary way to run the 12 libc++ tests is by using make check-libcxx. However since libc++ can be used 13 in any number of possible configurations it is important to customize the way 14 LIT builds and runs the tests. This guide provides information on how to use 15 LIT directly to test libc++. 16 17 Please see the `Lit Command Guide`_ for more information about LIT. 18 19 .. _LIT Command Guide: http://llvm.org/docs/CommandGuide/lit.html 20 21 Setting up the Environment 22 -------------------------- 23 24 After building libc++ you must setup your environment to test libc++ using 25 LIT. 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 40 Example Usage 41 ------------- 42 43 Once you have your environment set up and you have built libc++ you can run 44 parts of the libc++ test suite by simply running `lit` on a specified test or 45 directory. 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 54 Sometimes you'll want to change the way LIT is running the tests. Custom options 55 can be specified using the `--param=<name>=<val>` flag. The most common option 56 you'll want to change is the standard dialect (ie -std=c++XX). By default the 57 test suite will select the newest C++ dialect supported by the compiler and use 58 that. 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 65 Occasionally you'll want to add extra compile or link flags when testing. 66 You 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 73 Some 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 86 87 LIT Options 88 =========== 89 90 :program:`lit` [*options*...] [*filenames*...] 91 92 Command Line Options 93 -------------------- 94 95 To 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 97 configuration. Passing the option on the command line will override the default. 98 99 .. program:: lit 100 101 .. option:: cxx_under_test=<path/to/compiler> 102 103 Specify the compiler used to build the tests. 104 105 .. option:: cxx_stdlib_under_test=<stdlib name> 106 107 **Values**: libc++, libstdc++ 108 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 113 .. option:: std=<standard version> 114 115 **Values**: c++98, c++03, c++11, c++14, c++1z 116 117 Change the standard version used when building the tests. 118 119 .. option:: libcxx_site_config=<path/to/lit.site.cfg> 120 121 Specify the site configuration to use when running the tests. This option 122 overrides the enviroment variable LIBCXX_SITE_CONFIG. 123 124 .. option:: cxx_headers=<path/to/headers> 125 126 Specify the c++ standard library headers that are tested. By default the 127 headers in the source tree are used. 128 129 .. option:: cxx_library_root=<path/to/lib/> 130 131 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 133 when use_system_cxx_lib is provided. 134 135 136 .. option:: cxx_runtime_root=<path/to/lib/> 137 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 141 for this option is `cxx_library_root`. This option cannot be used 142 when use_system_cxx_lib is provided. 143 144 .. option:: use_system_cxx_lib=<bool> 145 146 **Default**: False 147 148 Enable or disable testing against the installed version of libc++ library. 149 Note: This does not use the installed headers. 150 151 .. option:: use_lit_shell=<bool> 152 153 Enable or disable the use of LIT's internal shell in ShTests. If the 154 environment variable LIT_USE_INTERNAL_SHELL is present then that is used as 155 the default value. Otherwise the default value is True on Windows and False 156 on every other platform. 157 158 .. option:: no_default_flags=<bool> 159 160 **Default**: False 161 162 Disable all default compile and link flags from being added. When this 163 option is used only flags specified using the compile_flags and link_flags 164 will be used. 165 166 .. option:: compile_flags="<list-of-args>" 167 168 Specify additional compile flags as a space delimited string. 169 Note: This options should not be used to change the standard version used. 170 171 .. option:: link_flags="<list-of-args>" 172 173 Specify additional link flags as a space delimited string. 174 175 .. option:: debug_level=<level> 176 177 **Values**: 0, 1 178 179 Enable the use of debug mode. Level 0 enables assertions and level 1 enables 180 assertions and debugging of iterator misuse. 181 182 .. option:: use_sanitizer=<sanitizer name> 183 184 **Values**: Memory, MemoryWithOrigins, Address, Undefined 185 186 Run the tests using the given sanitizer. If LLVM_USE_SANITIZER was given when 187 building libc++ then that sanitizer will be used by default. 188 189 .. option:: color_diagnostics 190 191 Enable the use of colorized compile diagnostics. If the color_diagnostics 192 option is specified or the environment variable LIBCXX_COLOR_DIAGNOSTICS is 193 present then color diagnostics will be enabled. 194 195 196 Environment Variables 197 --------------------- 198 199 .. envvar:: LIBCXX_SITE_CONFIG=<path/to/lit.site.cfg> 200 201 Specify the site configuration to use when running the tests. 202 Also see `libcxx_site_config`. 203 204 .. envvar:: LIBCXX_COLOR_DIAGNOSTICS 205 206 If ``LIBCXX_COLOR_DIAGNOSTICS`` is defined then the test suite will attempt 207 to use color diagnostic outputs from the compiler. 208 Also see `color_diagnostics`. 209 210 Benchmarks 211 ========== 212 213 Libc++ contains benchmark tests separately from the test of the test suite. 214 The benchmarks are written using the `Google Benchmark`_ library, a copy of which 215 is stored in the libc++ repository. 216 217 For more information about using the Google Benchmark library see the 218 `official documentation <https://github.com/google/benchmark>`_. 219 220 .. _`Google Benchmark`: https://github.com/google/benchmark 221 222 Building Benchmarks 223 ------------------- 224 225 The benchmark tests are not built by default. The benchmarks can be built using 226 the ``cxx-benchmarks`` target. 227 228 An example build would look like: 229 230 .. code-block:: bash 231 232 $ cd build 233 $ cmake [options] <path to libcxx sources> 234 $ make cxx-benchmarks 235 236 This will build all of the benchmarks under ``<libcxx-src>/benchmarks`` to be 237 built against the just-built libc++. The compiled tests are output into 238 ``build/benchmarks``. 239 240 The benchmarks can also be built against the platforms native standard library 241 using the ``-DLIBCXX_BUILD_BENCHMARKS_NATIVE_STDLIB=ON`` CMake option. This 242 is useful for comparing the performance of libc++ to other standard libraries. 243 The compiled benchmarks are named ``<test>.libcxx.out`` if they test libc++ and 244 ``<test>.native.out`` otherwise. 245 246 Also See: 247 248 * :ref:`Building Libc++ <build instructions>` 249 * :ref:`CMake Options` 250 251 Running Benchmarks 252 ------------------ 253 254 The benchmarks must be run manually by the user. Currently there is no way 255 to run them as part of the build. 256 257 For example: 258 259 .. code-block:: bash 260 261 $ cd build/benchmarks 262 $ make cxx-benchmarks 263 $ ./algorithms.libcxx.out # Runs all the benchmarks 264 $ ./algorithms.libcxx.out --benchmark_filter=BM_Sort.* # Only runs the sort benchmarks 265 266 For more information about running benchmarks see `Google Benchmark`_. 267