зеркало из https://github.com/microsoft/git.git
mimalloc: offer a build-time option to enable it
By defining `USE_MIMALLOC`, Git can now be compiled with that nicely-fast and small allocator. Note that we have to disable a couple `DEVELOPER` options to build mimalloc's source code, as it makes heavy use of declarations after statements, among other things that disagree with Git's conventions. We even have to silence some GCC warnings in non-DEVELOPER mode. For example, the `-Wno-array-bounds` flag is needed because in `-O2` builds, trying to call `NtCurrentTeb()` (which `_mi_thread_id()` does on Windows) causes the bogus warning about a system header, likely related to https://sourceforge.net/p/mingw-w64/mailman/message/37674519/ and to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99578: C:/git-sdk-64-minimal/mingw64/include/psdk_inc/intrin-impl.h:838:1: error: array subscript 0 is outside array bounds of 'long long unsigned int[0]' [-Werror=array-bounds] 838 | __buildreadseg(__readgsqword, unsigned __int64, "gs", "q") | ^~~~~~~~~~~~~~ Also: The `mimalloc` library uses C11-style atomics, therefore we must require that standard when compiling with GCC if we want to use `mimalloc` (instead of requiring "only" C99). This is what we do in the CMake definition already, therefore this commit does not need to touch `contrib/buildsystems/`. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This commit is contained in:
Родитель
e93a0a29cf
Коммит
3d9c03225a
35
Makefile
35
Makefile
|
@ -2053,6 +2053,41 @@ ifdef USE_NED_ALLOCATOR
|
|||
OVERRIDE_STRDUP = YesPlease
|
||||
endif
|
||||
|
||||
ifdef USE_MIMALLOC
|
||||
MIMALLOC_OBJS = \
|
||||
compat/mimalloc/alloc-aligned.o \
|
||||
compat/mimalloc/alloc.o \
|
||||
compat/mimalloc/arena.o \
|
||||
compat/mimalloc/bitmap.o \
|
||||
compat/mimalloc/heap.o \
|
||||
compat/mimalloc/init.o \
|
||||
compat/mimalloc/options.o \
|
||||
compat/mimalloc/os.o \
|
||||
compat/mimalloc/page.o \
|
||||
compat/mimalloc/random.o \
|
||||
compat/mimalloc/segment.o \
|
||||
compat/mimalloc/segment-cache.o \
|
||||
compat/mimalloc/stats.o
|
||||
|
||||
COMPAT_CFLAGS += -Icompat/mimalloc -DMI_DEBUG=0 -DUSE_MIMALLOC --std=gnu11
|
||||
COMPAT_OBJS += $(MIMALLOC_OBJS)
|
||||
|
||||
$(MIMALLOC_OBJS): COMPAT_CFLAGS += -DBANNED_H
|
||||
|
||||
$(MIMALLOC_OBJS): COMPAT_CFLAGS += \
|
||||
-Wno-attributes \
|
||||
-Wno-unknown-pragmas \
|
||||
-Wno-array-bounds
|
||||
|
||||
ifdef DEVELOPER
|
||||
$(MIMALLOC_OBJS): COMPAT_CFLAGS += \
|
||||
-Wno-pedantic \
|
||||
-Wno-declaration-after-statement \
|
||||
-Wno-old-style-definition \
|
||||
-Wno-missing-prototypes
|
||||
endif
|
||||
endif
|
||||
|
||||
ifdef OVERRIDE_STRDUP
|
||||
COMPAT_CFLAGS += -DOVERRIDE_STRDUP
|
||||
COMPAT_OBJS += compat/strdup.o
|
||||
|
|
|
@ -22,8 +22,10 @@ endif
|
|||
|
||||
ifneq ($(uname_S),FreeBSD)
|
||||
ifneq ($(or $(filter gcc6,$(COMPILER_FEATURES)),$(filter clang7,$(COMPILER_FEATURES))),)
|
||||
ifndef USE_MIMALLOC
|
||||
DEVELOPER_CFLAGS += -std=gnu99
|
||||
endif
|
||||
endif
|
||||
else
|
||||
# FreeBSD cannot limit to C99 because its system headers unconditionally
|
||||
# rely on C11 features.
|
||||
|
|
|
@ -481,7 +481,7 @@ endif
|
|||
CC = compat/vcbuild/scripts/clink.pl
|
||||
AR = compat/vcbuild/scripts/lib.pl
|
||||
CFLAGS =
|
||||
BASIC_CFLAGS = -nologo -I. -Icompat/vcbuild/include -DWIN32 -D_CONSOLE -DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE
|
||||
BASIC_CFLAGS = -nologo -I. -Icompat/vcbuild/include -DWIN32 -D_CONSOLE -DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -MP -std:c11
|
||||
COMPAT_OBJS = compat/msvc.o compat/winansi.o \
|
||||
compat/win32/flush.o \
|
||||
compat/win32/path-utils.o \
|
||||
|
|
|
@ -406,6 +406,16 @@ char *gitdirname(char *);
|
|||
# include <sys/sysinfo.h>
|
||||
#endif
|
||||
|
||||
#ifdef USE_MIMALLOC
|
||||
#include "mimalloc.h"
|
||||
#define malloc mi_malloc
|
||||
#define calloc mi_calloc
|
||||
#define realloc mi_realloc
|
||||
#define free mi_free
|
||||
#define strdup mi_strdup
|
||||
#define strndup mi_strndup
|
||||
#endif
|
||||
|
||||
/* On most systems <netdb.h> would have given us this, but
|
||||
* not on some systems (e.g. z/OS).
|
||||
*/
|
||||
|
|
Загрузка…
Ссылка в новой задаче