blob: 5dd174ac26039af308489dd09df661b46910f65e [file] [log] [blame]
Eric Fiseliera0733922016-06-02 02:16:28 +00001.. _BuildingLibcxx:
Eric Fiselierd720d1f2015-08-22 19:40:49 +00002
3===============
4Building libc++
5===============
6
7.. contents::
8 :local:
9
Eric Fiselierfa43a5c2016-05-03 22:32:08 +000010.. _build instructions:
11
Eric Fiselierd720d1f2015-08-22 19:40:49 +000012Getting Started
13===============
14
15On Mac OS 10.7 (Lion) and later, the easiest way to get this library is to install
16Xcode 4.2 or later. However if you want to install tip-of-trunk from here
17(getting the bleeding edge), read on.
18
19The basic steps needed to build libc++ are:
20
21#. Checkout LLVM:
22
23 * ``cd where-you-want-llvm-to-live``
24 * ``svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm``
25
26#. Checkout libc++:
27
28 * ``cd where-you-want-llvm-to-live``
Eric Fiselierc3ca4712015-12-14 22:26:28 +000029 * ``cd llvm/projects``
Eric Fiselierd720d1f2015-08-22 19:40:49 +000030 * ``svn co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx``
31
32#. Checkout libc++abi:
33
34 * ``cd where-you-want-llvm-to-live``
35 * ``cd llvm/projects``
Eric Fiselierc3ca4712015-12-14 22:26:28 +000036 * ``svn co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi``
Eric Fiselierd720d1f2015-08-22 19:40:49 +000037
38#. Configure and build libc++ with libc++abi:
39
Alexey Samsonovadc99cd2016-01-30 01:11:42 +000040 CMake is the only supported configuration system.
Eric Fiselierd720d1f2015-08-22 19:40:49 +000041
42 Clang is the preferred compiler when building and using libc++.
43
44 * ``cd where you want to build llvm``
45 * ``mkdir build``
46 * ``cd build``
47 * ``cmake -G <generator> [options] <path to llvm sources>``
48
49 For more information about configuring libc++ see :ref:`CMake Options`.
50
51 * ``make cxx`` --- will build libc++ and libc++abi.
52 * ``make check-libcxx check-libcxxabi`` --- will run the test suites.
53
54 Shared libraries for libc++ and libc++ abi should now be present in llvm/build/lib.
55 See :ref:`using an alternate libc++ installation <alternate libcxx>`
56
57#. **Optional**: Install libc++ and libc++abi
58
59 If your system already provides a libc++ installation it is important to be
60 careful not to replace it. Remember Use the CMake option ``CMAKE_INSTALL_PREFIX`` to
61 select a safe place to install libc++.
62
63 * ``make install-libcxx install-libcxxabi`` --- Will install the libraries and the headers
64
65 .. warning::
66 * Replacing your systems libc++ installation could render the system non-functional.
67 * Mac OS X will not boot without a valid copy of ``libc++.1.dylib`` in ``/usr/lib``.
68
69
70The instructions are for building libc++ on
71FreeBSD, Linux, or Mac using `libc++abi`_ as the C++ ABI library.
72On Linux, it is also possible to use :ref:`libsupc++ <libsupcxx>` or libcxxrt.
73
Eric Fiselierb1c50fd2015-09-06 23:31:16 +000074It is sometimes beneficial to build outside of the LLVM tree. An out-of-tree
75build would look like this:
Eric Fiselierd720d1f2015-08-22 19:40:49 +000076
77.. code-block:: bash
78
79 $ cd where-you-want-libcxx-to-live
80 $ # Check out llvm, libc++ and libc++abi.
81 $ ``svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm``
82 $ ``svn co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx``
83 $ ``svn co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi``
84 $ cd where-you-want-to-build
85 $ mkdir build && cd build
86 $ export CC=clang CXX=clang++
87 $ cmake -DLLVM_PATH=path/to/llvm \
88 -DLIBCXX_CXX_ABI=libcxxabi \
89 -DLIBCXX_CXX_ABI_INCLUDE_PATHS=path/to/libcxxabi/include \
90 path/to/libcxx
91 $ make
92 $ make check-libcxx # optional
93
94
95.. _`libc++abi`: http://libcxxabi.llvm.org/
96
97
98.. _CMake Options:
99
100CMake Options
101=============
102
103Here are some of the CMake variables that are used often, along with a
104brief explanation and LLVM-specific notes. For full documentation, check the
105CMake docs or execute ``cmake --help-variable VARIABLE_NAME``.
106
107**CMAKE_BUILD_TYPE**:STRING
108 Sets the build type for ``make`` based generators. Possible values are
109 Release, Debug, RelWithDebInfo and MinSizeRel. On systems like Visual Studio
110 the user sets the build type with the IDE settings.
111
112**CMAKE_INSTALL_PREFIX**:PATH
113 Path where LLVM will be installed if "make install" is invoked or the
114 "INSTALL" target is built.
115
116**CMAKE_CXX_COMPILER**:STRING
117 The C++ compiler to use when building and testing libc++.
118
119
120.. _libcxx-specific options:
121
122libc++ specific options
123-----------------------
124
Eric Fiselierfa43a5c2016-05-03 22:32:08 +0000125.. option:: LIBCXX_INSTALL_LIBRARY:BOOL
126
127 **Default**: ``ON``
128
129 Toggle the installation of the library portion of libc++.
130
131.. option:: LIBCXX_INSTALL_HEADERS:BOOL
132
133 **Default**: ``ON``
134
135 Toggle the installation of the libc++ headers.
136
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000137.. option:: LIBCXX_ENABLE_ASSERTIONS:BOOL
138
139 **Default**: ``ON``
140
141 Build libc++ with assertions enabled.
142
143.. option:: LIBCXX_BUILD_32_BITS:BOOL
144
145 **Default**: ``OFF``
146
147 Build libc++ as a 32 bit library. Also see :option:`LLVM_BUILD_32_BITS`.
148
149.. option:: LIBCXX_ENABLE_SHARED:BOOL
150
151 **Default**: ``ON``
152
153 Build libc++ as a shared library. If ``OFF`` is specified then libc++ is
154 built as a static library.
155
156.. option:: LIBCXX_LIBDIR_SUFFIX:STRING
157
158 Extra suffix to append to the directory where libraries are to be installed.
159 This option overrides :option:`LLVM_LIBDIR_SUFFIX`.
160
Eric Fiselierfa43a5c2016-05-03 22:32:08 +0000161
162.. _libc++experimental options:
163
164libc++experimental Specific Options
165------------------------------------
166
167.. option:: LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY:BOOL
168
169 **Default**: ``ON``
170
171 Build and test libc++experimental.a.
172
173.. option:: LIBCXX_INSTALL_EXPERIMENTAL_LIBRARY:BOOL
174
175 **Default**: ``OFF``
176
177 Install libc++experimental.a alongside libc++.
178
179
Eric Fiselier435db152016-06-17 19:46:40 +0000180.. option:: LIBCXX_ENABLE_FILESYSTEM:BOOL
181
182 **Default**: ``LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY``
183
184 Build filesystem as part of libc++experimental.a. This allows filesystem
185 to be disabled without turning off the entire experimental library.
186
187
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000188.. _ABI Library Specific Options:
189
190ABI Library Specific Options
191----------------------------
192
193.. option:: LIBCXX_CXX_ABI:STRING
194
195 **Values**: ``none``, ``libcxxabi``, ``libcxxrt``, ``libstdc++``, ``libsupc++``.
196
197 Select the ABI library to build libc++ against.
198
199.. option:: LIBCXX_CXX_ABI_INCLUDE_PATHS:PATHS
200
201 Provide additional search paths for the ABI library headers.
202
203.. option:: LIBCXX_CXX_ABI_LIBRARY_PATH:PATH
204
205 Provide the path to the ABI library that libc++ should link against.
206
207.. option:: LIBCXX_ENABLE_STATIC_ABI_LIBRARY:BOOL
208
209 **Default**: ``OFF``
210
211 If this option is enabled, libc++ will try and link the selected ABI library
212 statically.
213
Eric Fiselier0b09dd12015-10-15 22:41:51 +0000214.. option:: LIBCXX_ENABLE_ABI_LINKER_SCRIPT:BOOL
215
216 **Default**: ``ON`` by default on UNIX platforms other than Apple unless
217 'LIBCXX_ENABLE_STATIC_ABI_LIBRARY' is ON. Otherwise the default value is ``OFF``.
218
219 This option generate and installs a linker script as ``libc++.so`` which
220 links the correct ABI library.
221
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000222.. option:: LIBCXXABI_USE_LLVM_UNWINDER:BOOL
223
224 **Default**: ``OFF``
225
226 Build and use the LLVM unwinder. Note: This option can only be used when
227 libc++abi is the C++ ABI library used.
228
229
Eric Fiselier9e3e1372016-07-19 23:07:03 +0000230libc++ Feature Options
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000231----------------------
232
233.. option:: LIBCXX_ENABLE_EXCEPTIONS:BOOL
234
235 **Default**: ``ON``
236
237 Build libc++ with exception support.
238
239.. option:: LIBCXX_ENABLE_RTTI:BOOL
240
241 **Default**: ``ON``
242
243 Build libc++ with run time type information.
244
Eric Fiselier9e3e1372016-07-19 23:07:03 +0000245.. option:: LIBCXX_INCLUDE_BENCHMARKS:BOOL
Evgeniy Stepanovda2ff7e2015-10-13 23:48:28 +0000246
Eric Fiselier9e3e1372016-07-19 23:07:03 +0000247 **Default**: ``OFF``
248
249 Build the libc++ benchmark tests and the Google Benchmark library needed
250 to support them.
251
252.. option:: LIBCXX_BUILD_BENCHMARK_NATIVE_STDLIB:BOOL
253
254 **Default**:: ``OFF``
255
256 Build the libc++ benchmark tests and Google Benchmark library against the
257 native standard library on the platform. On linux this can be used to compare
258 libc++ to libstdc++ by building the benchmark tests against both standard
259 libraries.
260
261
262libc++ ABI Feature Options
263--------------------------
Evgeniy Stepanovda2ff7e2015-10-13 23:48:28 +0000264
265The following options allow building libc++ for a different ABI version.
266
267.. option:: LIBCXX_ABI_VERSION:STRING
268
269 **Default**: ``1``
270
271 Defines the target ABI version of libc++.
272
273.. option:: LIBCXX_ABI_UNSTABLE:BOOL
274
275 **Default**: ``OFF``
276
277 Build the "unstable" ABI version of libc++. Includes all ABI changing features
278 on top of the current stable version.
279
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000280.. _LLVM-specific variables:
281
282LLVM-specific options
283---------------------
284
285.. option:: LLVM_LIBDIR_SUFFIX:STRING
286
287 Extra suffix to append to the directory where libraries are to be
288 installed. On a 64-bit architecture, one could use ``-DLLVM_LIBDIR_SUFFIX=64``
289 to install libraries to ``/usr/lib64``.
290
291.. option:: LLVM_BUILD_32_BITS:BOOL
292
293 Build 32-bits executables and libraries on 64-bits systems. This option is
294 available only on some 64-bits unix systems. Defaults to OFF.
295
296.. option:: LLVM_LIT_ARGS:STRING
297
298 Arguments given to lit. ``make check`` and ``make clang-test`` are affected.
299 By default, ``'-sv --no-progress-bar'`` on Visual C++ and Xcode, ``'-sv'`` on
300 others.
301
302
303Using Alternate ABI libraries
304=============================
305
306
307.. _libsupcxx:
308
309Using libsupc++ on Linux
310------------------------
311
312You will need libstdc++ in order to provide libsupc++.
313
314Figure out where the libsupc++ headers are on your system. On Ubuntu this
315is ``/usr/include/c++/<version>`` and ``/usr/include/c++/<version>/<target-triple>``
316
317You can also figure this out by running
318
319.. code-block:: bash
320
321 $ echo | g++ -Wp,-v -x c++ - -fsyntax-only
322 ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
323 ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/include"
324 #include "..." search starts here:
325 #include &lt;...&gt; search starts here:
326 /usr/include/c++/4.7
327 /usr/include/c++/4.7/x86_64-linux-gnu
328 /usr/include/c++/4.7/backward
329 /usr/lib/gcc/x86_64-linux-gnu/4.7/include
330 /usr/local/include
331 /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed
332 /usr/include/x86_64-linux-gnu
333 /usr/include
334 End of search list.
335
336Note that the first two entries happen to be what we are looking for. This
337may not be correct on other platforms.
338
339We can now run CMake:
340
341.. code-block:: bash
342
343 $ CC=clang CXX=clang++ cmake -G "Unix Makefiles" \
344 -DLIBCXX_CXX_ABI=libstdc++ \
345 -DLIBCXX_CXX_ABI_INCLUDE_PATHS="/usr/include/c++/4.7/;/usr/include/c++/4.7/x86_64-linux-gnu/" \
346 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
347 <libc++-source-dir>
348
349
350You can also substitute ``-DLIBCXX_CXX_ABI=libsupc++``
351above, which will cause the library to be linked to libsupc++ instead
352of libstdc++, but this is only recommended if you know that you will
353never need to link against libstdc++ in the same executable as libc++.
354GCC ships libsupc++ separately but only as a static library. If a
355program also needs to link against libstdc++, it will provide its
356own copy of libsupc++ and this can lead to subtle problems.
357
358.. code-block:: bash
359
360 $ make cxx
361 $ make install
362
363You can now run clang with -stdlib=libc++.
Eric Fiseliera0733922016-06-02 02:16:28 +0000364
365
366.. _libcxxrt_ref:
367
368Using libcxxrt on Linux
369------------------------
370
371You will need to keep the source tree of `libcxxrt`_ available
372on your build machine and your copy of the libcxxrt shared library must
373be placed where your linker will find it.
374
375We can now run CMake like:
376
377.. code-block:: bash
378
379 $ CC=clang CXX=clang++ cmake -G "Unix Makefiles" \
380 -DLIBCXX_CXX_ABI=libcxxrt \
381 -DLIBCXX_CXX_ABI_INCLUDE_PATHS=path/to/libcxxrt-sources/src \
382 -DCMAKE_BUILD_TYPE=Release \
383 -DCMAKE_INSTALL_PREFIX=/usr \
384 <libc++-source-directory>
385 $ make cxx
386 $ make install
387
388Unfortunately you can't simply run clang with "-stdlib=libc++" at this point, as
389clang is set up to link for libc++ linked to libsupc++. To get around this
390you'll have to set up your linker yourself (or patch clang). For example,
391
392.. code-block:: bash
393
394 $ clang++ -stdlib=libc++ helloworld.cpp \
395 -nodefaultlibs -lc++ -lcxxrt -lm -lc -lgcc_s -lgcc
396
397Alternately, you could just add libcxxrt to your libraries list, which in most
398situations will give the same result:
399
400.. code-block:: bash
401
402 $ clang++ -stdlib=libc++ helloworld.cpp -lcxxrt
403
404.. _`libcxxrt`: https://github.com/pathscale/libcxxrt/
405
406
407Using a local ABI library installation
408---------------------------------------
409
410.. warning::
411 This is not recommended in almost all cases.
412
413These instructions should only be used when you can't install your ABI library.
414
415Normally you must link libc++ against a ABI shared library that the
416linker can find. If you want to build and test libc++ against an ABI
417library not in the linker's path you needq to set
418``-DLIBCXX_CXX_ABI_LIBRARY_PATH=/path/to/abi/lib`` when configuring CMake.
419
420An example build using libc++abi would look like:
421
422.. code-block:: bash
423
424 $ CC=clang CXX=clang++ cmake \
425 -DLIBCXX_CXX_ABI=libc++abi \
426 -DLIBCXX_CXX_ABI_INCLUDE_PATHS="/path/to/libcxxabi/include" \
427 -DLIBCXX_CXX_ABI_LIBRARY_PATH="/path/to/libcxxabi-build/lib" \
428 path/to/libcxx
429 $ make
430
431When testing libc++ LIT will automatically link against the proper ABI
432library.