blob: 6709352b5016a9ab82f0da25080af02f7b552e05 [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
Petr Hosek13620052016-08-08 22:57:25 +0000153 Build libc++ as a shared library. Either :option:`LIBCXX_ENABLE_SHARED` or
154 :option:`LIBCXX_ENABLE_STATIC` has to be enabled.
155
156.. option:: LIBCXX_ENABLE_STATIC:BOOL
157
158 **Default**: ``ON``
159
160 Build libc++ as a static library. Either :option:`LIBCXX_ENABLE_SHARED` or
161 :option:`LIBCXX_ENABLE_STATIC` has to be enabled.
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000162
163.. option:: LIBCXX_LIBDIR_SUFFIX:STRING
164
165 Extra suffix to append to the directory where libraries are to be installed.
166 This option overrides :option:`LLVM_LIBDIR_SUFFIX`.
167
Eric Fiselierfa43a5c2016-05-03 22:32:08 +0000168
169.. _libc++experimental options:
170
171libc++experimental Specific Options
172------------------------------------
173
174.. option:: LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY:BOOL
175
176 **Default**: ``ON``
177
178 Build and test libc++experimental.a.
179
180.. option:: LIBCXX_INSTALL_EXPERIMENTAL_LIBRARY:BOOL
181
182 **Default**: ``OFF``
183
184 Install libc++experimental.a alongside libc++.
185
186
Eric Fiselier435db152016-06-17 19:46:40 +0000187.. option:: LIBCXX_ENABLE_FILESYSTEM:BOOL
188
189 **Default**: ``LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY``
190
191 Build filesystem as part of libc++experimental.a. This allows filesystem
192 to be disabled without turning off the entire experimental library.
193
194
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000195.. _ABI Library Specific Options:
196
197ABI Library Specific Options
198----------------------------
199
200.. option:: LIBCXX_CXX_ABI:STRING
201
202 **Values**: ``none``, ``libcxxabi``, ``libcxxrt``, ``libstdc++``, ``libsupc++``.
203
204 Select the ABI library to build libc++ against.
205
206.. option:: LIBCXX_CXX_ABI_INCLUDE_PATHS:PATHS
207
208 Provide additional search paths for the ABI library headers.
209
210.. option:: LIBCXX_CXX_ABI_LIBRARY_PATH:PATH
211
212 Provide the path to the ABI library that libc++ should link against.
213
214.. option:: LIBCXX_ENABLE_STATIC_ABI_LIBRARY:BOOL
215
216 **Default**: ``OFF``
217
218 If this option is enabled, libc++ will try and link the selected ABI library
219 statically.
220
Eric Fiselier0b09dd12015-10-15 22:41:51 +0000221.. option:: LIBCXX_ENABLE_ABI_LINKER_SCRIPT:BOOL
222
223 **Default**: ``ON`` by default on UNIX platforms other than Apple unless
224 'LIBCXX_ENABLE_STATIC_ABI_LIBRARY' is ON. Otherwise the default value is ``OFF``.
225
226 This option generate and installs a linker script as ``libc++.so`` which
227 links the correct ABI library.
228
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000229.. option:: LIBCXXABI_USE_LLVM_UNWINDER:BOOL
230
231 **Default**: ``OFF``
232
233 Build and use the LLVM unwinder. Note: This option can only be used when
234 libc++abi is the C++ ABI library used.
235
236
Eric Fiselier9e3e1372016-07-19 23:07:03 +0000237libc++ Feature Options
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000238----------------------
239
240.. option:: LIBCXX_ENABLE_EXCEPTIONS:BOOL
241
242 **Default**: ``ON``
243
244 Build libc++ with exception support.
245
246.. option:: LIBCXX_ENABLE_RTTI:BOOL
247
248 **Default**: ``ON``
249
250 Build libc++ with run time type information.
251
Eric Fiselier9e3e1372016-07-19 23:07:03 +0000252.. option:: LIBCXX_INCLUDE_BENCHMARKS:BOOL
Evgeniy Stepanovda2ff7e2015-10-13 23:48:28 +0000253
Eric Fiselier9e3e1372016-07-19 23:07:03 +0000254 **Default**: ``OFF``
255
256 Build the libc++ benchmark tests and the Google Benchmark library needed
257 to support them.
258
259.. option:: LIBCXX_BUILD_BENCHMARK_NATIVE_STDLIB:BOOL
260
261 **Default**:: ``OFF``
262
263 Build the libc++ benchmark tests and Google Benchmark library against the
264 native standard library on the platform. On linux this can be used to compare
265 libc++ to libstdc++ by building the benchmark tests against both standard
266 libraries.
267
268
269libc++ ABI Feature Options
270--------------------------
Evgeniy Stepanovda2ff7e2015-10-13 23:48:28 +0000271
272The following options allow building libc++ for a different ABI version.
273
274.. option:: LIBCXX_ABI_VERSION:STRING
275
276 **Default**: ``1``
277
278 Defines the target ABI version of libc++.
279
280.. option:: LIBCXX_ABI_UNSTABLE:BOOL
281
282 **Default**: ``OFF``
283
284 Build the "unstable" ABI version of libc++. Includes all ABI changing features
285 on top of the current stable version.
286
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000287.. _LLVM-specific variables:
288
289LLVM-specific options
290---------------------
291
292.. option:: LLVM_LIBDIR_SUFFIX:STRING
293
294 Extra suffix to append to the directory where libraries are to be
295 installed. On a 64-bit architecture, one could use ``-DLLVM_LIBDIR_SUFFIX=64``
296 to install libraries to ``/usr/lib64``.
297
298.. option:: LLVM_BUILD_32_BITS:BOOL
299
300 Build 32-bits executables and libraries on 64-bits systems. This option is
301 available only on some 64-bits unix systems. Defaults to OFF.
302
303.. option:: LLVM_LIT_ARGS:STRING
304
305 Arguments given to lit. ``make check`` and ``make clang-test`` are affected.
306 By default, ``'-sv --no-progress-bar'`` on Visual C++ and Xcode, ``'-sv'`` on
307 others.
308
309
310Using Alternate ABI libraries
311=============================
312
313
314.. _libsupcxx:
315
316Using libsupc++ on Linux
317------------------------
318
319You will need libstdc++ in order to provide libsupc++.
320
321Figure out where the libsupc++ headers are on your system. On Ubuntu this
322is ``/usr/include/c++/<version>`` and ``/usr/include/c++/<version>/<target-triple>``
323
324You can also figure this out by running
325
326.. code-block:: bash
327
328 $ echo | g++ -Wp,-v -x c++ - -fsyntax-only
329 ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
330 ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/include"
331 #include "..." search starts here:
332 #include &lt;...&gt; search starts here:
333 /usr/include/c++/4.7
334 /usr/include/c++/4.7/x86_64-linux-gnu
335 /usr/include/c++/4.7/backward
336 /usr/lib/gcc/x86_64-linux-gnu/4.7/include
337 /usr/local/include
338 /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed
339 /usr/include/x86_64-linux-gnu
340 /usr/include
341 End of search list.
342
343Note that the first two entries happen to be what we are looking for. This
344may not be correct on other platforms.
345
346We can now run CMake:
347
348.. code-block:: bash
349
350 $ CC=clang CXX=clang++ cmake -G "Unix Makefiles" \
351 -DLIBCXX_CXX_ABI=libstdc++ \
352 -DLIBCXX_CXX_ABI_INCLUDE_PATHS="/usr/include/c++/4.7/;/usr/include/c++/4.7/x86_64-linux-gnu/" \
353 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
354 <libc++-source-dir>
355
356
357You can also substitute ``-DLIBCXX_CXX_ABI=libsupc++``
358above, which will cause the library to be linked to libsupc++ instead
359of libstdc++, but this is only recommended if you know that you will
360never need to link against libstdc++ in the same executable as libc++.
361GCC ships libsupc++ separately but only as a static library. If a
362program also needs to link against libstdc++, it will provide its
363own copy of libsupc++ and this can lead to subtle problems.
364
365.. code-block:: bash
366
367 $ make cxx
368 $ make install
369
370You can now run clang with -stdlib=libc++.
Eric Fiseliera0733922016-06-02 02:16:28 +0000371
372
373.. _libcxxrt_ref:
374
375Using libcxxrt on Linux
376------------------------
377
378You will need to keep the source tree of `libcxxrt`_ available
379on your build machine and your copy of the libcxxrt shared library must
380be placed where your linker will find it.
381
382We can now run CMake like:
383
384.. code-block:: bash
385
386 $ CC=clang CXX=clang++ cmake -G "Unix Makefiles" \
387 -DLIBCXX_CXX_ABI=libcxxrt \
388 -DLIBCXX_CXX_ABI_INCLUDE_PATHS=path/to/libcxxrt-sources/src \
389 -DCMAKE_BUILD_TYPE=Release \
390 -DCMAKE_INSTALL_PREFIX=/usr \
391 <libc++-source-directory>
392 $ make cxx
393 $ make install
394
395Unfortunately you can't simply run clang with "-stdlib=libc++" at this point, as
396clang is set up to link for libc++ linked to libsupc++. To get around this
397you'll have to set up your linker yourself (or patch clang). For example,
398
399.. code-block:: bash
400
401 $ clang++ -stdlib=libc++ helloworld.cpp \
402 -nodefaultlibs -lc++ -lcxxrt -lm -lc -lgcc_s -lgcc
403
404Alternately, you could just add libcxxrt to your libraries list, which in most
405situations will give the same result:
406
407.. code-block:: bash
408
409 $ clang++ -stdlib=libc++ helloworld.cpp -lcxxrt
410
411.. _`libcxxrt`: https://github.com/pathscale/libcxxrt/
412
413
414Using a local ABI library installation
415---------------------------------------
416
417.. warning::
418 This is not recommended in almost all cases.
419
420These instructions should only be used when you can't install your ABI library.
421
422Normally you must link libc++ against a ABI shared library that the
423linker can find. If you want to build and test libc++ against an ABI
424library not in the linker's path you needq to set
425``-DLIBCXX_CXX_ABI_LIBRARY_PATH=/path/to/abi/lib`` when configuring CMake.
426
427An example build using libc++abi would look like:
428
429.. code-block:: bash
430
431 $ CC=clang CXX=clang++ cmake \
432 -DLIBCXX_CXX_ABI=libc++abi \
433 -DLIBCXX_CXX_ABI_INCLUDE_PATHS="/path/to/libcxxabi/include" \
434 -DLIBCXX_CXX_ABI_LIBRARY_PATH="/path/to/libcxxabi-build/lib" \
435 path/to/libcxx
436 $ make
437
438When testing libc++ LIT will automatically link against the proper ABI
439library.