diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2015-04-30 10:46:01 -0400 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2015-04-30 10:46:01 -0400 |
commit | b427dcdda286603a06ed29b45f1090894e92074a (patch) | |
tree | 734a0759fe9f1561a86f074396ec90d6f8011562 | |
parent | 45b617afada9304cb265aad02645b22d76dfc2d5 (diff) | |
parent | 8130eb1191aece52d8b2790302abf1bd09aaf90f (diff) | |
download | rneovim-b427dcdda286603a06ed29b45f1090894e92074a.tar.gz rneovim-b427dcdda286603a06ed29b45f1090894e92074a.tar.bz2 rneovim-b427dcdda286603a06ed29b45f1090894e92074a.zip |
Merge pull request #2465 from fwalch/fix-jemalloc
Force je_ prefix for jemalloc functions, small CMake fixes.
-rw-r--r-- | CMakeLists.txt | 21 | ||||
-rw-r--r-- | cmake/FindJeMalloc.cmake | 1 | ||||
-rw-r--r-- | cmake/FindLibTermkey.cmake | 1 | ||||
-rw-r--r-- | cmake/FindLibUnibilium.cmake | 48 | ||||
-rw-r--r-- | cmake/FindLibVterm.cmake | 1 | ||||
-rw-r--r-- | cmake/FindLuaJit.cmake | 1 | ||||
-rw-r--r-- | cmake/FindMsgpack.cmake | 1 | ||||
-rw-r--r-- | cmake/FindUnibilium.cmake | 47 | ||||
-rw-r--r-- | config/CMakeLists.txt | 4 | ||||
-rw-r--r-- | config/config.h.in | 5 | ||||
-rw-r--r-- | src/nvim/CMakeLists.txt | 6 | ||||
-rw-r--r-- | src/nvim/memory.c | 18 | ||||
-rw-r--r-- | src/nvim/version.c | 20 | ||||
-rw-r--r-- | third-party/CMakeLists.txt | 9 | ||||
-rw-r--r-- | third-party/cmake/BuildJeMalloc.cmake | 4 | ||||
-rw-r--r-- | third-party/cmake/BuildMsgpack.cmake | 4 | ||||
-rw-r--r-- | third-party/cmake/InstallMsgpack.cmake | 12 | ||||
-rw-r--r-- | third-party/cmake/RemoveFiles.cmake | 5 |
18 files changed, 100 insertions, 108 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 2879b57061..5e176a540d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -190,38 +190,25 @@ include_directories(SYSTEM ${MSGPACK_INCLUDE_DIRS}) find_package(LuaJit REQUIRED) include_directories(SYSTEM ${LUAJIT_INCLUDE_DIRS}) -option(LIBUNIBILIUM_USE_STATIC "Use static libunibilium" ON) -find_package(LibUnibilium REQUIRED) -include_directories(SYSTEM ${LIBUNIBILIUM_INCLUDE_DIRS}) +find_package(Unibilium REQUIRED) +include_directories(SYSTEM ${UNIBILIUM_INCLUDE_DIRS}) -option(LIBTERMKEY_USE_STATIC "Use static libtermkey" ON) find_package(LibTermkey REQUIRED) include_directories(SYSTEM ${LIBTERMKEY_INCLUDE_DIRS}) -option(LIBVTERM_USE_STATIC "Use static libvterm" ON) find_package(LibVterm REQUIRED) include_directories(SYSTEM ${LIBVTERM_INCLUDE_DIRS}) option(SANITIZE "Enable Clang sanitizers for nvim binary" OFF) if(SANITIZE AND NOT CMAKE_C_COMPILER_ID MATCHES "Clang") - message(WARNING "SANITIZE is only supported for Clang ... disabling") + message(WARNING "SANITIZE is only supported for Clang, disabling") set(SANITIZE OFF) endif() -if(SANITIZE) - option(USE_JEMALLOC "Use jemalloc" OFF) -else() - option(USE_JEMALLOC "Use jemalloc" ON) -endif() - -if(USE_JEMALLOC) - option(JEMALLOC_USE_STATIC "Use static jemalloc" ON) +if(NOT SANITIZE) find_package(JeMalloc) if(JEMALLOC_FOUND) - message(STATUS "Using jemalloc instead of libc allocator") include_directories(SYSTEM ${JEMALLOC_INCLUDE_DIRS}) - else() - set(USE_JEMALLOC OFF) endif() endif() diff --git a/cmake/FindJeMalloc.cmake b/cmake/FindJeMalloc.cmake index fd20a456fb..f36cbc6f7a 100644 --- a/cmake/FindJeMalloc.cmake +++ b/cmake/FindJeMalloc.cmake @@ -4,7 +4,6 @@ # JEMALLOC_INCLUDE_DIRS - The jemalloc include directories # JEMALLOC_LIBRARIES - The libraries needed to use jemalloc -find_package(PkgConfig) if(NOT JEMALLOC_USE_BUNDLED) find_package(PkgConfig) if (PKG_CONFIG_FOUND) diff --git a/cmake/FindLibTermkey.cmake b/cmake/FindLibTermkey.cmake index e5ec132f85..144deceaae 100644 --- a/cmake/FindLibTermkey.cmake +++ b/cmake/FindLibTermkey.cmake @@ -4,7 +4,6 @@ # LIBTERMKEY_INCLUDE_DIRS - The libtermkey include directories # LIBTERMKEY_LIBRARIES - The libraries needed to use libtermkey -find_package(PkgConfig) if(NOT LIBTERMKEY_USE_BUNDLED) find_package(PkgConfig) if (PKG_CONFIG_FOUND) diff --git a/cmake/FindLibUnibilium.cmake b/cmake/FindLibUnibilium.cmake deleted file mode 100644 index 6aafd07c90..0000000000 --- a/cmake/FindLibUnibilium.cmake +++ /dev/null @@ -1,48 +0,0 @@ -# - Try to find libunibilium -# Once done this will define -# LIBUNIBILIUM_FOUND - System has libunibilium -# LIBUNIBILIUM_INCLUDE_DIRS - The libunibilium include directories -# LIBUNIBILIUM_LIBRARIES - The libraries needed to use libunibilium - -find_package(PkgConfig) -if(NOT LIBUNIBILIUM_USE_BUNDLED) - find_package(PkgConfig) - if (PKG_CONFIG_FOUND) - pkg_check_modules(PC_LIBUNIBILIUM QUIET unibilium) - endif() -else() - set(PC_LIBUNIBILIUM_INCLUDEDIR) - set(PC_LIBUNIBILIUM_INCLUDE_DIRS) - set(PC_LIBUNIBILIUM_LIBDIR) - set(PC_LIBUNIBILIUM_LIBRARY_DIRS) - set(LIMIT_SEARCH NO_DEFAULT_PATH) -endif() - -set(LIBUNIBILIUM_DEFINITIONS ${PC_LIBUNIBILIUM_CFLAGS_OTHER}) - -find_path(LIBUNIBILIUM_INCLUDE_DIR unibilium.h - PATHS ${PC_LIBUNIBILIUM_INCLUDEDIR} ${PC_LIBUNIBILIUM_INCLUDE_DIRS} - ${LIMIT_SEARCH}) - -# If we're asked to use static linkage, add libuv.a as a preferred library name. -if(LIBUNIBILIUM_USE_STATIC) - list(APPEND LIBUNIBILIUM_NAMES - "${CMAKE_STATIC_LIBRARY_PREFIX}unibilium${CMAKE_STATIC_LIBRARY_SUFFIX}") -endif() - -list(APPEND LIBUNIBILIUM_NAMES unibilium) - -find_library(LIBUNIBILIUM_LIBRARY NAMES ${LIBUNIBILIUM_NAMES} - HINTS ${PC_LIBUNIBILIUM_LIBDIR} ${PC_LIBUNIBILIUM_LIBRARY_DIRS} - ${LIMIT_SEARCH}) - -set(LIBUNIBILIUM_LIBRARIES ${LIBUNIBILIUM_LIBRARY}) -set(LIBUNIBILIUM_INCLUDE_DIRS ${LIBUNIBILIUM_INCLUDE_DIR}) - -include(FindPackageHandleStandardArgs) -# handle the QUIETLY and REQUIRED arguments and set LIBUNIBILIUM_FOUND to TRUE -# if all listed variables are TRUE -find_package_handle_standard_args(LibUnibilium DEFAULT_MSG - LIBUNIBILIUM_LIBRARY LIBUNIBILIUM_INCLUDE_DIR) - -mark_as_advanced(LIBUNIBILIUM_INCLUDE_DIR LIBUNIBILIUM_LIBRARY) diff --git a/cmake/FindLibVterm.cmake b/cmake/FindLibVterm.cmake index 21a0928496..0d773d8896 100644 --- a/cmake/FindLibVterm.cmake +++ b/cmake/FindLibVterm.cmake @@ -4,7 +4,6 @@ # LIBVTERM_INCLUDE_DIRS - The libvterm include directories # LIBVTERM_LIBRARIES - The libraries needed to use libvterm -find_package(PkgConfig) if(NOT LIBVTERM_USE_BUNDLED) find_package(PkgConfig) if (PKG_CONFIG_FOUND) diff --git a/cmake/FindLuaJit.cmake b/cmake/FindLuaJit.cmake index e5fdc764f1..9b24051bd7 100644 --- a/cmake/FindLuaJit.cmake +++ b/cmake/FindLuaJit.cmake @@ -4,7 +4,6 @@ # LUAJIT_INCLUDE_DIRS - The luajit include directories # LUAJIT_LIBRARIES - The libraries needed to use luajit -find_package(PkgConfig) if(NOT LUAJIT_USE_BUNDLED) find_package(PkgConfig) if (PKG_CONFIG_FOUND) diff --git a/cmake/FindMsgpack.cmake b/cmake/FindMsgpack.cmake index 6b3c8bb977..7d88137915 100644 --- a/cmake/FindMsgpack.cmake +++ b/cmake/FindMsgpack.cmake @@ -4,7 +4,6 @@ # MSGPACK_INCLUDE_DIRS - The msgpack include directories # MSGPACK_LIBRARIES - The libraries needed to use msgpack -find_package(PkgConfig) if(NOT MSGPACK_USE_BUNDLED) find_package(PkgConfig) if (PKG_CONFIG_FOUND) diff --git a/cmake/FindUnibilium.cmake b/cmake/FindUnibilium.cmake new file mode 100644 index 0000000000..e1e0de9b7e --- /dev/null +++ b/cmake/FindUnibilium.cmake @@ -0,0 +1,47 @@ +# - Try to find unibilium +# Once done this will define +# UNIBILIUM_FOUND - System has unibilium +# UNIBILIUM_INCLUDE_DIRS - The unibilium include directories +# UNIBILIUM_LIBRARIES - The libraries needed to use unibilium + +if(NOT UNIBILIUM_USE_BUNDLED) + find_package(PkgConfig) + if (PKG_CONFIG_FOUND) + pkg_check_modules(PC_UNIBILIUM QUIET unibilium) + endif() +else() + set(PC_UNIBILIUM_INCLUDEDIR) + set(PC_UNIBILIUM_INCLUDE_DIRS) + set(PC_UNIBILIUM_LIBDIR) + set(PC_UNIBILIUM_LIBRARY_DIRS) + set(LIMIT_SEARCH NO_DEFAULT_PATH) +endif() + +set(UNIBILIUM_DEFINITIONS ${PC_UNIBILIUM_CFLAGS_OTHER}) + +find_path(UNIBILIUM_INCLUDE_DIR unibilium.h + PATHS ${PC_UNIBILIUM_INCLUDEDIR} ${PC_UNIBILIUM_INCLUDE_DIRS} + ${LIMIT_SEARCH}) + +# If we're asked to use static linkage, add libunibilium.a as a preferred library name. +if(UNIBILIUM_USE_STATIC) + list(APPEND UNIBILIUM_NAMES + "${CMAKE_STATIC_LIBRARY_PREFIX}unibilium${CMAKE_STATIC_LIBRARY_SUFFIX}") +endif() + +list(APPEND UNIBILIUM_NAMES unibilium) + +find_library(UNIBILIUM_LIBRARY NAMES ${UNIBILIUM_NAMES} + HINTS ${PC_UNIBILIUM_LIBDIR} ${PC_UNIBILIUM_LIBRARY_DIRS} + ${LIMIT_SEARCH}) + +set(UNIBILIUM_LIBRARIES ${UNIBILIUM_LIBRARY}) +set(UNIBILIUM_INCLUDE_DIRS ${UNIBILIUM_INCLUDE_DIR}) + +include(FindPackageHandleStandardArgs) +# handle the QUIETLY and REQUIRED arguments and set UNIBILIUM_FOUND to TRUE +# if all listed variables are TRUE +find_package_handle_standard_args(unibilium DEFAULT_MSG + UNIBILIUM_LIBRARY UNIBILIUM_INCLUDE_DIR) + +mark_as_advanced(UNIBILIUM_INCLUDE_DIR UNIBILIUM_LIBRARY) diff --git a/config/CMakeLists.txt b/config/CMakeLists.txt index ed1f422070..cdf31a8966 100644 --- a/config/CMakeLists.txt +++ b/config/CMakeLists.txt @@ -46,6 +46,10 @@ if(Iconv_FOUND) set(HAVE_ICONV 1) endif() +if(JEMALLOC_FOUND) + set(HAVE_JEMALLOC 1) +endif() + check_function_exists(lstat HAVE_LSTAT) if(NOT HAVE_LSTAT) # os_unix.c uses lstat.c diff --git a/config/config.h.in b/config/config.h.in index 9b2abfa19d..0419451e26 100644 --- a/config/config.h.in +++ b/config/config.h.in @@ -66,6 +66,9 @@ #define FEAT_BROWSE #define FEAT_CSCOPE #define FEAT_MOUSE -#cmakedefine USE_JEMALLOC + +#ifndef UNIT_TESTING +#cmakedefine HAVE_JEMALLOC +#endif #endif // AUTO_CONFIG_H diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt index 31612c7f47..810809ea17 100644 --- a/src/nvim/CMakeLists.txt +++ b/src/nvim/CMakeLists.txt @@ -163,7 +163,7 @@ list(APPEND NVIM_LINK_LIBRARIES ${LUAJIT_LIBRARIES} ${LIBVTERM_LIBRARIES} ${LIBTERMKEY_LIBRARIES} - ${LIBUNIBILIUM_LIBRARIES} + ${UNIBILIUM_LIBRARIES} m util ${CMAKE_THREAD_LIBS_INIT} @@ -171,8 +171,8 @@ list(APPEND NVIM_LINK_LIBRARIES set(NVIM_EXEC_LINK_LIBRARIES ${NVIM_LINK_LIBRARIES}) -if(USE_JEMALLOC) - # dont use jemalloc in the unit test library +# Don't use jemalloc in the unit test library. +if(JEMALLOC_FOUND) list(APPEND NVIM_EXEC_LINK_LIBRARIES ${JEMALLOC_LIBRARIES}) endif() diff --git a/src/nvim/memory.c b/src/nvim/memory.c index 2d4259a238..8628661a98 100644 --- a/src/nvim/memory.c +++ b/src/nvim/memory.c @@ -14,16 +14,18 @@ #include "nvim/misc1.h" #include "nvim/ui.h" -#ifdef INCLUDE_GENERATED_DECLARATIONS -# include "memory.c.generated.h" +#ifdef HAVE_JEMALLOC +// Force je_ prefix on jemalloc functions. +# define JEMALLOC_NO_DEMANGLE +# include <jemalloc/jemalloc.h> +# define malloc(size) je_malloc(size) +# define calloc(count, size) je_calloc(count, size) +# define realloc(ptr, size) je_realloc(ptr, size) +# define free(ptr) je_free(ptr) #endif -#if defined(USE_JEMALLOC) && !defined(UNIT_TESTING) -#include "jemalloc/jemalloc.h" -#define malloc(size) je_malloc(size) -#define calloc(count, size) je_calloc(count, size) -#define realloc(ptr, size) je_realloc(ptr, size) -#define free(ptr) je_free(ptr) +#ifdef INCLUDE_GENERATED_DECLARATIONS +# include "memory.c.generated.h" #endif /// Try to free memory. Used when trying to recover from out of memory errors. diff --git a/src/nvim/version.c b/src/nvim/version.c index 3ca0b254f4..4b4d28dcc2 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -47,21 +47,25 @@ char *version_cflags = "Compilation: " NVIM_VERSION_CFLAGS; static char *features[] = { #ifdef HAVE_ACL "+acl", -#else // ifdef HAVE_ACL +#else "-acl", -#endif // ifdef HAVE_ACL +#endif #if (defined(HAVE_ICONV_H) && defined(USE_ICONV)) || defined(DYNAMIC_ICONV) # ifdef DYNAMIC_ICONV "+iconv/dyn", -# else // ifdef DYNAMIC_ICONV +# else "+iconv", -# endif // ifdef DYNAMIC_ICONV -#else // if (defined(HAVE_ICONV_H) && defined(USE_ICONV)) - // ||defined(DYNAMIC_ICONV) +# endif +#else "-iconv", -#endif // if (defined(HAVE_ICONV_H) && defined(USE_ICONV)) - // || defined(DYNAMIC_ICONV) +#endif + +#ifdef HAVE_JEMALLOC + "+jemalloc", +#else + "-jemalloc", +#endif NULL }; diff --git a/third-party/CMakeLists.txt b/third-party/CMakeLists.txt index fde367bc72..ab36cb67c6 100644 --- a/third-party/CMakeLists.txt +++ b/third-party/CMakeLists.txt @@ -109,6 +109,13 @@ if(USE_BUNDLED_JEMALLOC) include(BuildJeMalloc) endif() +add_custom_target(clean-shared-libraries + COMMAND ${CMAKE_COMMAND} + -DREMOVE_FILE_GLOB=${DEPS_INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}*${CMAKE_SHARED_LIBRARY_SUFFIX}* + -P ${PROJECT_SOURCE_DIR}/cmake/RemoveFiles.cmake + DEPENDS ${THIRD_PARTY_DEPS} +) + add_custom_target(third-party ALL COMMAND ${CMAKE_COMMAND} -E touch .third-party - DEPENDS ${THIRD_PARTY_DEPS}) + DEPENDS clean-shared-libraries) diff --git a/third-party/cmake/BuildJeMalloc.cmake b/third-party/cmake/BuildJeMalloc.cmake index ceb7de41e9..c3a0d890fc 100644 --- a/third-party/cmake/BuildJeMalloc.cmake +++ b/third-party/cmake/BuildJeMalloc.cmake @@ -11,8 +11,8 @@ ExternalProject_Add(jemalloc -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake BUILD_IN_SOURCE 1 CONFIGURE_COMMAND sh ${DEPS_BUILD_DIR}/src/jemalloc/autogen.sh && - ${DEPS_BUILD_DIR}/src/jemalloc/configure --with-jemalloc-prefix=je_ - --enable-cc-silence CC=${DEPS_C_COMPILER} --prefix=${DEPS_INSTALL_DIR} + ${DEPS_BUILD_DIR}/src/jemalloc/configure --enable-cc-silence + CC=${DEPS_C_COMPILER} --prefix=${DEPS_INSTALL_DIR} BUILD_COMMAND "" INSTALL_COMMAND ${MAKE_PRG} install_include install_lib) diff --git a/third-party/cmake/BuildMsgpack.cmake b/third-party/cmake/BuildMsgpack.cmake index 9368fed71a..b9036718e6 100644 --- a/third-party/cmake/BuildMsgpack.cmake +++ b/third-party/cmake/BuildMsgpack.cmake @@ -17,8 +17,6 @@ ExternalProject_Add(msgpack -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_COMPILER_ARG1} -fPIC" BUILD_COMMAND ${CMAKE_COMMAND} --build . - INSTALL_COMMAND ${CMAKE_COMMAND} - -DREMOVE_FILE_GLOB=${DEPS_INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}msgpack*${CMAKE_SHARED_LIBRARY_SUFFIX}* - -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/InstallMsgpack.cmake) + INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install) list(APPEND THIRD_PARTY_DEPS msgpack) diff --git a/third-party/cmake/InstallMsgpack.cmake b/third-party/cmake/InstallMsgpack.cmake deleted file mode 100644 index 406f299723..0000000000 --- a/third-party/cmake/InstallMsgpack.cmake +++ /dev/null @@ -1,12 +0,0 @@ -execute_process( - COMMAND ${CMAKE_COMMAND} --build . --target install - RESULT_VARIABLE res) - -if(NOT res EQUAL 0) - message(FATAL_ERROR "Installing msgpack failed.") -endif() - -file(GLOB_RECURSE FILES_TO_REMOVE ${REMOVE_FILE_GLOB}) -if(FILES_TO_REMOVE) - file(REMOVE ${FILES_TO_REMOVE}) -endif() diff --git a/third-party/cmake/RemoveFiles.cmake b/third-party/cmake/RemoveFiles.cmake new file mode 100644 index 0000000000..88e2bc70a6 --- /dev/null +++ b/third-party/cmake/RemoveFiles.cmake @@ -0,0 +1,5 @@ +file(GLOB_RECURSE FILES_TO_REMOVE ${REMOVE_FILE_GLOB}) + +if(FILES_TO_REMOVE) + file(REMOVE ${FILES_TO_REMOVE}) +endif() |