Skip to content

Commit

Permalink
scons: Tell the compiler to avoid internal malloc when using tcmalloc
Browse files Browse the repository at this point in the history
According to the tcmalloc readme, the recommended way of compiling
applications that make use of tcmalloc is to disable some
optimizations in gcc that make assumptions about malloc et al. This
changeset adds the necessary compiler flags for both gcc and
clang.

From the tcmalloc readme:
"NOTE: When compiling with programs with gcc, that you plan to link
with libtcmalloc, it's safest to pass in the flags

 -fno-builtin-malloc -fno-builtin-calloc
 -fno-builtin-realloc -fno-builtin-free

when compiling."
  • Loading branch information
andysan committed Mar 15, 2013
1 parent b33342c commit 311f63d
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion SConstruct
Original file line number Diff line number Diff line change
Expand Up @@ -505,6 +505,12 @@ Export('MakeAction')
main['LTO_CCFLAGS'] = []
main['LTO_LDFLAGS'] = []

# The tcmalloc works best if the compiler doesn't assume that we're
# using the builtin malloc and friends. These flags are
# compiler-specific, so we need to set them after we detect which
# compiler we're using.
main['TCMALLOC_CCFLAGS'] = []

CXX_version = readCommand([main['CXX'],'--version'], exception=False)
CXX_V = readCommand([main['CXX'],'-V'], exception=False)

Expand Down Expand Up @@ -581,6 +587,9 @@ if main['GCC']:
main['LTO_LDFLAGS'] = ['-flto=%d' % GetOption('num_jobs'),
'-fuse-linker-plugin']

main.Append(TCMALLOC_CCFLAGS=['-fno-builtin-malloc', '-fno-builtin-calloc',
'-fno-builtin-realloc', '-fno-builtin-free'])

elif main['CLANG']:
# Check for a supported version of clang, >= 2.9 is needed to
# support similar features as gcc 4.4. See
Expand All @@ -607,6 +616,8 @@ elif main['CLANG']:
'-Wno-parentheses',
'-Wno-self-assign'])

main.Append(TCMALLOC_CCFLAGS=['-fno-builtin'])

# On Mac OS X/Darwin we need to also use libc++ (part of XCode) as
# opposed to libstdc++ to make the transition from TR1 to
# C++11. See http://libcxx.llvm.org. However, clang has chosen a
Expand Down Expand Up @@ -911,7 +922,9 @@ have_posix_clock = \
conf.CheckLibWithHeader('rt', 'time.h', 'C',
'clock_nanosleep(0,0,NULL,NULL);')

if not conf.CheckLib('tcmalloc_minimal'):
if conf.CheckLib('tcmalloc_minimal'):
main.Append(CCFLAGS=main['TCMALLOC_CCFLAGS'])
else:
print termcap.Yellow + termcap.Bold + \
"You can get a 12% performance improvement by installing tcmalloc "\
"(libgoogle-perftools-dev package on Ubuntu or RedHat)." + \
Expand Down

0 comments on commit 311f63d

Please sign in to comment.