| raw e-mail | index | archive | help
diff --cc contrib/jemalloc/FREEBSD-upgrade index d3173b9d1f36,000000000000..fcb66ea71786 mode 100755,000000..100755 --- a/contrib/jemalloc/FREEBSD-upgrade +++ b/contrib/jemalloc/FREEBSD-upgrade @@@ -1,189 -1,0 +1,91 @@@ +#!/bin/sh - # - # Usage: cd /usr/src/contrib/jemalloc - # ./FREEBSD-upgrade <command> [args] - # - # At least the following ports are required when importing jemalloc: - # - devel/autoconf - # - devel/git - # - devel/gmake - # - textproc/docbook-xsl - # - textproc/libxslt - # - # The normal workflow for importing a new release is: - # - # cd /usr/src/contrib/jemalloc - # - # Merge local changes that were made since the previous import: - # - # ./FREEBSD-upgrade merge-changes - # ./FREEBSD-upgrade rediff - # - # Extract latest jemalloc release. - # - # ./FREEBSD-upgrade extract <rev> - # - # Fix patch conflicts as necessary, then regenerate diffs to update line - # offsets: - # - # ./FREEBSD-upgrade rediff - # ./FREEBSD-upgrade extract <rev> - # - # Do multiple buildworld/installworld rounds. If problems arise and patches - # are needed, edit the code in ${work} as necessary, then: - # - # ./FREEBSD-upgrade rediff - # ./FREEBSD-upgrade extract <rev> - # - # The rediff/extract order is important because rediff saves the local - # changes, then extract blows away the work tree and re-creates it with the - # diffs applied. - # - # Finally, to clean up: - # - # ./FREEBSD-upgrade clean + - set -e - set -x ++# Note: you need docbook installed, as well as gmake (we need it to ++# make private_namespace.h) + - if [ ! -x "FREEBSD-upgrade" ] ; then - echo "Run from within src/contrib/jemalloc/" >&2 - exit 1 - fi ++# git subtree merge -- not committed at this time. ++ git subtree merge -P contrib/jemalloc vendor/jemalloc ++cd contrib/jemalloc + - if [ "x${JEMALLOC_REPO}" = "x" ] ; then - JEMALLOC_REPO=https://github.com/jemalloc/jemalloc.git - fi ++# Gut the tests, since they take up too much space. ++# Everything else can stay, but if not, add more to trim (there's ++# always a trade off between time and saved size. ++git rm -rf test msvc ++git commit --amend + - src=`pwd` ++# kill the tests with empty files so we don't have to hack configure.ac ++mkdir -p test/include/test ++touch test/include/test/jemalloc_test_defs.h.in ++touch test/include/test/jemalloc_test.h.in ++echo 'exit 0' > test/test.sh.in + - jemalloc_tmp="jemalloc.tmp" - tmpdir="${src}/../${jemalloc_tmp}" - bare_repo="${tmpdir}/jemalloc_bare.git" - work="jemalloc_work.git" - work_repo="${tmpdir}/${work}" - namespace_repo="${tmpdir}/jemalloc_namespace.git" - changes="${src}/FREEBSD-changes" - - do_fetch() { - local rev=$1 - if [ ! -d "${bare_repo}" ] ; then - mkdir -p "${bare_repo}" - git clone --bare ${JEMALLOC_REPO} ${bare_repo} - fi - ( - cd ${bare_repo} - git fetch origin ${rev} - ) - } ++# Reconfigure -- needed only to regenerate the .h files... We don't ++# use all the files generated. ++# ++# Also note: 5.2 lacks --with-lg-page-sizes, but 5.3 has it. ++# Also, there's got to be a way to not hard-wire version / hash. ++./autogen.sh --enable-xmalloc --enable-fill --enable-lazy-lock --enable-stats \ ++ --enable-utrace --with-malloc-conf=abort_conf:false \ ++ --with-xslroot=/usr/local/share/xsl/docbook --with-private-namespace=__ \ ++ --with-lg-page-sizes=12,13,14,15,16 \ ++ --with-version=5.3.0-0-g54eaed1d8b56b1aa528be3bdd1877e59c56fa90c + - do_extract_helper() { - local rev=$1 - local repo=$2 - do_fetch ${rev} - rm -rf ${repo} - git clone ${bare_repo} ${repo} - ( - cd ${repo} - if [ "x${rev}" != "x" ] ; then - # Use optional rev argument to check out a revision other than HEAD on - # master. - git checkout ${rev} - fi - ) - } ++# Copy over the important generated .h files in configure ++cp ./include/jemalloc/jemalloc.h ../../lib/libc/stdlib/malloc/jemalloc/include/jemalloc ++git add ../../lib/libc/stdlib/malloc/jemalloc/include/jemalloc/jemalloc.h ++cp ./include/jemalloc/jemalloc_defs.h ../../lib/libc/stdlib/malloc/jemalloc/include/jemalloc ++git add ../../lib/libc/stdlib/malloc/jemalloc/include/jemalloc/jemalloc_defs.h + - do_autogen() { - ./autogen.sh --enable-xmalloc --enable-utrace \ - --with-malloc-conf=abort_conf:false \ - --with-xslroot=/usr/local/share/xsl/docbook --with-private-namespace=__ \ - --with-lg-page-sizes=12,13,14,16 - } ++# need to make the namespace .h files, and copy a small subset into the tree ++# These are super-awkward to generate at buildworld time. Also, we assume we ++# only have to make one of these (currently true due to current unlikely to ++# change dependencies. ++gmake include/jemalloc/internal/private_namespace.h ++for i in private_namespace.h jemalloc_internal_defs.h public_namespace.h jemalloc_preamble.h; do ++ cp include/jemalloc/internal/$i ../../lib/libc/stdlib/malloc/jemalloc/include/jemalloc/internal/ ++ git add ../../lib/libc/stdlib/malloc/jemalloc/include/jemalloc/internal/$i ++ rm include/jemalloc/internal/$i ++done ++# OK, commit all the generated files ++git add VERSION ++git commit --amend + - do_extract_diff() { - local rev=$1 - local repo=$2 - do_extract_helper ${rev} ${repo} - ( - cd ${repo} - # Apply diffs before generating files. - patch -p1 < "${src}/FREEBSD-diffs" - find . -name '*.orig' -delete - # Generate files. - do_autogen - gmake dist - ) - } ++# Clean up the mess ++git clean -f . + - do_extract_namespace() { - local rev=$1 - local repo=$2 - do_extract_helper ${rev} ${repo} - ( - cd ${repo} - # Generate files. - do_autogen - gmake include/jemalloc/internal/private_namespace.h - ) - } ++# Save the cheat sheet ++cp ~/jemalloc-upd FREEBSD-upgrade ++git add FREEBSD-upgrade ++git commit --amend + - do_extract() { - local rev=$1 - do_fetch ${rev} - do_extract_diff ${rev} ${work_repo} - do_extract_namespace ${rev} ${namespace_repo} - } ++# Remove hash.c from lib/libc/stdlib/malloc/jemalloc/Makefile.inc ++# mutex_pool.c prng.c ++# Add ++# bin_info.c san.c san_bump.c counter.c prof_data.c prof_log.c prof_recent.c prof_stats.c prof_sys.c ++# emap.c edata.c edata_cache.c pa.c pa_extra.c pac.c decay.c hpa.c hpa_hooks.c fxp.c hpdata.c pai.c ++# ecache.c ehooks.c eset.c sec.c cache_bin.c peak_event.c psset.c inspect.c exp_grow.c thread_event.c ++# + - do_diff() { - ( - cd ${work_repo} - find . -name '*.orig' -delete - find . -name '*.rej' -delete - git add -A - git diff --cached - ) > FREEBSD-diffs - } ++# Manually comment out the following in lib/libc/stdlib/malloc/jemalloc/include/jemalloc/jemalloc.h ++# /* #define JEMALLOC_HAVE_ATTR_FORMAT_GNU_PRINTF */ ++# Add ++# #define JEMALLOC_OVERRIDE_VALLOC ++# and #include "jemalloc_FreeBSD.h" ++# With some adjustments to the old jemalloc_FreeBSD.h, but git can help + - command=$1 - shift - case "${command}" in - merge-changes) # Merge local changes that were made since the previous import. - rev=`cat VERSION |tr 'g' ' ' |awk '{print $2}'` - # Extract code corresponding to most recent import. - do_extract ${rev} - # Compute local differences to the upstream+patches and apply them. - ( - cd ${tmpdir} - diff -ru -X ${src}/FREEBSD-Xlist ${work} ../jemalloc > ${changes} || true - ) - ( - cd ${work_repo} - patch -p1 < ${changes} || true - find . -name '*.orig' -delete - ) - # Update diff. - do_diff - ;; - extract) # Extract upstream sources, apply patches, copy to contrib/jemalloc. - rev=$1 - do_extract ${rev} - # Delete existing files so that cruft doesn't silently remain. - rm -rf ChangeLog COPYING VERSION doc include src - # Copy files over. - tar cf - -C ${work_repo} -X FREEBSD-Xlist . |tar xvf - - internal_dir="include/jemalloc/internal" - grep -v ' isthreaded ' \ - "${namespace_repo}/${internal_dir}/private_namespace.h" \ - > "${internal_dir}/private_namespace.h" - ;; - rediff) # Regenerate diffs based on working tree. - do_diff - ;; - clean) # Remove working tree and temporary files. - rm -rf ${tmpdir} ${changes} - ;; - *) - echo "Unsupported command: \"${command}\"" >&2 - exit 1 - ;; - esac ++# Had to manually remove ++# -#define __malloc_options_1_0 JEMALLOC_N(__malloc_options_1_0) ++# -#define _malloc_first_thread JEMALLOC_N(_malloc_first_thread) ++# -#define __malloc_message_1_0 JEMALLOC_N(__malloc_message_1_0) ++# -#define isthreaded JEMALLOC_N(isthreaded) ++# ++# Also had to remove the following to fix jemalloc 3 ABI compat ++# -#define je_allocm JEMALLOC_N(je_allocm) ++# -#define je_dallocm JEMALLOC_N(je_dallocm) ++# -#define je_nallocm JEMALLOC_N(je_nallocm) ++# -#define je_rallocm JEMALLOC_N(je_rallocm) ++# -#define je_sallocm JEMALLOC_N(je_sallocm) ++# Without the diff you end up with non-exported _je_je*allocm symbols. With you get symbols of the form: ++# 365: 000000000018e2a0 406 FUNC WEAK DEFAULT 14 rallocm@FBSD_1.3 (5) ++# 657: 000000000018e2a0 406 FUNC GLOBAL DEFAULT 14 __rallocm@FBSD_1.3 (5) ++# diff --cc contrib/jemalloc/INSTALL.md index b8f729b0d790,000000000000..9701364041c8 mode 100644,000000..100644 --- a/contrib/jemalloc/INSTALL.md +++ b/contrib/jemalloc/INSTALL.md @@@ -1,421 -1,0 +1,849 @@@ ++<<<<<<< HEAD ++Building and installing a packaged release of jemalloc can be as simple as ++typing the following while in the root directory of the source tree: ++ ++ ./configure ++ make ++ make install ++ ++If building from unpackaged developer sources, the simplest command sequence ++that might work is: ++ ++ ./autogen.sh ++ make ++ make install ++ ++You can uninstall the installed build artifacts like this: ++ ++ make uninstall ++ ++Notes: ++ - "autoconf" needs to be installed ++ - Documentation is built by the default target only when xsltproc is ++available. Build will warn but not stop if the dependency is missing. ++ ++ ++## 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-version=(<major>.<minor>.<bugfix>-<nrev>-g<gid>|VERSION)` ++ ++ The VERSION file is mandatory for successful configuration, and the ++ following steps are taken to assure its presence: ++ 1) If --with-version=<major>.<minor>.<bugfix>-<nrev>-g<gid> is specified, ++ generate VERSION using the specified value. ++ 2) If --with-version is not specified in either form and the source ++ directory is inside a git repository, try to generate VERSION via 'git ++ describe' invocations that pattern-match release tags. ++ 3) If VERSION is missing, generate it with a bogus version: ++ 0.0.0-0-g0000000000000000000000000000000000000000 ++ ++ Note that --with-version=VERSION bypasses (1) and (2), which simplifies ++ VERSION configuration when embedding a jemalloc release into another ++ project's git repository. ++ ++* `--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-mangling=<map>` ++ ++ Mangle public symbols specified in <map> which is a comma-separated list of ++ name:mangled pairs. ++ ++ For example, to use ld's --wrap option as an alternative method for ++ overriding libc's malloc implementation, specify something like: ++ ++ --with-mangling=malloc:__wrap_malloc,free:__wrap_free[...] ++ ++ Note that mangling happens prior to application of the prefix specified by ++ --with-jemalloc-prefix, and mangled symbols are then ignored when applying ++ the prefix. ++ ++* `--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. ++ ++* `--without-export` ++ ++ Don't export public APIs. This can be useful when building jemalloc as a ++ static library, or to avoid exporting public APIs when using the zone ++ allocator on OSX. ++ ++* `--with-private-namespace=<prefix>` ++ ++ Prefix all library-private APIs with <prefix>je_. For shared libraries, ++ symbol visibility mechanisms prevent these symbols from being exported, but ++ for static libraries, naming collisions are a real possibility. By ++ default, <prefix> is empty, which results in a symbol prefix of je_ . ++ ++* `--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. ++ ++* `--with-malloc-conf=<malloc_conf>` ++ ++ Embed `<malloc_conf>` as a run-time options string that is processed prior to ++ the malloc_conf global variable, the /etc/malloc.conf symlink, and the ++ MALLOC_CONF environment variable. For example, to change the default decay ++ time to 30 seconds: ++ ++ --with-malloc-conf=decay_ms:30000 ++ ++* `--enable-debug` ++ ++ Enable assertions and validation code. This incurs a substantial ++ performance hit, but is very useful during application development. ++ ++* `--disable-stats` ++ ++ Disable 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-fill` ++ ++ Disable support for junk/zero filling of memory. See the "opt.junk" and ++ "opt.zero" option documentation for usage details. ++ ++* `--disable-zone-allocator` ++ ++ Disable zone allocator for Darwin. This means jemalloc won't be hooked as ++ the default allocator on OSX/iOS. ++ ++* `--enable-utrace` ++ ++ Enable utrace(2)-based allocation tracing. This feature is not broadly ++ portable (FreeBSD has it, but Linux and OS X do not). ++ ++* `--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-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-cache-oblivious` ++ ++ Disable cache-oblivious large allocation alignment by default, for large ++ allocation requests with no alignment constraints. If this feature is ++ disabled, all large allocations are page-aligned as an implementation ++ artifact, which can severely harm CPU cache utilization. However, the ++ cache-oblivious layout comes at the cost of one extra page per large ++ allocation, which in the most extreme case increases physical memory usage ++ for the 16 KiB size class to 20 KiB. ++ ++* `--disable-syscall` ++ ++ Disable use of syscall(2) rather than {open,read,write,close}(2). This is ++ intended as a workaround for systems that place security limitations on ++ syscall(2). ++ ++* `--disable-cxx` ++ ++ Disable C++ integration. This will cause new and delete operator ++ implementations to be omitted. ++ ++* `--with-xslroot=<path>` ++ ++ Specify where to find DocBook XSL stylesheets when building the ++ documentation. ++ ++* `--with-lg-page=<lg-page>` ++ ++ Specify the base 2 log of the allocator page size, which must in turn be at ++ least as large as the system page size. By default the configure script ++ determines the host's page size and sets the allocator page size equal to ++ the system page size, so this option need not be specified unless the ++ system page size may change between configuration and execution, e.g. when ++ cross compiling. ++ ++* `--with-lg-hugepage=<lg-hugepage>` ++ ++ Specify the base 2 log of the system huge page size. This option is useful ++ when cross compiling, or when overriding the default for systems that do ++ not explicitly support huge pages. ++ ++* `--with-lg-quantum=<lg-quantum>` ++ ++ Specify the base 2 log of the minimum allocation alignment. jemalloc needs ++ to know the minimum alignment that meets the following C standard ++ requirement (quoted from the April 12, 2011 draft of the C11 standard): ++ ++ > The pointer returned if the allocation succeeds is suitably aligned so ++ that it may be assigned to a pointer to any type of object with a ++ fundamental alignment requirement and then used to access such an object ++ or an array of such objects in the space allocated [...] ++ ++ This setting is architecture-specific, and although jemalloc includes known ++ safe values for the most commonly used modern architectures, there is a ++ wrinkle related to GNU libc (glibc) that may impact your choice of ++ <lg-quantum>. On most modern architectures, this mandates 16-byte ++ alignment (<lg-quantum>=4), but the glibc developers chose not to meet this ++ requirement for performance reasons. An old discussion can be found at ++ <https://sourceware.org/bugzilla/show_bug.cgi?id=206>; . Unlike glibc, ++ jemalloc does follow the C standard by default (caveat: jemalloc ++ technically cheats for size classes smaller than the quantum), but the fact ++ that Linux systems already work around this allocator noncompliance means ++ that it is generally safe in practice to let jemalloc's minimum alignment ++ follow glibc's lead. If you specify `--with-lg-quantum=3` during ++ configuration, jemalloc will provide additional size classes that are not ++ 16-byte-aligned (24, 40, and 56). ++ ++* `--with-lg-vaddr=<lg-vaddr>` ++ ++ Specify the number of significant virtual address bits. By default, the ++ configure script attempts to detect virtual address size on those platforms ++ where it knows how, and picks a default otherwise. This option may be ++ useful when cross-compiling. ++ ++* `--disable-initial-exec-tls` ++ ++ Disable the initial-exec TLS model for jemalloc's internal thread-local ++ storage (on those platforms that support explicit settings). This can allow ++ jemalloc to be dynamically loaded after program startup (e.g. using dlopen). ++ Note that in this case, there will be two malloc implementations operating ++ in the same process, which will almost certainly result in confusing runtime ++ crashes if pointers leak from one implementation to the other. ++ ++* `--disable-libdl` ++ ++ Disable the usage of libdl, namely dlsym(3) which is required by the lazy ++ lock option. This can allow building static binaries. ++ ++The following environment variables (not a definitive list) impact configure's ++behavior: ++ ++* `CFLAGS="?"` ++* `CXXFLAGS="?"` ++ ++ Pass these flags to the C/C++ compiler. Any flags set by the configure ++ script are prepended, which means explicitly set flags generally take ++ precedence. Take care when specifying flags such as -Werror, because ++ configure tests may be affected in undesirable ways. ++ ++* `EXTRA_CFLAGS="?"` ++* `EXTRA_CXXFLAGS="?"` ++ ++ Append these flags to CFLAGS/CXXFLAGS, without passing them to the ++ compiler(s) during configuration. 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. ++ ++* `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. ++ ++In some cases it may be necessary to work around configuration results that do ++not match reality. For example, Linux 4.5 added support for the MADV_FREE flag ++to madvise(2), which can cause problems if building on a host with MADV_FREE ++support and deploying to a target without. To work around this, use a cache ++file to override the relevant configuration variable defined in configure.ac, ++e.g.: ++ ++ echo "je_cv_madv_free=no" > config.cache && ./configure -C ++ ++ ++## Advanced compilation ++ ++To build only parts of jemalloc, use the following targets: ++ ++ build_lib_shared ++ build_lib_static ++ build_lib ++ build_doc_html ++ build_doc_man ++ build_doc ++ ++To install only parts of jemalloc, use the following targets: ++ ++ install_bin ++ install_include ++ install_lib_shared ++ install_lib_static ++ install_lib_pc ++ install_lib ++ install_doc_html ++ install_doc_man ++ 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 the following command: ++ ++ nroff -man -t doc/jemalloc.3 ++||||||| dec341af7695 ++======= +Building and installing a packaged release of jemalloc can be as simple as +typing the following while in the root directory of the source tree: + + ./configure + make + make install + +If building from unpackaged developer sources, the simplest command sequence +that might work is: + + ./autogen.sh + make dist + make + make install + *** 43131 LINES SKIPPED ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?>