diff --git a/.bzrignore b/.bzrignore index 75dde627795..67aa9e426cf 100644 --- a/.bzrignore +++ b/.bzrignore @@ -1148,3 +1148,5 @@ typescript mysql-test/collections/default.release.done sql/sql_yacc.hh packaging/solaris/postinstall-solaris +extra/jemalloc/jemalloc-* +extra/jemalloc/build diff --git a/CMakeLists.txt b/CMakeLists.txt index 40062957372..9b8c9defeb7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -144,6 +144,7 @@ INCLUDE(ssl) INCLUDE(readline) INCLUDE(libutils) INCLUDE(dtrace) +INCLUDE(jemalloc) INCLUDE(ctest) INCLUDE(plugin) INCLUDE(install_macros) @@ -263,6 +264,8 @@ MYSQL_CHECK_SSL() # Add readline or libedit. MYSQL_CHECK_READLINE() +CHECK_JEMALLOC() + # # Setup maintainer mode options by the end. Platform checks are # not run with the warning options as to not perturb fragile checks diff --git a/cmake/jemalloc.cmake b/cmake/jemalloc.cmake new file mode 100644 index 00000000000..590ca82655b --- /dev/null +++ b/cmake/jemalloc.cmake @@ -0,0 +1,33 @@ +INCLUDE(ExternalProject) + +MACRO (USE_BUNDLED_JEMALLOC) + SET(SOURCE_DIR "${CMAKE_SOURCE_DIR}/extra/jemalloc") + SET(BINARY_DIR "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/extra/jemalloc/build") + SET(LIBJEMALLOC "${BINARY_DIR}/lib/libjemalloc_pic.a") + SET(JEMALLOC_CONFIGURE_OPTS "CC=${CMAKE_C_COMPILER}" "--with-private-namespace=jemalloc_internal_" "--enable-cc-silence") + IF (CMAKE_BUILD_TYPE MATCHES "Debug" AND NOT APPLE) # see the comment in CMakeLists.txt + LIST(APPEND JEMALLOC_CONFIGURE_OPTS --enable-debug) + ENDIF() + ExternalProject_Add(jemalloc + PREFIX extra/jemalloc + SOURCE_DIR ${SOURCE_DIR} + BINARY_DIR ${BINARY_DIR} + STAMP_DIR ${SOURCE_DIR} + CONFIGURE_COMMAND "${SOURCE_DIR}/configure" ${JEMALLOC_CONFIGURE_OPTS} + BUILD_COMMAND ${CMAKE_MAKE_PROGRAM} "build_lib_static" + INSTALL_COMMAND "" + ) + ADD_LIBRARY(libjemalloc STATIC IMPORTED) + SET_TARGET_PROPERTIES(libjemalloc PROPERTIES IMPORTED_LOCATION ${LIBJEMALLOC}) + ADD_DEPENDENCIES(libjemalloc jemalloc) +ENDMACRO() + +SET(WITH_JEMALLOC "yes" CACHE STRING + "Which jemalloc to use (possible values are 'no', 'bundled', 'yes' (same as bundled)") +#"Which jemalloc to use (possible values are 'no', 'bundled', 'system', 'yes' (system if possible, otherwise bundled)") + +MACRO (CHECK_JEMALLOC) + IF(WITH_JEMALLOC STREQUAL "bundled" OR WITH_JEMALLOC STREQUAL "yes") + USE_BUNDLED_JEMALLOC() + ENDIF() +ENDMACRO() diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 347cb097fc0..5e71b49a4d8 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -103,7 +103,7 @@ ADD_DEPENDENCIES(sql GenServerSource) DTRACE_INSTRUMENT(sql) TARGET_LINK_LIBRARIES(sql ${MYSQLD_STATIC_PLUGIN_LIBS} mysys dbug strings vio regex - ${LIBWRAP} ${LIBCRYPT} ${LIBDL} + ${LIBWRAP} ${LIBCRYPT} ${LIBDL} ${LIBJEMALLOC} ${CMAKE_THREAD_LIBS_INIT} ${SSL_LIBRARIES}) IF(WIN32)