xref: /redis-3.2.3/deps/jemalloc/INSTALL (revision 2f75bbab)
1Building and installing jemalloc can be as simple as typing the following while
2in the root directory of the source tree:
3
4    ./configure
5    make
6    make install
7
8=== Advanced configuration =====================================================
9
10The 'configure' script supports numerous options that allow control of which
11functionality is enabled, where jemalloc is installed, etc.  Optionally, pass
12any of the following arguments (not a definitive list) to 'configure':
13
14--help
15    Print a definitive list of options.
16
17--prefix=<install-root-dir>
18    Set the base directory in which to install.  For example:
19
20        ./configure --prefix=/usr/local
21
22    will cause files to be installed into /usr/local/include, /usr/local/lib,
23    and /usr/local/man.
24
25--with-rpath=<colon-separated-rpath>
26    Embed one or more library paths, so that libjemalloc can find the libraries
27    it is linked to.  This works only on ELF-based systems.
28
29--with-jemalloc-prefix=<prefix>
30    Prefix all public APIs with <prefix>.  For example, if <prefix> is
31    "prefix_", API changes like the following occur:
32
33      malloc()         --> prefix_malloc()
34      malloc_conf      --> prefix_malloc_conf
35      /etc/malloc.conf --> /etc/prefix_malloc.conf
36      MALLOC_CONF      --> PREFIX_MALLOC_CONF
37
38    This makes it possible to use jemalloc at the same time as the system
39    allocator, or even to use multiple copies of jemalloc simultaneously.
40
41    By default, the prefix is "", except on OS X, where it is "je_".  On OS X,
42    jemalloc overlays the default malloc zone, but makes no attempt to actually
43    replace the "malloc", "calloc", etc. symbols.
44
45--with-private-namespace=<prefix>
46    Prefix all library-private APIs with <prefix>.  For shared libraries,
47    symbol visibility mechanisms prevent these symbols from being exported, but
48    for static libraries, naming collisions are a real possibility.  By
49    default, the prefix is "" (empty string).
50
51--with-install-suffix=<suffix>
52    Append <suffix> to the base name of all installed files, such that multiple
53    versions of jemalloc can coexist in the same installation directory.  For
54    example, libjemalloc.so.0 becomes libjemalloc<suffix>.so.0.
55
56--enable-cc-silence
57    Enable code that silences non-useful compiler warnings.  This is helpful
58    when trying to tell serious warnings from those due to compiler
59    limitations, but it potentially incurs a performance penalty.
60
61--enable-debug
62    Enable assertions and validation code.  This incurs a substantial
63    performance hit, but is very useful during application development.
64
65--enable-stats
66    Enable statistics gathering functionality.  See the "opt.stats_print"
67    option documentation for usage details.
68
69--enable-prof
70    Enable heap profiling and leak detection functionality.  See the "opt.prof"
71    option documentation for usage details.  When enabled, there are several
72    approaches to backtracing, and the configure script chooses the first one
73    in the following list that appears to function correctly:
74
75    + libunwind      (requires --enable-prof-libunwind)
76    + libgcc         (unless --disable-prof-libgcc)
77    + gcc intrinsics (unless --disable-prof-gcc)
78
79--enable-prof-libunwind
80    Use the libunwind library (http://www.nongnu.org/libunwind/) for stack
81    backtracing.
82
83--disable-prof-libgcc
84    Disable the use of libgcc's backtracing functionality.
85
86--disable-prof-gcc
87    Disable the use of gcc intrinsics for backtracing.
88
89--with-static-libunwind=<libunwind.a>
90    Statically link against the specified libunwind.a rather than dynamically
91    linking with -lunwind.
92
93--disable-tiny
94    Disable tiny (sub-quantum-sized) object support.  Technically it is not
95    legal for a malloc implementation to allocate objects with less than
96    quantum alignment (8 or 16 bytes, depending on architecture), but in
97    practice it never causes any problems if, for example, 4-byte allocations
98    are 4-byte-aligned.
99
100--disable-tcache
101    Disable thread-specific caches for small objects.  Objects are cached and
102    released in bulk, thus reducing the total number of mutex operations.  See
103    the "opt.tcache" option for usage details.
104
105--enable-swap
106    Enable mmap()ed swap file support.  When this feature is built in, it is
107    possible to specify one or more files that act as backing store.  This
108    effectively allows for per application swap files.
109
110--enable-dss
111    Enable support for page allocation/deallocation via sbrk(2), in addition to
112    mmap(2).
113
114--enable-fill
115    Enable support for junk/zero filling of memory.  See the "opt.junk"/
116    "opt.zero" option documentation for usage details.
117
118--enable-xmalloc
119    Enable support for optional immediate termination due to out-of-memory
120    errors, as is commonly implemented by "xmalloc" wrapper function for malloc.
121    See the "opt.xmalloc" option documentation for usage details.
122
123--enable-sysv
124    Enable support for System V semantics, wherein malloc(0) returns NULL
125    rather than a minimal allocation.  See the "opt.sysv" option documentation
126    for usage details.
127
128--enable-dynamic-page-shift
129    Under most conditions, the system page size never changes (usually 4KiB or
130    8KiB, depending on architecture and configuration), and unless this option
131    is enabled, jemalloc assumes that page size can safely be determined during
132    configuration and hard-coded.  Enabling dynamic page size determination has
133    a measurable impact on performance, since the compiler is forced to load
134    the page size from memory rather than embedding immediate values.
135
136--disable-lazy-lock
137    Disable code that wraps pthread_create() to detect when an application
138    switches from single-threaded to multi-threaded mode, so that it can avoid
139    mutex locking/unlocking operations while in single-threaded mode.  In
140    practice, this feature usually has little impact on performance unless
141    thread-specific caching is disabled.
142
143--disable-tls
144    Disable thread-local storage (TLS), which allows for fast access to
145    thread-local variables via the __thread keyword.  If TLS is available,
146    jemalloc uses it for several purposes.
147
148--with-xslroot=<path>
149    Specify where to find DocBook XSL stylesheets when building the
150    documentation.
151
152The following environment variables (not a definitive list) impact configure's
153behavior:
154
155CFLAGS="?"
156    Pass these flags to the compiler.  You probably shouldn't define this unless
157    you know what you are doing.  (Use EXTRA_CFLAGS instead.)
158
159EXTRA_CFLAGS="?"
160    Append these flags to CFLAGS.  This makes it possible to add flags such as
161    -Werror, while allowing the configure script to determine what other flags
162    are appropriate for the specified configuration.
163
164    The configure script specifically checks whether an optimization flag (-O*)
165    is specified in EXTRA_CFLAGS, and refrains from specifying an optimization
166    level if it finds that one has already been specified.
167
168CPPFLAGS="?"
169    Pass these flags to the C preprocessor.  Note that CFLAGS is not passed to
170    'cpp' when 'configure' is looking for include files, so you must use
171    CPPFLAGS instead if you need to help 'configure' find header files.
172
173LD_LIBRARY_PATH="?"
174    'ld' uses this colon-separated list to find libraries.
175
176LDFLAGS="?"
177    Pass these flags when linking.
178
179PATH="?"
180    'configure' uses this to find programs.
181
182=== Advanced compilation =======================================================
183
184To install only parts of jemalloc, use the following targets:
185
186    install_bin
187    install_include
188    install_lib
189    install_doc
190
191To clean up build results to varying degrees, use the following make targets:
192
193    clean
194    distclean
195    relclean
196
197=== Advanced installation ======================================================
198
199Optionally, define make variables when invoking make, including (not
200exclusively):
201
202INCLUDEDIR="?"
203    Use this as the installation prefix for header files.
204
205LIBDIR="?"
206    Use this as the installation prefix for libraries.
207
208MANDIR="?"
209    Use this as the installation prefix for man pages.
210
211DESTDIR="?"
212    Prepend DESTDIR to INCLUDEDIR, LIBDIR, DATADIR, and MANDIR.  This is useful
213    when installing to a different path than was specified via --prefix.
214
215CC="?"
216    Use this to invoke the C compiler.
217
218CFLAGS="?"
219    Pass these flags to the compiler.
220
221CPPFLAGS="?"
222    Pass these flags to the C preprocessor.
223
224LDFLAGS="?"
225    Pass these flags when linking.
226
227PATH="?"
228    Use this to search for programs used during configuration and building.
229
230=== Development ================================================================
231
232If you intend to make non-trivial changes to jemalloc, use the 'autogen.sh'
233script rather than 'configure'.  This re-generates 'configure', enables
234configuration dependency rules, and enables re-generation of automatically
235generated source files.
236
237The build system supports using an object directory separate from the source
238tree.  For example, you can create an 'obj' directory, and from within that
239directory, issue configuration and build commands:
240
241    autoconf
242    mkdir obj
243    cd obj
244    ../configure --enable-autogen
245    make
246
247=== Documentation ==============================================================
248
249The manual page is generated in both html and roff formats.  Any web browser
250can be used to view the html manual.  The roff manual page can be formatted
251prior to installation via any of the following commands:
252
253    nroff -man -t doc/jemalloc.3
254
255    groff -man -t -Tps doc/jemalloc.3 | ps2pdf - doc/jemalloc.3.pdf
256
257    (cd doc; groff -man -man-ext -t -Thtml jemalloc.3 > jemalloc.3.html)
258