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)
diff --git a/src/Make_cyg_ming.mak b/src/Make_cyg_ming.mak
index a2d8f3b..61df9a7 100644
--- a/src/Make_cyg_ming.mak
+++ b/src/Make_cyg_ming.mak
@@ -217,8 +217,12 @@
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 @@
###########################################################################
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 @@
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 @@
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 @@
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