You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by we...@apache.org on 2017/01/10 18:23:33 UTC

arrow git commit: ARROW-466: Add ExternalProject for jemalloc

Repository: arrow
Updated Branches:
  refs/heads/master f44b6a3b9 -> 8d917c1f9


ARROW-466: Add ExternalProject for jemalloc

Author: Uwe L. Korn <uw...@xhochy.com>

Closes #276 from xhochy/ARROW-466 and squashes the following commits:

9379c45 [Uwe L. Korn] Revert "Enable jemalloc on Windows"
6fd8da8 [Uwe L. Korn] Enable jemalloc on Windows
0e1082f [Uwe L. Korn] ARROW-466: Add ExternalProject for jemalloc


Project: http://git-wip-us.apache.org/repos/asf/arrow/repo
Commit: http://git-wip-us.apache.org/repos/asf/arrow/commit/8d917c1f
Tree: http://git-wip-us.apache.org/repos/asf/arrow/tree/8d917c1f
Diff: http://git-wip-us.apache.org/repos/asf/arrow/diff/8d917c1f

Branch: refs/heads/master
Commit: 8d917c1f925c76e9009f6d1b9792551293a572fe
Parents: f44b6a3
Author: Uwe L. Korn <uw...@xhochy.com>
Authored: Tue Jan 10 13:23:26 2017 -0500
Committer: Wes McKinney <we...@twosigma.com>
Committed: Tue Jan 10 13:23:26 2017 -0500

----------------------------------------------------------------------
 cpp/CMakeLists.txt                    | 37 ++++++++++++++++++++++++++++--
 cpp/cmake_modules/Findjemalloc.cmake  |  5 ++++
 cpp/src/arrow/jemalloc/CMakeLists.txt | 12 +++++++---
 3 files changed, 49 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/arrow/blob/8d917c1f/cpp/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt
index 87b7841..8a2cfc5 100644
--- a/cpp/CMakeLists.txt
+++ b/cpp/CMakeLists.txt
@@ -30,6 +30,7 @@ set(GFLAGS_VERSION "2.1.2")
 set(GTEST_VERSION "1.7.0")
 set(GBENCHMARK_VERSION "1.1.0")
 set(FLATBUFFERS_VERSION "1.3.0")
+set(JEMALLOC_VERSION "4.4.0")
 
 find_package(ClangTools)
 if ("$ENV{CMAKE_EXPORT_COMPILE_COMMANDS}" STREQUAL "1" OR CLANG_TIDY_FOUND)
@@ -76,7 +77,7 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
 
   option(ARROW_JEMALLOC
     "Build the Arrow jemalloc-based allocator"
-    OFF)
+    ON)
 
   option(ARROW_BOOST_USE_SHARED
     "Rely on boost shared libraries where relevant"
@@ -594,11 +595,43 @@ message(STATUS "RapidJSON include dir: ${RAPIDJSON_INCLUDE_DIR}")
 include_directories(SYSTEM ${RAPIDJSON_INCLUDE_DIR})
 
 if (ARROW_JEMALLOC)
-  find_package(jemalloc REQUIRED)
+  find_package(jemalloc)
+
+  if(NOT JEMALLOC_FOUND)
+    set(JEMALLOC_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/jemalloc_ep-prefix/src/jemalloc_ep")
+    set(JEMALLOC_HOME "${JEMALLOC_PREFIX}")
+    set(JEMALLOC_INCLUDE_DIR "${JEMALLOC_PREFIX}/include")
+    set(JEMALLOC_SHARED_LIB "${JEMALLOC_PREFIX}/lib/libjemalloc${CMAKE_SHARED_LIBRARY_SUFFIX}")
+    set(JEMALLOC_STATIC_LIB "${JEMALLOC_PREFIX}/lib/libjemalloc_pic${CMAKE_STATIC_LIBRARY_SUFFIX}")
+    set(JEMALLOC_VENDORED 1)
+    if (CMAKE_VERSION VERSION_GREATER "3.2")
+      # BUILD_BYPRODUCTS is a 3.2+ feature
+      ExternalProject_Add(jemalloc_ep
+        URL https://github.com/jemalloc/jemalloc/releases/download/${JEMALLOC_VERSION}/jemalloc-${JEMALLOC_VERSION}.tar.bz2
+        CONFIGURE_COMMAND ./configure "--prefix=${JEMALLOC_PREFIX}" "--with-jemalloc-prefix="
+        BUILD_IN_SOURCE 1
+        BUILD_COMMAND ${MAKE}
+        BUILD_BYPRODUCTS "${JEMALLOC_STATIC_LIB}")
+    else()
+      ExternalProject_Add(jemalloc_ep
+        URL https://github.com/jemalloc/jemalloc/releases/download/${JEMALLOC_VERSION}/jemalloc-${JEMALLOC_VERSION}.tar.bz2
+        CONFIGURE_COMMAND ./configure "--prefix=${JEMALLOC_PREFIX}" "--with-jemalloc-prefix="
+        BUILD_IN_SOURCE 1
+        BUILD_COMMAND ${MAKE})
+    endif()
+  else()
+    set(JEMALLOC_VENDORED 0)
+  endif()
 
   include_directories(SYSTEM ${JEMALLOC_INCLUDE_DIR})
   ADD_THIRDPARTY_LIB(jemalloc
+      STATIC_LIB ${JEMALLOC_STATIC_LIB}
       SHARED_LIB ${JEMALLOC_SHARED_LIB})
+
+  if (JEMALLOC_VENDORED)
+    add_dependencies(jemalloc_shared jemalloc_ep)
+    add_dependencies(jemalloc_static jemalloc_ep)
+  endif()
 endif()
 
 ## Google PerfTools

http://git-wip-us.apache.org/repos/asf/arrow/blob/8d917c1f/cpp/cmake_modules/Findjemalloc.cmake
----------------------------------------------------------------------
diff --git a/cpp/cmake_modules/Findjemalloc.cmake b/cpp/cmake_modules/Findjemalloc.cmake
index e7fbb94..e511d4d 100644
--- a/cpp/cmake_modules/Findjemalloc.cmake
+++ b/cpp/cmake_modules/Findjemalloc.cmake
@@ -47,11 +47,16 @@ if ( _jemalloc_roots )
     find_library( JEMALLOC_SHARED_LIB NAMES ${LIBJEMALLOC_NAMES}
         PATHS ${_jemalloc_roots} NO_DEFAULT_PATH
         PATH_SUFFIXES "lib" )
+    find_library( JEMALLOC_STATIC_LIB NAMES jemalloc_pic
+        PATHS ${_jemalloc_roots} NO_DEFAULT_PATH
+        PATH_SUFFIXES "lib" )
 else ()
     find_path( JEMALLOC_INCLUDE_DIR NAMES jemalloc/jemalloc.h )
     message(STATUS ${JEMALLOC_INCLUDE_DIR})
     find_library( JEMALLOC_SHARED_LIB NAMES ${LIBJEMALLOC_NAMES})
     message(STATUS ${JEMALLOC_SHARED_LIB})
+    find_library( JEMALLOC_STATIC_LIB NAMES jemalloc_pic)
+    message(STATUS ${JEMALLOC_STATIC_LIB})
 endif ()
 
 if (JEMALLOC_INCLUDE_DIR AND JEMALLOC_SHARED_LIB)

http://git-wip-us.apache.org/repos/asf/arrow/blob/8d917c1f/cpp/src/arrow/jemalloc/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/jemalloc/CMakeLists.txt b/cpp/src/arrow/jemalloc/CMakeLists.txt
index c6663eb..c0f90eb 100644
--- a/cpp/src/arrow/jemalloc/CMakeLists.txt
+++ b/cpp/src/arrow/jemalloc/CMakeLists.txt
@@ -23,18 +23,24 @@ include_directories(SYSTEM "{JEMALLOC_INCLUDE_DIR}")
 # arrow_jemalloc library
 set(ARROW_JEMALLOC_STATIC_LINK_LIBS
   arrow_static
-  jemalloc
+  jemalloc_static
 )
+
+if (NOT APPLE)
+  set(ARROW_JEMALLOC_STATIC_LINK_LIBS ${ARROW_JEMALLOC_STATIC_LINK_LIBS} pthread)
+endif()
+
 set(ARROW_JEMALLOC_SHARED_LINK_LIBS
   arrow_shared
-  jemalloc
+  jemalloc_shared
 )
 
 if (ARROW_BUILD_STATIC)
   set(ARROW_JEMALLOC_TEST_LINK_LIBS
+    ${ARROW_JEMALLOC_STATIC_LINK_LIBS}
     arrow_jemalloc_static)
 else()
-  set(ARROW_jemalloc_TEST_LINK_LIBS
+  set(ARROW_JEMALLOC_TEST_LINK_LIBS
     arrow_jemalloc_shared)
 endif()