blob: 2a1e469cb8b01a81758e16cf31bb8fe0cb0f6bbe [file] [log] [blame]
Jason Evanscc00a152009-06-25 18:06:48 -07001Building 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>
Jason Evans6c8b13b2009-12-29 00:09:15 -080026 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.
Jason Evanscc00a152009-06-25 18:06:48 -070028
Jason Evans90895cf2009-12-29 00:09:15 -080029--with-jemalloc-prefix=<prefix>
Jason Evanse7339702010-10-23 18:37:06 -070030 Prefix all public APIs with <prefix>. For example, if <prefix> is
Jason Evans2b769792010-12-16 14:13:46 -080031 "prefix_", API changes like the following occur:
Jason Evanse7339702010-10-23 18:37:06 -070032
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
Jason Evans379f8472010-10-24 16:18:29 -070038 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.
Jason Evans90895cf2009-12-29 00:09:15 -080040
Jason Evans2dbecf12010-09-05 10:35:13 -070041 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
Jason Evans746e77a2011-07-30 16:40:52 -070045--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
Jason Evansb0fd5012010-01-17 01:49:20 -080051--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
Jason Evans355b4382010-09-20 19:20:48 -070056--enable-cc-silence
Jason Evans2b769792010-12-16 14:13:46 -080057 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.
Jason Evans355b4382010-09-20 19:20:48 -070060
Jason Evanscc00a152009-06-25 18:06:48 -070061--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
Jason Evans379f8472010-10-24 16:18:29 -070066 Enable statistics gathering functionality. See the "opt.stats_print"
67 option documentation for usage details.
Jason Evanscc00a152009-06-25 18:06:48 -070068
Jason Evans6109fe02010-02-10 10:37:56 -080069--enable-prof
Jason Evans379f8472010-10-24 16:18:29 -070070 Enable heap profiling and leak detection functionality. See the "opt.prof"
Jason Evans77f350b2011-03-15 22:23:12 -070071 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:
Jason Evans6109fe02010-02-10 10:37:56 -080074
Jason Evans77f350b2011-03-15 22:23:12 -070075 + libunwind (requires --enable-prof-libunwind)
76 + libgcc (unless --disable-prof-libgcc)
77 + gcc intrinsics (unless --disable-prof-gcc)
Jason Evansb27805b2010-02-10 18:15:53 -080078
Jason Evans6109fe02010-02-10 10:37:56 -080079--enable-prof-libunwind
80 Use the libunwind library (http://www.nongnu.org/libunwind/) for stack
Jason Evans77f350b2011-03-15 22:23:12 -070081 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.
Jason Evans6109fe02010-02-10 10:37:56 -080088
Jason Evansca6bd4f2010-03-02 14:12:58 -080089--with-static-libunwind=<libunwind.a>
90 Statically link against the specified libunwind.a rather than dynamically
91 linking with -lunwind.
92
Jason Evanscc00a152009-06-25 18:06:48 -070093--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
Jason Evansa9b01252009-06-26 16:34:13 -070097 practice it never causes any problems if, for example, 4-byte allocations
Jason Evanscc00a152009-06-25 18:06:48 -070098 are 4-byte-aligned.
99
Jason Evans84cbbcb2009-12-29 00:09:15 -0800100--disable-tcache
Jason Evansdafde142010-03-17 16:27:39 -0700101 Disable thread-specific caches for small objects. Objects are cached and
Jason Evans379f8472010-10-24 16:18:29 -0700102 released in bulk, thus reducing the total number of mutex operations. See
Jason Evans2b769792010-12-16 14:13:46 -0800103 the "opt.tcache" option for usage details.
Jason Evanscc00a152009-06-25 18:06:48 -0700104
Jason Evans4201af02010-01-24 02:53:40 -0800105--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
Jason Evanscc00a152009-06-25 18:06:48 -0700110--enable-dss
111 Enable support for page allocation/deallocation via sbrk(2), in addition to
112 mmap(2).
113
114--enable-fill
Jason Evans379f8472010-10-24 16:18:29 -0700115 Enable support for junk/zero filling of memory. See the "opt.junk"/
116 "opt.zero" option documentation for usage details.
Jason Evanscc00a152009-06-25 18:06:48 -0700117
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.
Jason Evans379f8472010-10-24 16:18:29 -0700121 See the "opt.xmalloc" option documentation for usage details.
Jason Evanscc00a152009-06-25 18:06:48 -0700122
123--enable-sysv
124 Enable support for System V semantics, wherein malloc(0) returns NULL
Jason Evans379f8472010-10-24 16:18:29 -0700125 rather than a minimal allocation. See the "opt.sysv" option documentation
126 for usage details.
Jason Evanscc00a152009-06-25 18:06:48 -0700127
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
Jason Evans84cbbcb2009-12-29 00:09:15 -0800141 thread-specific caching is disabled.
Jason Evanscc00a152009-06-25 18:06:48 -0700142
Jason Evans78d815c2010-01-17 14:06:20 -0800143--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,
Jason Evansaee7fd22010-11-24 22:00:02 -0800146 jemalloc uses it for several purposes.
147
148--with-xslroot=<path>
149 Specify where to find DocBook XSL stylesheets when building the
150 documentation.
Jason Evans78d815c2010-01-17 14:06:20 -0800151
Jason Evanscc00a152009-06-25 18:06:48 -0700152The 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
Jason Evanscfeccd32010-03-03 15:48:20 -0800184To install only parts of jemalloc, use the following targets:
Jason Evanscc00a152009-06-25 18:06:48 -0700185
Jason Evans55233992010-04-11 19:02:43 -0700186 install_bin
Jason Evanscfeccd32010-03-03 15:48:20 -0800187 install_include
188 install_lib
Jason Evansaee7fd22010-11-24 22:00:02 -0800189 install_doc
Jason Evanscc00a152009-06-25 18:06:48 -0700190
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
Jason Evanscfeccd32010-03-03 15:48:20 -0800211DESTDIR="?"
Jason Evans2b769792010-12-16 14:13:46 -0800212 Prepend DESTDIR to INCLUDEDIR, LIBDIR, DATADIR, and MANDIR. This is useful
213 when installing to a different path than was specified via --prefix.
Jason Evanscfeccd32010-03-03 15:48:20 -0800214
Jason Evanscc00a152009-06-25 18:06:48 -0700215CC="?"
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
Jason Evans7e11b382010-09-11 22:47:39 -0700246
247=== Documentation ==============================================================
248
Jason Evansaee7fd22010-11-24 22:00:02 -0800249The 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
Jason Evans3af83342010-10-24 16:48:52 -0700251prior to installation via any of the following commands:
Jason Evans7e11b382010-09-11 22:47:39 -0700252
Jason Evansaee7fd22010-11-24 22:00:02 -0800253 nroff -man -t doc/jemalloc.3
Jason Evans3af83342010-10-24 16:48:52 -0700254
Jason Evansaee7fd22010-11-24 22:00:02 -0800255 groff -man -t -Tps doc/jemalloc.3 | ps2pdf - doc/jemalloc.3.pdf
Jason Evans3af83342010-10-24 16:48:52 -0700256
257 (cd doc; groff -man -man-ext -t -Thtml jemalloc.3 > jemalloc.3.html)