mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.2.5087: cannot build with clang on MS-Windows
Problem: Cannot build with clang on MS-Windows. Solution: Add support for building with clang. (Yegappan Lakshmanan, closes #10557)
This commit is contained in:
parent
361f9d2da4
commit
1630bd980a
@ -53,7 +53,9 @@ WINDRES := $(CROSS_COMPILE)windres
|
||||
WINDRES_FLAGS =
|
||||
LIBS := -luuid -lgdi32
|
||||
RES := gvimext.res
|
||||
ifeq ($(findstring clang++,$(CXX)),)
|
||||
DEFFILE = gvimext_ming.def
|
||||
endif
|
||||
OBJ := gvimext.o
|
||||
|
||||
DLL := gvimext.dll
|
||||
|
@ -282,6 +282,29 @@ This command is in msys32.bat. Or for the 64 bit compiler use msys64.bat:
|
||||
If you have msys64 in another location you will need to adjust the paths for
|
||||
that.
|
||||
|
||||
2.5. Build Vim with Clang
|
||||
|
||||
The following package group is required for building Vim with Clang:
|
||||
|
||||
* mingw-w64-clang-x86_64-clang
|
||||
|
||||
Use the following command to install it:
|
||||
|
||||
$ pacman -S mingw-w64-clang-x86_64-clang
|
||||
|
||||
Go to the source directory of Vim, then execute the make command. E.g.:
|
||||
|
||||
CC=clang
|
||||
CXX=clang++
|
||||
make -f Make_ming.mak
|
||||
make -f Make_ming.mak GUI=no
|
||||
make -f Make_ming.mak GUI=yes
|
||||
|
||||
To build Vim with the address sanitizer (ASAN), execute the following command:
|
||||
|
||||
CC=clang
|
||||
CXX=clang++
|
||||
make -f Make_ming.mak DEBUG=yes ASAN=yes
|
||||
|
||||
3. MinGW
|
||||
========
|
||||
|
@ -217,8 +217,12 @@ MKDIR = mkdir
|
||||
DIRSLASH = \\
|
||||
endif
|
||||
endif
|
||||
ifeq ($(CC),)
|
||||
CC := $(CROSS_COMPILE)gcc
|
||||
endif
|
||||
ifeq ($(CXX),)
|
||||
CXX := $(CROSS_COMPILE)g++
|
||||
endif
|
||||
ifeq ($(UNDER_CYGWIN),yes)
|
||||
WINDRES := $(CROSS_COMPILE)windres
|
||||
else
|
||||
@ -520,6 +524,8 @@ endif
|
||||
###########################################################################
|
||||
|
||||
CFLAGS = -I. -Iproto $(DEFINES) -pipe -march=$(ARCH) -Wall
|
||||
# To get additional compiler warnings
|
||||
#CFLAGS += -Wextra -pedantic
|
||||
CXXFLAGS = -std=gnu++11
|
||||
# This used to have --preprocessor, but it's no longer supported
|
||||
WINDRES_FLAGS =
|
||||
@ -722,7 +728,11 @@ else
|
||||
CFLAGS += -Os
|
||||
else ifeq ($(OPTIMIZE), MAXSPEED)
|
||||
CFLAGS += -O3
|
||||
CFLAGS += -fomit-frame-pointer -freg-struct-return
|
||||
CFLAGS += -fomit-frame-pointer
|
||||
ifeq ($(findstring clang,$(CC)),)
|
||||
# Only GCC supports the "reg-struct-return" option. Clang doesn't support this.
|
||||
CFLAGS += -freg-struct-return
|
||||
endif
|
||||
else # SPEED
|
||||
CFLAGS += -O2
|
||||
endif
|
||||
@ -734,6 +744,17 @@ CFLAGS += --coverage
|
||||
LFLAGS += --coverage
|
||||
endif
|
||||
|
||||
# If the ASAN=yes argument is supplied, then compile Vim with the address
|
||||
# sanitizer (asan). Only supported by MingW64 clang compiler.
|
||||
# May make Vim twice as slow. Errors are reported on stderr.
|
||||
# More at: https://code.google.com/p/address-sanitizer/
|
||||
# Useful environment variable:
|
||||
# set ASAN_OPTIONS=print_stacktrace=1 log_path=asan
|
||||
ifeq ($(ASAN),yes)
|
||||
#CFLAGS += -g -O0 -fsanitize-recover=all -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer
|
||||
CFLAGS += -g -O0 -fsanitize-recover=all -fsanitize=address -fno-omit-frame-pointer
|
||||
endif
|
||||
|
||||
LIB = -lkernel32 -luser32 -lgdi32 -ladvapi32 -lcomdlg32 -lcomctl32 -lnetapi32 -lversion
|
||||
GUIOBJ = $(OUTDIR)/gui.o $(OUTDIR)/gui_w32.o $(OUTDIR)/gui_beval.o
|
||||
CUIOBJ = $(OUTDIR)/iscygpty.o
|
||||
@ -1076,6 +1097,13 @@ ifeq (yes, $(MAP))
|
||||
LFLAGS += -Wl,-Map=$(TARGET).map
|
||||
endif
|
||||
|
||||
# The default stack size on Windows is 2 MB. With the default stack size, the
|
||||
# following tests fail with the clang address sanitizer:
|
||||
# Test_listdict_compare, Test_listdict_compare_complex, Test_deep_recursion,
|
||||
# Test_map_error, Test_recursive_define, Test_recursive_addstate
|
||||
# To increase the stack size to 16MB, uncomment the following line:
|
||||
#LFLAGS += -Wl,-stack -Wl,0x1000000
|
||||
|
||||
all: $(MAIN_TARGET) vimrun.exe xxd/xxd.exe tee/tee.exe install.exe uninstall.exe GvimExt/gvimext.dll
|
||||
|
||||
vimrun.exe: vimrun.c
|
||||
|
@ -734,6 +734,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
5087,
|
||||
/**/
|
||||
5086,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user