aboutsummaryrefslogtreecommitdiff
path: root/INSTALL
blob: 0ddcacb7adb17b8c20b0099ee23e2f20150e503e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
Building and installing jemalloc can be as simple as typing the following while
in the root directory of the source tree:

    ./configure
    make
    make install

=== Advanced configuration =====================================================

The 'configure' script supports numerous options that allow control of which
functionality is enabled, where jemalloc is installed, etc.  Optionally, pass
any of the following arguments (not a definitive list) to 'configure':

--help
    Print a definitive list of options.

--prefix=<install-root-dir>
    Set the base directory in which to install.  For example:

        ./configure --prefix=/usr/local

    will cause files to be installed into /usr/local/include, /usr/local/lib,
    and /usr/local/man.

--with-rpath=<colon-separated-rpath>
    Embed one or more library paths, so that libjemalloc can find the libraries
    it is linked to.  This works only on ELF-based systems.

--with-jemalloc-prefix=<prefix>
    Prefix all public APIs with <prefix>.  For example, if <prefix> is
    "prefix_", API changes like the following occur:

      malloc()         --> prefix_malloc()
      malloc_conf      --> prefix_malloc_conf
      /etc/malloc.conf --> /etc/prefix_malloc.conf
      MALLOC_CONF      --> PREFIX_MALLOC_CONF

    This makes it possible to use jemalloc at the same time as the system
    allocator, or even to use multiple copies of jemalloc simultaneously.

    By default, the prefix is "", except on OS X, where it is "je_".  On OS X,
    jemalloc overlays the default malloc zone, but makes no attempt to actually
    replace the "malloc", "calloc", etc. symbols.

--with-private-namespace=<prefix>
    Prefix all library-private APIs with <prefix>.  For shared libraries,
    symbol visibility mechanisms prevent these symbols from being exported, but
    for static libraries, naming collisions are a real possibility.  By
    default, the prefix is "" (empty string).

--with-install-suffix=<suffix>
    Append <suffix> to the base name of all installed files, such that multiple
    versions of jemalloc can coexist in the same installation directory.  For
    example, libjemalloc.so.0 becomes libjemalloc<suffix>.so.0.

--enable-cc-silence
    Enable code that silences non-useful compiler warnings.  This is helpful
    when trying to tell serious warnings from those due to compiler
    limitations, but it potentially incurs a performance penalty.

--enable-debug
    Enable assertions and validation code.  This incurs a substantial
    performance hit, but is very useful during application development.

--enable-stats
    Enable statistics gathering functionality.  See the "opt.stats_print"
    option documentation for usage details.

--enable-prof
    Enable heap profiling and leak detection functionality.  See the "opt.prof"
    option documentation for usage details.  When enabled, there are several
    approaches to backtracing, and the configure script chooses the first one
    in the following list that appears to function correctly:

    + libunwind      (requires --enable-prof-libunwind)
    + libgcc         (unless --disable-prof-libgcc)
    + gcc intrinsics (unless --disable-prof-gcc)

--enable-prof-libunwind
    Use the libunwind library (http://www.nongnu.org/libunwind/) for stack
    backtracing.

--disable-prof-libgcc
    Disable the use of libgcc's backtracing functionality.

--disable-prof-gcc
    Disable the use of gcc intrinsics for backtracing.

--with-static-libunwind=<libunwind.a>
    Statically link against the specified libunwind.a rather than dynamically
    linking with -lunwind.

--disable-tcache
    Disable thread-specific caches for small objects.  Objects are cached and
    released in bulk, thus reducing the total number of mutex operations.  See
    the "opt.tcache" option for usage details.

--enable-dss
    Enable support for page allocation/deallocation via sbrk(2), in addition to
    mmap(2).

--enable-fill
    Enable support for junk/zero filling of memory.  See the "opt.junk"/
    "opt.zero" option documentation for usage details.

--enable-xmalloc
    Enable support for optional immediate termination due to out-of-memory
    errors, as is commonly implemented by "xmalloc" wrapper function for malloc.
    See the "opt.xmalloc" option documentation for usage details.

--enable-sysv
    Enable support for System V semantics, wherein malloc(0) returns NULL
    rather than a minimal allocation.  See the "opt.sysv" option documentation
    for usage details.

--enable-lazy-lock
    Enable code that wraps pthread_create() to detect when an application
    switches from single-threaded to multi-threaded mode, so that it can avoid
    mutex locking/unlocking operations while in single-threaded mode.  In
    practice, this feature usually has little impact on performance unless
    thread-specific caching is disabled.

--disable-tls
    Disable thread-local storage (TLS), which allows for fast access to
    thread-local variables via the __thread keyword.  If TLS is available,
    jemalloc uses it for several purposes.

--with-xslroot=<path>
    Specify where to find DocBook XSL stylesheets when building the
    documentation.

The following environment variables (not a definitive list) impact configure's
behavior:

CFLAGS="?"
    Pass these flags to the compiler.  You probably shouldn't define this unless
    you know what you are doing.  (Use EXTRA_CFLAGS instead.)

EXTRA_CFLAGS="?"
    Append these flags to CFLAGS.  This makes it possible to add flags such as
    -Werror, while allowing the configure script to determine what other flags
    are appropriate for the specified configuration.

    The configure script specifically checks whether an optimization flag (-O*)
    is specified in EXTRA_CFLAGS, and refrains from specifying an optimization
    level if it finds that one has already been specified.

CPPFLAGS="?"
    Pass these flags to the C preprocessor.  Note that CFLAGS is not passed to
    'cpp' when 'configure' is looking for include files, so you must use
    CPPFLAGS instead if you need to help 'configure' find header files.

LD_LIBRARY_PATH="?"
    'ld' uses this colon-separated list to find libraries.

LDFLAGS="?"
    Pass these flags when linking.

PATH="?"
    'configure' uses this to find programs.

=== Advanced compilation =======================================================

To install only parts of jemalloc, use the following targets:

    install_bin
    install_include
    install_lib
    install_doc

To clean up build results to varying degrees, use the following make targets:

    clean
    distclean
    relclean

=== Advanced installation ======================================================

Optionally, define make variables when invoking make, including (not
exclusively):

INCLUDEDIR="?"
    Use this as the installation prefix for header files.

LIBDIR="?"
    Use this as the installation prefix for libraries.

MANDIR="?"
    Use this as the installation prefix for man pages.

DESTDIR="?"
    Prepend DESTDIR to INCLUDEDIR, LIBDIR, DATADIR, and MANDIR.  This is useful
    when installing to a different path than was specified via --prefix.

CC="?"
    Use this to invoke the C compiler.

CFLAGS="?"
    Pass these flags to the compiler.

CPPFLAGS="?"
    Pass these flags to the C preprocessor.

LDFLAGS="?"
    Pass these flags when linking.

PATH="?"
    Use this to search for programs used during configuration and building.

=== Development ================================================================

If you intend to make non-trivial changes to jemalloc, use the 'autogen.sh'
script rather than 'configure'.  This re-generates 'configure', enables
configuration dependency rules, and enables re-generation of automatically
generated source files.

The build system supports using an object directory separate from the source
tree.  For example, you can create an 'obj' directory, and from within that
directory, issue configuration and build commands:

    autoconf
    mkdir obj
    cd obj
    ../configure --enable-autogen
    make

=== Documentation ==============================================================

The manual page is generated in both html and roff formats.  Any web browser
can be used to view the html manual.  The roff manual page can be formatted
prior to installation via any of the following commands:

    nroff -man -t doc/jemalloc.3

    groff -man -t -Tps doc/jemalloc.3 | ps2pdf - doc/jemalloc.3.pdf

    (cd doc; groff -man -man-ext -t -Thtml jemalloc.3 > jemalloc.3.html)