Browse files

patch 8.0.1178: using old compiler on MS-Windows

Problem:    Using old compiler on MS-Windows.
Solution:   Switch default build on MS-Windows to use MSVC 2015. (Ken Takata)
  • Loading branch information...
brammool committed Oct 7, 2017
1 parent 54e5dbf commit 73f4439ca690d8224df8f88dc71a43fafdcc89bf
Showing with 105 additions and 24 deletions.
  1. +7 −4 src/GvimExt/Makefile
  2. +36 −10 src/INSTALLpc.txt
  3. +13 −6 src/Make_mvc.mak
  4. +33 −0 src/msvc2015.bat
  5. +6 −1 src/tee/Make_mvc.mak
  6. +2 −0 src/version.c
  7. +8 −3 src/xxd/Make_mvc.mak
@@ -51,14 +51,17 @@ olelibsdll = ole32.lib uuid.lib oleaut32.lib user32.lib gdi32.lib advapi32.lib
# include CPUARG
cflags = $(cflags) $(CPUARG)
SUBSYSTEM = console
!if "$(SUBSYSTEM_VER)" != ""
all: gvimext.dll
gvimext.dll: gvimext.obj \
# $(implib) /NOLOGO -machine:$(CPU) -def:gvimext.def $** -out:gvimext.lib
# $(link) $(dlllflags) -base:0x1C000000 -out:$*.dll $** $(olelibsdll) shell32.lib gvimext.lib comctl32.lib gvimext.exp
$(link) $(lflags) -dll -def:gvimext.def -base:0x1C000000 -out:$*.dll $** $(olelibsdll) shell32.lib comctl32.lib
if exist $*.dll.manifest mt -nologo -manifest $*.dll.manifest -outputresource:$*.dll;2
$(link) $(lflags) -dll -def:gvimext.def -base:0x1C000000 -out:$*.dll $** $(olelibsdll) shell32.lib comctl32.lib -subsystem:$(SUBSYSTEM)
if exist $*.dll.manifest mt -nologo -manifest $*.dll.manifest -outputresource:$*.dll;2
gvimext.obj: gvimext.h
@@ -43,16 +43,20 @@ The currently preferred method is using the free Visual C++ Toolkit 2008
1. Microsoft Visual C++
We do not provide download links, since Microsoft keeps changing them. You
can search for "Visual C++ 2015 build tools", for example. You will need to
create a Microsoft account (it's free).
Visual Studio
Building with Visual Studio (VS 98, VS .NET, VS .NET 2003, VS 2005, VS 2008,
VS2010, VS2012, VS2013 and VS2015) is straightforward. (These instructions
should also work for VS 4 and VS 5.)
Using VS C++ 2008 Express is recommended, the binaries built with that run on
nearly all platforms. Binaries from later versions may not run on Windows 95
or XP.
Using VS C++ 2008 Express is recommended if you need the binary to run on
Windows 95 or 97, see |msvc-2008-express| below.
To build Vim from the command line with MSVC, use Make_mvc.mak.
Visual Studio installed a batch file called vcvars32.bat, which you must
@@ -117,8 +121,8 @@ To set the environment execute the msvc2010.bat script. You can then build
Vim with Make_mvc.mak.
Targeting Windows XP with new MSVC *new-msvc-windows-xp*
Targeting Windows XP with MSVC 2012 and later *new-msvc-windows-xp*
Beginning with Visual C++ 2012, Microsoft changed the behavior of LINK.EXE
so that it targets Windows 6.0 (Vista) by default. In order to override
@@ -127,16 +131,28 @@ follows:
LINK ... /subsystem:console,5.01
Make_mvc.mak now supports a macro SUBSYSTEM_VER to pass the Windows version.
Use lines like follows to target Windows XP (assuming using Visual C++ 2012
under 64-bit Windows):
Use lines like follows to target Windows XP x86 (assuming using Visual C++
2012 under 64-bit Windows):
set WinSdk71=%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.1A
set SDK_INCLUDE_DIR=%WinSdk71%\Include
set INCLUDE=%WinSdk71%\Include;%INCLUDE%
set LIB=%WinSdk71%\Lib;%LIB%
set PATH=%WinSdk71%\Bin;%PATH%
set CL=/D_USING_V110_SDK71_
nmake -f Make_mvc.mak ... WINVER=0x0501 SUBSYSTEM_VER=5.01
To target Windows XP x64 instead of x86, you need to change the settings of
set LIB=%WinSdk71%\Lib\x64;%LIB%
nmake -f Make_mvc.mak ... WINVER=0x0501 SUBSYSTEM_VER=5.02
If you use Visual C++ 2015 (either Express or Community Edition), executing
msvc2015.bat will set them automatically. For x86 builds run this without
For x64 builds run this with the "x86_amd64" option:
msvc2015 x86_amd64
The following Visual C++ team blog can serve as a reference page:
@@ -482,14 +498,24 @@ You need to set the following variables:
E.g. C:\Program Files (x86)\Racket
DYNAMIC_MZSCHEME: Whether dynamic linking is used. Usually, set to yes.
MZSCHEME_VER: Racket DLL version which is used for the file name.
E.g. 3m_9z0ds0 for Racket 6.3.
See below for a list of MZSCHEME_VER.
The DLL can be found under the lib directory. E.g.
C:\Program Files (x86)\Racket\lib\libracket3m_XXXXXX.dll
MZSCHEME_COLLECTS: (Optional) Path of the collects directory used at
runtime. Default: $(MZSCHEME)\collects
User can override this with the PLTCOLLECTS environment
List of MZSCHEME_VER (incomplete):
Racket ver. | MZSCHEME_VER
6.3 | 3m_9z0ds0
6.6 | 3m_a0solc
6.8 | 3m_a1zjsw
6.10 | 3m_a36fs8
E.g. When using MSVC (as one line):
nmake -f Make_mvc.mak
@@ -587,7 +587,7 @@ CPUARG = /arch:AVX2
! endif
# Pass CPUARG to GVimExt, to avoid using version-dependent defaults
# Pass CPUARG to GvimExt, to avoid using version-dependent defaults
@@ -789,9 +789,14 @@ SUBSYSTEM = console
CUI_INCL = iscygpty.h
CUI_OBJ = $(OUTDIR)\iscygpty.obj
!if "$(SUBSYSTEM_VER)" != ""
# Pass SUBSYSTEM_VER to GvimExt and other tools
!if "$(GUI)" == "yes" && "$(DIRECTX)" == "yes"
@@ -1186,24 +1191,26 @@ $(OUTDIR):
install.exe: dosinst.c
$(CC) /nologo -DNDEBUG -DWIN32 dosinst.c kernel32.lib shell32.lib \
user32.lib ole32.lib advapi32.lib uuid.lib
user32.lib ole32.lib advapi32.lib uuid.lib \
-link -subsystem:$(SUBSYSTEM_TOOLS)
- if exist install.exe del install.exe
ren dosinst.exe install.exe
uninstal.exe: uninstal.c
$(CC) /nologo -DNDEBUG -DWIN32 uninstal.c shell32.lib advapi32.lib
$(CC) /nologo -DNDEBUG -DWIN32 uninstal.c shell32.lib advapi32.lib \
-link -subsystem:$(SUBSYSTEM_TOOLS)
vimrun.exe: vimrun.c
$(CC) /nologo -DNDEBUG vimrun.c
$(CC) /nologo -DNDEBUG vimrun.c -link -subsystem:$(SUBSYSTEM_TOOLS)
xxd/xxd.exe: xxd/xxd.c
cd xxd
$(MAKE) /NOLOGO -f Make_mvc.mak
$(MAKE) /NOLOGO -f Make_mvc.mak $(MAKEFLAGS_TOOLS)
cd ..
tee/tee.exe: tee/tee.c
cd tee
$(MAKE) /NOLOGO -f Make_mvc.mak
$(MAKE) /NOLOGO -f Make_mvc.mak $(MAKEFLAGS_TOOLS)
cd ..
GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
@@ -0,0 +1,33 @@
@echo off
rem To be used on MS-Windows for Visual C++ 2015 (either Express or Community)
rem See INSTALLpc.txt for information.
rem Usage:
rem For x86 builds run this without options:
rem msvc2015
rem For x64 builds run this with "x86_amd64" option:
rem msvc2015 x86_amd64
@echo on
call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" %*
rem Use Windows SDK 7.1A for targeting Windows XP.
if "%ProgramFiles(x86)%"=="" (
set "WinSdk71=%ProgramFiles%\Microsoft SDKs\Windows\v7.1A"
) else (
set "WinSdk71=%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.1A"
if not exist "%WinSdk71%" (
echo Windows SDK 7.1A is not found. Targeting Windows Vista and later.
goto :eof
set INCLUDE=%WinSdk71%\Include;%INCLUDE%
if "%Platform%"=="x64" (
set "LIB=%WinSdk71%\Lib\x64;%LIB%"
) else (
set "LIB=%WinSdk71%\Lib;%LIB%"
set CL=/D_USING_V110_SDK71_
@@ -1,10 +1,15 @@
# A very (if not the most) simplistic Makefile for MSVC
SUBSYSTEM = console
!if "$(SUBSYSTEM_VER)" != ""
CFLAGS=/O2 /nologo
tee.exe: tee.obj
$(CC) $(CFLAGS) /Fo$@ $**
$(CC) $(CFLAGS) /Fo$@ $** /link /subsystem:$(SUBSYSTEM)
tee.obj: tee.c
$(CC) $(CFLAGS) /c $**
@@ -761,6 +761,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
@@ -1,14 +1,19 @@
# The most simplistic Makefile for Win32 using Microsoft Visual C++
# (NT and Windows 95)
SUBSYSTEM = console
!if "$(SUBSYSTEM_VER)" != ""
xxd: xxd.exe
xxd.exe: xxd.c
cl /nologo -DWIN32 xxd.c
cl /nologo -DWIN32 xxd.c -link -subsystem:$(SUBSYSTEM)
# This was for an older compiler
# cl /nologo -DWIN32 xxd.c /link setargv.obj
- if exist xxd.obj del xxd.obj
- if exist xxd.exe del xxd.exe
- if exist xxd.obj del xxd.obj
- if exist xxd.exe del xxd.exe

0 comments on commit 73f4439

Please sign in to comment.