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