blob: a00960aa2e1e290abcce4d3dbed70b3348fd6a2f [file] [log] [blame]
Jason Evanseb5376a2014-09-23 09:21:49 -07001Building and installing a packaged release of jemalloc can be as simple as
2typing the following while in the root directory of the source tree:
Jason Evanscc00a152009-06-25 18:06:48 -07003
4 ./configure
5 make
6 make install
7
Jason Evanseb5376a2014-09-23 09:21:49 -07008If building from unpackaged developer sources, the simplest command sequence
9that might work is:
10
11 ./autogen.sh
12 make dist
13 make
14 make install
15
16Note that documentation is not built by the default target because doing so
17would create a dependency on xsltproc in packaged releases, hence the
18requirement to either run 'make dist' or avoid installing docs via the various
19install_* targets documented below.
20
Jason Evanscc00a152009-06-25 18:06:48 -070021=== Advanced configuration =====================================================
22
23The 'configure' script supports numerous options that allow control of which
24functionality is enabled, where jemalloc is installed, etc. Optionally, pass
25any of the following arguments (not a definitive list) to 'configure':
26
27--help
28 Print a definitive list of options.
29
30--prefix=<install-root-dir>
31 Set the base directory in which to install. For example:
32
33 ./configure --prefix=/usr/local
34
35 will cause files to be installed into /usr/local/include, /usr/local/lib,
36 and /usr/local/man.
37
38--with-rpath=<colon-separated-rpath>
Jason Evans6c8b13b2009-12-29 00:09:15 -080039 Embed one or more library paths, so that libjemalloc can find the libraries
40 it is linked to. This works only on ELF-based systems.
Jason Evanscc00a152009-06-25 18:06:48 -070041
Jason Evans0a5489e2012-03-01 17:19:20 -080042--with-mangling=<map>
43 Mangle public symbols specified in <map> which is a comma-separated list of
44 name:mangled pairs.
45
46 For example, to use ld's --wrap option as an alternative method for
47 overriding libc's malloc implementation, specify something like:
48
49 --with-mangling=malloc:__wrap_malloc,free:__wrap_free[...]
50
51 Note that mangling happens prior to application of the prefix specified by
52 --with-jemalloc-prefix, and mangled symbols are then ignored when applying
53 the prefix.
54
Jason Evans90895cf2009-12-29 00:09:15 -080055--with-jemalloc-prefix=<prefix>
Jason Evanse7339702010-10-23 18:37:06 -070056 Prefix all public APIs with <prefix>. For example, if <prefix> is
Jason Evans2b769792010-12-16 14:13:46 -080057 "prefix_", API changes like the following occur:
Jason Evanse7339702010-10-23 18:37:06 -070058
59 malloc() --> prefix_malloc()
60 malloc_conf --> prefix_malloc_conf
61 /etc/malloc.conf --> /etc/prefix_malloc.conf
62 MALLOC_CONF --> PREFIX_MALLOC_CONF
63
Jason Evans379f8472010-10-24 16:18:29 -070064 This makes it possible to use jemalloc at the same time as the system
65 allocator, or even to use multiple copies of jemalloc simultaneously.
Jason Evans90895cf2009-12-29 00:09:15 -080066
Jason Evans2dbecf12010-09-05 10:35:13 -070067 By default, the prefix is "", except on OS X, where it is "je_". On OS X,
68 jemalloc overlays the default malloc zone, but makes no attempt to actually
69 replace the "malloc", "calloc", etc. symbols.
70
Mike Hommey99066602012-11-19 10:55:26 +010071--without-export
Jason Evansc21b05e2014-09-04 22:27:26 -070072 Don't export public APIs. This can be useful when building jemalloc as a
Mike Hommey99066602012-11-19 10:55:26 +010073 static library, or to avoid exporting public APIs when using the zone
74 allocator on OSX.
75
Jason Evans746e77a2011-07-30 16:40:52 -070076--with-private-namespace=<prefix>
Jason Evans86abd0d2013-11-30 15:25:42 -080077 Prefix all library-private APIs with <prefix>je_. For shared libraries,
Jason Evans746e77a2011-07-30 16:40:52 -070078 symbol visibility mechanisms prevent these symbols from being exported, but
79 for static libraries, naming collisions are a real possibility. By
Jason Evans86abd0d2013-11-30 15:25:42 -080080 default, <prefix> is empty, which results in a symbol prefix of je_ .
Jason Evans746e77a2011-07-30 16:40:52 -070081
Jason Evansb0fd5012010-01-17 01:49:20 -080082--with-install-suffix=<suffix>
83 Append <suffix> to the base name of all installed files, such that multiple
84 versions of jemalloc can coexist in the same installation directory. For
85 example, libjemalloc.so.0 becomes libjemalloc<suffix>.so.0.
86
Jason Evans644d4142014-04-14 22:49:23 -070087--disable-cc-silence
88 Disable code that silences non-useful compiler warnings. This is mainly
89 useful during development when auditing the set of warnings that are being
90 silenced.
Jason Evans355b4382010-09-20 19:20:48 -070091
Jason Evanscc00a152009-06-25 18:06:48 -070092--enable-debug
93 Enable assertions and validation code. This incurs a substantial
94 performance hit, but is very useful during application development.
Mike Hommey5135e342012-12-06 22:16:26 +010095 Implies --enable-ivsalloc.
96
Jason Evans748dfac2013-12-06 18:27:33 -080097--enable-code-coverage
98 Enable code coverage support, for use during jemalloc test development.
99 Additional testing targets are available if this option is enabled:
100
101 coverage
102 coverage_unit
103 coverage_integration
104 coverage_stress
105
106 These targets do not clear code coverage results from previous runs, and
107 there are interactions between the various coverage targets, so it is
108 usually advisable to run 'make clean' between repeated code coverage runs.
109
Mike Hommey5135e342012-12-06 22:16:26 +0100110--enable-ivsalloc
111 Enable validation code, which verifies that pointers reside within
Jason Evansc21b05e2014-09-04 22:27:26 -0700112 jemalloc-owned chunks before dereferencing them. This incurs a substantial
Mike Hommey5135e342012-12-06 22:16:26 +0100113 performance hit.
Jason Evanscc00a152009-06-25 18:06:48 -0700114
Jason Evansd073a322012-02-28 20:41:16 -0800115--disable-stats
116 Disable statistics gathering functionality. See the "opt.stats_print"
Jason Evans379f8472010-10-24 16:18:29 -0700117 option documentation for usage details.
Jason Evanscc00a152009-06-25 18:06:48 -0700118
Jason Evans6109fe02010-02-10 10:37:56 -0800119--enable-prof
Jason Evans379f8472010-10-24 16:18:29 -0700120 Enable heap profiling and leak detection functionality. See the "opt.prof"
Jason Evans77f350b2011-03-15 22:23:12 -0700121 option documentation for usage details. When enabled, there are several
122 approaches to backtracing, and the configure script chooses the first one
123 in the following list that appears to function correctly:
Jason Evans6109fe02010-02-10 10:37:56 -0800124
Jason Evans77f350b2011-03-15 22:23:12 -0700125 + libunwind (requires --enable-prof-libunwind)
126 + libgcc (unless --disable-prof-libgcc)
127 + gcc intrinsics (unless --disable-prof-gcc)
Jason Evansb27805b2010-02-10 18:15:53 -0800128
Jason Evans6109fe02010-02-10 10:37:56 -0800129--enable-prof-libunwind
130 Use the libunwind library (http://www.nongnu.org/libunwind/) for stack
Jason Evans77f350b2011-03-15 22:23:12 -0700131 backtracing.
132
133--disable-prof-libgcc
134 Disable the use of libgcc's backtracing functionality.
135
136--disable-prof-gcc
137 Disable the use of gcc intrinsics for backtracing.
Jason Evans6109fe02010-02-10 10:37:56 -0800138
Jason Evansca6bd4f2010-03-02 14:12:58 -0800139--with-static-libunwind=<libunwind.a>
140 Statically link against the specified libunwind.a rather than dynamically
141 linking with -lunwind.
142
Jason Evans84cbbcb2009-12-29 00:09:15 -0800143--disable-tcache
Jason Evansdafde142010-03-17 16:27:39 -0700144 Disable thread-specific caches for small objects. Objects are cached and
Jason Evans379f8472010-10-24 16:18:29 -0700145 released in bulk, thus reducing the total number of mutex operations. See
Jason Evans2b769792010-12-16 14:13:46 -0800146 the "opt.tcache" option for usage details.
Jason Evanscc00a152009-06-25 18:06:48 -0700147
Jason Evans59ae2762012-04-16 17:52:27 -0700148--disable-munmap
149 Disable virtual memory deallocation via munmap(2); instead keep track of
150 the virtual memory for later use. munmap() is disabled by default (i.e.
151 --disable-munmap is implied) on Linux, which has a quirk in its virtual
152 memory allocation algorithm that causes semi-permanent VM map holes under
153 normal jemalloc operation.
154
Jason Evans777c1912012-02-28 20:49:22 -0800155--disable-fill
Jason Evans122449b2012-04-06 00:35:09 -0700156 Disable support for junk/zero filling of memory, quarantine, and redzones.
157 See the "opt.junk", "opt.zero", "opt.quarantine", and "opt.redzone" option
158 documentation for usage details.
159
160--disable-valgrind
161 Disable support for Valgrind.
Jason Evanscc00a152009-06-25 18:06:48 -0700162
Mike Hommeyd0357f72012-11-26 18:52:41 +0100163--disable-zone-allocator
Jason Evansc21b05e2014-09-04 22:27:26 -0700164 Disable zone allocator for Darwin. This means jemalloc won't be hooked as
Mike Hommeyd0357f72012-11-26 18:52:41 +0100165 the default allocator on OSX/iOS.
166
Jason Evansb1476112012-04-05 13:36:17 -0700167--enable-utrace
168 Enable utrace(2)-based allocation tracing. This feature is not broadly
169 portable (FreeBSD has it, but Linux and OS X do not).
170
Jason Evanscc00a152009-06-25 18:06:48 -0700171--enable-xmalloc
172 Enable support for optional immediate termination due to out-of-memory
173 errors, as is commonly implemented by "xmalloc" wrapper function for malloc.
Jason Evans379f8472010-10-24 16:18:29 -0700174 See the "opt.xmalloc" option documentation for usage details.
Jason Evanscc00a152009-06-25 18:06:48 -0700175
Jason Evans0fee70d2012-02-13 12:36:11 -0800176--enable-lazy-lock
177 Enable code that wraps pthread_create() to detect when an application
Jason Evanscc00a152009-06-25 18:06:48 -0700178 switches from single-threaded to multi-threaded mode, so that it can avoid
179 mutex locking/unlocking operations while in single-threaded mode. In
180 practice, this feature usually has little impact on performance unless
Jason Evans84cbbcb2009-12-29 00:09:15 -0800181 thread-specific caching is disabled.
Jason Evanscc00a152009-06-25 18:06:48 -0700182
Jason Evans78d815c2010-01-17 14:06:20 -0800183--disable-tls
184 Disable thread-local storage (TLS), which allows for fast access to
185 thread-local variables via the __thread keyword. If TLS is available,
Jason Evansaee7fd22010-11-24 22:00:02 -0800186 jemalloc uses it for several purposes.
187
188--with-xslroot=<path>
189 Specify where to find DocBook XSL stylesheets when building the
190 documentation.
Jason Evans78d815c2010-01-17 14:06:20 -0800191
Jason Evansfc0b3b72014-10-09 17:54:06 -0700192--with-lg-page=<lg-page>
193 Specify the base 2 log of the system page size. This option is only useful
194 when cross compiling, since the configure script automatically determines the
195 host's page size by default.
196
197--with-lg-page-sizes=<lg-page-sizes>
198 Specify the comma-separated base 2 logs of the page sizes to support. This
199 option may be useful when cross-compiling in combination with
200 --with-lg-page, but its primary use case is for integration with FreeBSD's
201 libc, wherein jemalloc is embedded.
202
203--with-lg-size-class-group=<lg-size-class-group>
204 Specify the base 2 log of how many size classes to use for each doubling in
205 size. By default jemalloc uses <lg-size-class-group>=2, which results in
206 e.g. the following size classes:
207
208 [...], 64,
209 80, 96, 112, 128,
210 160, [...]
211
212 <lg-size-class-group>=3 results in e.g. the following size classes:
213
214 [...], 64,
215 72, 80, 88, 96, 104, 112, 120, 128,
216 144, [...]
217
218 The minimal <lg-size-class-group>=0 causes jemalloc to only provide size
219 classes that are powers of 2:
220
221 [...],
222 64,
223 128,
224 256,
225 [...]
226
227 An implementation detail currently limits the total number of small size
228 classes to 255, and a compilation error will result if the
229 <lg-size-class-group> you specify cannot be supported. The limit is
230 roughly <lg-size-class-group>=4, depending on page size.
231
232--with-lg-quantum=<lg-quantum>
Jason Evans81e54752014-10-10 22:34:25 -0700233 Specify the base 2 log of the minimum allocation alignment. jemalloc needs
234 to know the minimum alignment that meets the following C standard
235 requirement (quoted from the April 12, 2011 draft of the C11 standard):
Jason Evansfc0b3b72014-10-09 17:54:06 -0700236
237 The pointer returned if the allocation succeeds is suitably aligned so
238 that it may be assigned to a pointer to any type of object with a
239 fundamental alignment requirement and then used to access such an object
240 or an array of such objects in the space allocated [...]
241
242 This setting is architecture-specific, and although jemalloc includes known
243 safe values for the most commonly used modern architectures, there is a
244 wrinkle related to GNU libc (glibc) that may impact your choice of
245 <lg-quantum>. On most modern architectures, this mandates 16-byte alignment
246 (<lg-quantum>=4), but the glibc developers chose not to meet this requirement
247 for performance reasons. An old discussion can be found at
248 https://sourceware.org/bugzilla/show_bug.cgi?id=206 . Unlike glibc,
Jason Evans81e54752014-10-10 22:34:25 -0700249 jemalloc does follow the C standard by default (caveat: jemalloc
250 technically cheats if --with-lg-tiny-min is smaller than --with-lg-quantum),
Jason Evansfc0b3b72014-10-09 17:54:06 -0700251 but the fact that Linux systems already work around this allocator
252 noncompliance means that it is generally safe in practice to let jemalloc's
253 minimum alignment follow glibc's lead. If you specify --with-lg-quantum=3
254 during configuration, jemalloc will provide additional size classes that
255 are not 16-byte-aligned (24, 40, and 56, assuming
256 --with-lg-size-class-group=2).
257
Jason Evans81e54752014-10-10 22:34:25 -0700258--with-lg-tiny-min=<lg-tiny-min>
259 Specify the base 2 log of the minimum tiny size class to support. Tiny
260 size classes are powers of 2 less than the quantum, and are only
261 incorporated if <lg-tiny-min> is less than <lg-quantum> (see
262 --with-lg-quantum). Tiny size classes technically violate the C standard
263 requirement for minimum alignment, and crashes could conceivably result if
264 the compiler were to generate instructions that made alignment assumptions,
265 both because illegal instruction traps could result, and because accesses
266 could straddle page boundaries and cause segmentation faults due to
267 accessing unmapped addresses.
268
269 The default of <lg-tiny-min>=3 works well in practice even on architectures
270 that technically require 16-byte alignment, probably for the same reason
271 --with-lg-quantum=3 works. Smaller tiny size classes can, and will, cause
272 crashes (see https://bugzilla.mozilla.org/show_bug.cgi?id=691003 for an
273 example).
274
275 This option is rarely useful, and is mainly provided as documentation of a
276 subtle implementation detail. If you do use this option, specify a
277 value in [3, ..., <lg-quantum>].
278
Jason Evanscc00a152009-06-25 18:06:48 -0700279The following environment variables (not a definitive list) impact configure's
280behavior:
281
282CFLAGS="?"
283 Pass these flags to the compiler. You probably shouldn't define this unless
284 you know what you are doing. (Use EXTRA_CFLAGS instead.)
285
286EXTRA_CFLAGS="?"
287 Append these flags to CFLAGS. This makes it possible to add flags such as
288 -Werror, while allowing the configure script to determine what other flags
289 are appropriate for the specified configuration.
290
291 The configure script specifically checks whether an optimization flag (-O*)
292 is specified in EXTRA_CFLAGS, and refrains from specifying an optimization
293 level if it finds that one has already been specified.
294
295CPPFLAGS="?"
296 Pass these flags to the C preprocessor. Note that CFLAGS is not passed to
297 'cpp' when 'configure' is looking for include files, so you must use
298 CPPFLAGS instead if you need to help 'configure' find header files.
299
300LD_LIBRARY_PATH="?"
301 'ld' uses this colon-separated list to find libraries.
302
303LDFLAGS="?"
304 Pass these flags when linking.
305
306PATH="?"
307 'configure' uses this to find programs.
308
309=== Advanced compilation =======================================================
310
Jason Evans7b398ac2012-03-02 16:38:37 -0800311To build only parts of jemalloc, use the following targets:
312
313 build_lib_shared
314 build_lib_static
315 build_lib
316 build_doc_html
317 build_doc_man
318 build_doc
319
Jason Evanscfeccd32010-03-03 15:48:20 -0800320To install only parts of jemalloc, use the following targets:
Jason Evanscc00a152009-06-25 18:06:48 -0700321
Jason Evans55233992010-04-11 19:02:43 -0700322 install_bin
Jason Evanscfeccd32010-03-03 15:48:20 -0800323 install_include
Jason Evans7b398ac2012-03-02 16:38:37 -0800324 install_lib_shared
325 install_lib_static
Jason Evanscfeccd32010-03-03 15:48:20 -0800326 install_lib
Jason Evans7b398ac2012-03-02 16:38:37 -0800327 install_doc_html
328 install_doc_man
Jason Evansaee7fd22010-11-24 22:00:02 -0800329 install_doc
Jason Evanscc00a152009-06-25 18:06:48 -0700330
331To clean up build results to varying degrees, use the following make targets:
332
333 clean
334 distclean
335 relclean
336
337=== Advanced installation ======================================================
338
339Optionally, define make variables when invoking make, including (not
340exclusively):
341
342INCLUDEDIR="?"
343 Use this as the installation prefix for header files.
344
345LIBDIR="?"
346 Use this as the installation prefix for libraries.
347
348MANDIR="?"
349 Use this as the installation prefix for man pages.
350
Jason Evanscfeccd32010-03-03 15:48:20 -0800351DESTDIR="?"
Jason Evans2b769792010-12-16 14:13:46 -0800352 Prepend DESTDIR to INCLUDEDIR, LIBDIR, DATADIR, and MANDIR. This is useful
353 when installing to a different path than was specified via --prefix.
Jason Evanscfeccd32010-03-03 15:48:20 -0800354
Jason Evanscc00a152009-06-25 18:06:48 -0700355CC="?"
356 Use this to invoke the C compiler.
357
358CFLAGS="?"
359 Pass these flags to the compiler.
360
361CPPFLAGS="?"
362 Pass these flags to the C preprocessor.
363
364LDFLAGS="?"
365 Pass these flags when linking.
366
367PATH="?"
368 Use this to search for programs used during configuration and building.
369
370=== Development ================================================================
371
372If you intend to make non-trivial changes to jemalloc, use the 'autogen.sh'
373script rather than 'configure'. This re-generates 'configure', enables
374configuration dependency rules, and enables re-generation of automatically
375generated source files.
376
377The build system supports using an object directory separate from the source
378tree. For example, you can create an 'obj' directory, and from within that
379directory, issue configuration and build commands:
380
381 autoconf
382 mkdir obj
383 cd obj
384 ../configure --enable-autogen
385 make
Jason Evans7e11b382010-09-11 22:47:39 -0700386
387=== Documentation ==============================================================
388
Jason Evansaee7fd22010-11-24 22:00:02 -0800389The manual page is generated in both html and roff formats. Any web browser
390can be used to view the html manual. The roff manual page can be formatted
Jason Evans079687b2012-04-23 12:49:23 -0700391prior to installation via the following command:
Jason Evans7e11b382010-09-11 22:47:39 -0700392
Jason Evansaee7fd22010-11-24 22:00:02 -0800393 nroff -man -t doc/jemalloc.3