Skip to content

Commit

Permalink
patch 8.2.5087: cannot build with clang on MS-Windows
Browse files Browse the repository at this point in the history
Problem:    Cannot build with clang on MS-Windows.
Solution:   Add support for building with clang. (Yegappan Lakshmanan,
            closes vim#10557)
  • Loading branch information
yegappan authored and brammool committed Jun 14, 2022
1 parent 361f9d2 commit 1630bd9
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 1 deletion.
2 changes: 2 additions & 0 deletions src/GvimExt/Make_ming.mak
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
23 changes: 23 additions & 0 deletions src/INSTALLpc.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
========
Expand Down
30 changes: 29 additions & 1 deletion src/Make_cyg_ming.mak
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 =
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Original file line number Diff line number Diff line change
Expand Up @@ -734,6 +734,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
5087,
/**/
5086,
/**/
Expand Down

0 comments on commit 1630bd9

Please sign in to comment.