Skip to content

Commit a6a42ad

Browse files
authored
chore: rewrite mimalloc2 external lib dependency (#5751)
Needed to be able to pass compile/define flags. Specifically, pass MI_STAT=1 to enable mimalloc stats aggregation. Signed-off-by: Roman Gershman <[email protected]>
1 parent e6ef677 commit a6a42ad

File tree

1 file changed

+51
-16
lines changed

1 file changed

+51
-16
lines changed

src/external_libs.cmake

Lines changed: 51 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -58,28 +58,63 @@ add_third_party(
5858
INSTALL_COMMAND ${DFLY_TOOLS_MAKE} install BUILD_SHARED=no PREFIX=${THIRD_PARTY_LIB_DIR}/lz4
5959
)
6060

61-
set(MIMALLOC_INCLUDE_DIR ${THIRD_PARTY_LIB_DIR}/mimalloc2/include)
62-
61+
set(MIMALLOC_ROOT_DIR ${THIRD_PARTY_LIB_DIR}/mimalloc2)
62+
set(MIMALLOC_INCLUDE_DIR ${MIMALLOC_ROOT_DIR}/include)
6363
set(MIMALLOC_PATCH_DIR ${CMAKE_CURRENT_LIST_DIR}/../patches/mimalloc-v2.2.4)
64-
65-
add_third_party(mimalloc2
66-
# GIT_REPOSITORY https://github.com/microsoft/mimalloc/
67-
# GIT_TAG v2.2.4
68-
URL https://github.com/microsoft/mimalloc/archive/refs/tags/v2.2.4.tar.gz
69-
PATCH_COMMAND
70-
patch -p1 -d ${THIRD_PARTY_DIR}/mimalloc2/ -i ${MIMALLOC_PATCH_DIR}/0_base.patch
71-
COMMAND patch -p1 -d ${THIRD_PARTY_DIR}/mimalloc2/ -i ${MIMALLOC_PATCH_DIR}/1_add_stat_type.patch
72-
COMMAND patch -p1 -d ${THIRD_PARTY_DIR}/mimalloc2/ -i ${MIMALLOC_PATCH_DIR}/2_return_stat.patch
73-
# Add -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS=-O0 to debug
74-
CMAKE_PASS_FLAGS "-DCMAKE_BUILD_TYPE=Release -DMI_BUILD_SHARED=OFF -DMI_BUILD_TESTS=OFF \
75-
-DMI_INSTALL_TOPLEVEL=ON -DMI_OVERRIDE=OFF -DMI_NO_PADDING=ON \ -DCMAKE_C_FLAGS=-g"
76-
64+
set(MIMALLOC_C_FLAGS "-O3 -g -DMI_STAT=1 -DNDEBUG")
65+
file(MAKE_DIRECTORY ${MIMALLOC_INCLUDE_DIR})
66+
67+
ExternalProject_Add(mimalloc2_project
68+
URL https://github.com/microsoft/mimalloc/archive/refs/tags/v2.2.4.tar.gz
69+
DOWNLOAD_DIR ${THIRD_PARTY_DIR}/mimalloc2
70+
SOURCE_DIR ${THIRD_PARTY_DIR}/mimalloc2
71+
# INSTALL_DIR ${MIMALLOC_ROOT_DIR}
72+
UPDATE_COMMAND ""
73+
74+
PATCH_COMMAND
75+
patch -p1 -d ${THIRD_PARTY_DIR}/mimalloc2/ -i ${MIMALLOC_PATCH_DIR}/0_base.patch
76+
COMMAND patch -p1 -d ${THIRD_PARTY_DIR}/mimalloc2/ -i ${MIMALLOC_PATCH_DIR}/1_add_stat_type.patch
77+
COMMAND patch -p1 -d ${THIRD_PARTY_DIR}/mimalloc2/ -i ${MIMALLOC_PATCH_DIR}/2_return_stat.patch
7778
BUILD_COMMAND make mimalloc-static
79+
7880
INSTALL_COMMAND make install
81+
# Copy internal types like mi_page_usage_stats_s and mi_heap_s
7982
COMMAND cp -r <SOURCE_DIR>/include/mimalloc ${MIMALLOC_INCLUDE_DIR}/
80-
LIB ${HELIO_MIMALLOC_LIBNAME}
83+
84+
LOG_INSTALL ON
85+
LOG_DOWNLOAD ON
86+
LOG_CONFIGURE ON
87+
LOG_BUILD ON
88+
LOG_PATCH ON
89+
LOG_UPDATE ON
90+
DOWNLOAD_EXTRACT_TIMESTAMP YES
91+
92+
CMAKE_GENERATOR "Unix Makefiles"
93+
94+
# Add -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS=-O0 to debug, and set BUILD_BYPRODUCTS to
95+
# libmimalloc-debug.a
96+
97+
BUILD_BYPRODUCTS ${MIMALLOC_ROOT_DIR}/lib/libmimalloc.a
98+
99+
CMAKE_ARGS -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${MIMALLOC_ROOT_DIR}/lib
100+
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${MIMALLOC_ROOT_DIR}/lib
101+
-DCMAKE_BUILD_TYPE:STRING=Release
102+
-DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER}
103+
-DMI_INSTALL_TOPLEVEL=ON
104+
-DMI_OVERRIDE=OFF
105+
-DMI_NO_PADDING=ON
106+
-DMI_BUILD_TESTS=OFF
107+
-DMI_BUILD_SHARED=OFF
108+
-DMI_BUILD_OBJECT=OFF
109+
-DCMAKE_C_FLAGS=${MIMALLOC_C_FLAGS}
110+
-DCMAKE_INSTALL_PREFIX:PATH=${MIMALLOC_ROOT_DIR}
81111
)
82112

113+
add_library(TRDP::mimalloc2 STATIC IMPORTED)
114+
add_dependencies(TRDP::mimalloc2 mimalloc2_project)
115+
set_target_properties(TRDP::mimalloc2 PROPERTIES IMPORTED_LOCATION ${MIMALLOC_ROOT_DIR}/lib/libmimalloc.a
116+
INTERFACE_INCLUDE_DIRECTORIES ${MIMALLOC_ROOT_DIR}/include)
117+
83118
add_third_party(
84119
croncpp
85120
URL https://github.com/mariusbancila/croncpp/archive/refs/tags/v2023.03.30.tar.gz

0 commit comments

Comments
 (0)