From: Wez Furlong Date: Wed, 7 Dec 2016 20:53:52 +0000 (-0800) Subject: USE_JEMALLOC in the OSS build if we have jemalloc X-Git-Tag: v2016.12.12.00~11 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=e44d8a6211a820ce24c358dc63515278ccf23d64;p=folly.git USE_JEMALLOC in the OSS build if we have jemalloc Summary: Nothing defines USE_JEMALLOC in the OSS build today and that causes some portability problems. Specifically, the homebrew recipe will make libjemalloc available and our configure script will detect it and add it to the library flags. Our subsequent check for `malloc_usable_size` then finds this function in libjemalloc. When later attempting to build wangle against the homebrew folly we get compilation failures because the prototype for `malloc_usable_size` is only available in the jemalloc headers and nothing in the saved configuration for folly is set up for this to be pulled in as it it guarded by `USE_JEMALLOC`. This attempts to resolve the situation by forcing on `USE_JEMALLOC` when we detect the library in configure. This is made a little more complicated because we cannot set `USE_JEMALLOC` in the OSS build; it gets rewritten to have a `FOLLY_` prefix. Since we have code outside of folly that requires that this symbol be `USE_JEMALLOC`, I've changed the conditional to check for both flavors of the symbol, with and without the prefix. Reviewed By: yfeldblum Differential Revision: D4289176 fbshipit-source-id: 756bc815c3ef1fac454e603feb72155d98c5aadd --- diff --git a/folly/configure.ac b/folly/configure.ac index 3f4968e0..90771eab 100644 --- a/folly/configure.ac +++ b/folly/configure.ac @@ -161,7 +161,15 @@ AC_CHECK_LIB([double-conversion],[ceil],[],[AC_MSG_ERROR( AC_CHECK_LIB([event], [event_set], [], [AC_MSG_ERROR([Unable to find libevent])]) FB_CHECK_PKG_CONFIG([EVENT], [libevent]) -AC_CHECK_LIB([jemalloc], [xallocx]) +AC_ARG_WITH([jemalloc], [ + --with-jemalloc Whether to make folly jemalloc aware +],[ + AC_CHECK_LIB([jemalloc], [xallocx],[ + AC_DEFINE([USE_JEMALLOC], [1], [Enable jemalloc]) + ],[ + AC_MSG_ERROR([--with-jemalloc requested, but jemalloc not found]) + ]) +]) # Checks for typedefs, structures, and compiler characteristics. AC_HEADER_STDBOOL diff --git a/folly/portability/Malloc.cpp b/folly/portability/Malloc.cpp index 9baecb38..d9bdf989 100755 --- a/folly/portability/Malloc.cpp +++ b/folly/portability/Malloc.cpp @@ -16,7 +16,7 @@ #include -#ifndef USE_JEMALLOC +#if !defined(USE_JEMALLOC) && !defined(FOLLY_USE_JEMALLOC) #if defined(__APPLE__) && !defined(FOLLY_HAVE_MALLOC_USABLE_SIZE) #include diff --git a/folly/portability/Malloc.h b/folly/portability/Malloc.h index 32c1ab33..cbf54e24 100755 --- a/folly/portability/Malloc.h +++ b/folly/portability/Malloc.h @@ -16,9 +16,10 @@ #pragma once +#include #include -#ifdef USE_JEMALLOC +#if defined(USE_JEMALLOC) || defined(FOLLY_USE_JEMALLOC) // JEMalloc provides it's own implementation of // malloc_usable_size, and that's what we should be using. #include @@ -27,8 +28,6 @@ #include #endif -#include - #if defined(__APPLE__) && !defined(FOLLY_HAVE_MALLOC_USABLE_SIZE) // MacOS doesn't have malloc_usable_size() extern "C" size_t malloc_usable_size(void* ptr);