summaryrefslogtreecommitdiffstats
path: root/CMakeScripts
diff options
context:
space:
mode:
authorchr[] <chris@deviu.lan>2017-06-30 13:08:14 +0000
committerchr[] <chris@deviu.lan>2017-06-30 13:08:14 +0000
commitd6f2d85a424751ac9dd468949a950ecc46148ff2 (patch)
tree9271dbfa67fd4c84e78439c1a7ad883c7e2ac4eb /CMakeScripts
parentReplace ImageMagic with GraphicsMagic (diff)
downloadinkscape-d6f2d85a424751ac9dd468949a950ecc46148ff2.tar.gz
inkscape-d6f2d85a424751ac9dd468949a950ecc46148ff2.zip
jemalloc cmake module
(shamelessly stolen from Blender) libstdc++ memory allocator is broken: "Notes about deallocation. This allocator does not explicitly release memory." The story: https://www.zerotier.com/blog/2017-05-05-theleak.shtml The solution?! http://jemalloc.net/ No need to recompile, just install it and a simple test run: LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.1 inkscape
Diffstat (limited to 'CMakeScripts')
-rw-r--r--CMakeScripts/DefineDependsandFlags.cmake5
-rw-r--r--CMakeScripts/Modules/FindJeMalloc.cmake70
2 files changed, 75 insertions, 0 deletions
diff --git a/CMakeScripts/DefineDependsandFlags.cmake b/CMakeScripts/DefineDependsandFlags.cmake
index 981598527..0a8782f27 100644
--- a/CMakeScripts/DefineDependsandFlags.cmake
+++ b/CMakeScripts/DefineDependsandFlags.cmake
@@ -67,6 +67,11 @@ if(WITH_GNOME_VFS)
endif()
endif()
+find_package(JeMalloc)
+if (JEMALLOC_FOUND)
+ list(APPEND INKSCAPE_LIBS ${JEMALLOC_LIBRARIES})
+endif()
+
if(ENABLE_LCMS)
unset(HAVE_LIBLCMS1)
unset(HAVE_LIBLCMS2)
diff --git a/CMakeScripts/Modules/FindJeMalloc.cmake b/CMakeScripts/Modules/FindJeMalloc.cmake
new file mode 100644
index 000000000..5c7aa2cf1
--- /dev/null
+++ b/CMakeScripts/Modules/FindJeMalloc.cmake
@@ -0,0 +1,70 @@
+# - Find JeMalloc library
+# Find the native JeMalloc includes and library
+# This module defines
+# JEMALLOC_INCLUDE_DIRS, where to find jemalloc.h, Set when
+# JEMALLOC_INCLUDE_DIR is found.
+# JEMALLOC_LIBRARIES, libraries to link against to use JeMalloc.
+# JEMALLOC_ROOT_DIR, The base directory to search for JeMalloc.
+# This can also be an environment variable.
+# JEMALLOC_FOUND, If false, do not try to use JeMalloc.
+#
+# also defined, but not for general use are
+# JEMALLOC_LIBRARY, where to find the JeMalloc library.
+
+#=============================================================================
+# Copyright 2011 Blender Foundation.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+
+# If JEMALLOC_ROOT_DIR was defined in the environment, use it.
+IF(NOT JEMALLOC_ROOT_DIR AND NOT $ENV{JEMALLOC_ROOT_DIR} STREQUAL "")
+ SET(JEMALLOC_ROOT_DIR $ENV{JEMALLOC_ROOT_DIR})
+ENDIF()
+
+SET(_jemalloc_SEARCH_DIRS
+ ${JEMALLOC_ROOT_DIR}
+ /usr/local
+ /sw # Fink
+ /opt/local # DarwinPorts
+ /opt/csw # Blastwave
+)
+
+FIND_PATH(JEMALLOC_INCLUDE_DIR
+ NAMES
+ jemalloc.h
+ HINTS
+ ${_jemalloc_SEARCH_DIRS}
+ PATH_SUFFIXES
+ include/jemalloc
+)
+
+FIND_LIBRARY(JEMALLOC_LIBRARY
+ NAMES
+ jemalloc
+ HINTS
+ ${_jemalloc_SEARCH_DIRS}
+ PATH_SUFFIXES
+ lib64 lib
+ )
+
+# handle the QUIETLY and REQUIRED arguments and set JEMALLOC_FOUND to TRUE if
+# all listed variables are TRUE
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(JeMalloc DEFAULT_MSG
+ JEMALLOC_LIBRARY JEMALLOC_INCLUDE_DIR)
+
+IF(JEMALLOC_FOUND)
+ SET(JEMALLOC_LIBRARIES ${JEMALLOC_LIBRARY})
+ SET(JEMALLOC_INCLUDE_DIRS ${JEMALLOC_INCLUDE_DIR})
+ENDIF(JEMALLOC_FOUND)
+
+MARK_AS_ADVANCED(
+ JEMALLOC_INCLUDE_DIR
+ JEMALLOC_LIBRARY
+)