0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

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)
This commit is contained in:
Bram Moolenaar 2017-10-07 18:38:43 +02:00
parent 54e5dbf58e
commit 73f4439ca6
7 changed files with 105 additions and 24 deletions

View File

@ -51,14 +51,17 @@ olelibsdll = ole32.lib uuid.lib oleaut32.lib user32.lib gdi32.lib advapi32.lib
# include CPUARG # include CPUARG
cflags = $(cflags) $(CPUARG) cflags = $(cflags) $(CPUARG)
SUBSYSTEM = console
!if "$(SUBSYSTEM_VER)" != ""
SUBSYSTEM = $(SUBSYSTEM),$(SUBSYSTEM_VER)
!endif
all: gvimext.dll all: gvimext.dll
gvimext.dll: gvimext.obj \ gvimext.dll: gvimext.obj \
gvimext.res gvimext.res
# $(implib) /NOLOGO -machine:$(CPU) -def:gvimext.def $** -out:gvimext.lib $(link) $(lflags) -dll -def:gvimext.def -base:0x1C000000 -out:$*.dll $** $(olelibsdll) shell32.lib comctl32.lib -subsystem:$(SUBSYSTEM)
# $(link) $(dlllflags) -base:0x1C000000 -out:$*.dll $** $(olelibsdll) shell32.lib gvimext.lib comctl32.lib gvimext.exp 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
if exist $*.dll.manifest mt -nologo -manifest $*.dll.manifest -outputresource:$*.dll;2
gvimext.obj: gvimext.h gvimext.obj: gvimext.h

View File

@ -43,6 +43,11 @@ The currently preferred method is using the free Visual C++ Toolkit 2008
1. Microsoft Visual C++ 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 Visual Studio
------------- -------------
@ -50,9 +55,8 @@ Building with Visual Studio (VS 98, VS .NET, VS .NET 2003, VS 2005, VS 2008,
VS2010, VS2012, VS2013 and VS2015) is straightforward. (These instructions VS2010, VS2012, VS2013 and VS2015) is straightforward. (These instructions
should also work for VS 4 and VS 5.) should also work for VS 4 and VS 5.)
Using VS C++ 2008 Express is recommended, the binaries built with that run on Using VS C++ 2008 Express is recommended if you need the binary to run on
nearly all platforms. Binaries from later versions may not run on Windows 95 Windows 95 or 97, see |msvc-2008-express| below.
or XP.
To build Vim from the command line with MSVC, use Make_mvc.mak. 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 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. 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 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 so that it targets Windows 6.0 (Vista) by default. In order to override
@ -127,16 +131,28 @@ follows:
LINK ... /subsystem:console,5.01 LINK ... /subsystem:console,5.01
Make_mvc.mak now supports a macro SUBSYSTEM_VER to pass the Windows version. 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 Use lines like follows to target Windows XP x86 (assuming using Visual C++
under 64-bit Windows): 2012 under 64-bit Windows):
set WinSdk71=%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.1A set WinSdk71=%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.1A
set SDK_INCLUDE_DIR=%WinSdk71%\Include
set INCLUDE=%WinSdk71%\Include;%INCLUDE% set INCLUDE=%WinSdk71%\Include;%INCLUDE%
set LIB=%WinSdk71%\Lib;%LIB% set LIB=%WinSdk71%\Lib;%LIB%
set PATH=%WinSdk71%\Bin;%PATH%
set CL=/D_USING_V110_SDK71_ set CL=/D_USING_V110_SDK71_
nmake -f Make_mvc.mak ... WINVER=0x0501 SUBSYSTEM_VER=5.01 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
LIB and SUBSYSTEM_VER:
...
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
options:
msvc2015
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: The following Visual C++ team blog can serve as a reference page:
http://blogs.msdn.com/b/vcblog/archive/2012/10/08/windows-xp-targeting-with-c-in-visual-studio-2012.aspx http://blogs.msdn.com/b/vcblog/archive/2012/10/08/windows-xp-targeting-with-c-in-visual-studio-2012.aspx
@ -482,7 +498,7 @@ You need to set the following variables:
E.g. C:\Program Files (x86)\Racket E.g. C:\Program Files (x86)\Racket
DYNAMIC_MZSCHEME: Whether dynamic linking is used. Usually, set to yes. DYNAMIC_MZSCHEME: Whether dynamic linking is used. Usually, set to yes.
MZSCHEME_VER: Racket DLL version which is used for the file name. 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. The DLL can be found under the lib directory. E.g.
C:\Program Files (x86)\Racket\lib\libracket3m_XXXXXX.dll C:\Program Files (x86)\Racket\lib\libracket3m_XXXXXX.dll
MZSCHEME_COLLECTS: (Optional) Path of the collects directory used at MZSCHEME_COLLECTS: (Optional) Path of the collects directory used at
@ -490,6 +506,16 @@ You need to set the following variables:
User can override this with the PLTCOLLECTS environment User can override this with the PLTCOLLECTS environment
variable. variable.
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): E.g. When using MSVC (as one line):
nmake -f Make_mvc.mak nmake -f Make_mvc.mak

View File

@ -587,7 +587,7 @@ CPUARG = /arch:AVX2
! endif ! endif
!endif !endif
# Pass CPUARG to GVimExt, to avoid using version-dependent defaults # Pass CPUARG to GvimExt, to avoid using version-dependent defaults
MAKEFLAGS_GVIMEXT = $(MAKEFLAGS_GVIMEXT) CPUARG="$(CPUARG)" MAKEFLAGS_GVIMEXT = $(MAKEFLAGS_GVIMEXT) CPUARG="$(CPUARG)"
@ -789,9 +789,14 @@ SUBSYSTEM = console
CUI_INCL = iscygpty.h CUI_INCL = iscygpty.h
CUI_OBJ = $(OUTDIR)\iscygpty.obj CUI_OBJ = $(OUTDIR)\iscygpty.obj
!endif !endif
SUBSYSTEM_TOOLS = console
!if "$(SUBSYSTEM_VER)" != "" !if "$(SUBSYSTEM_VER)" != ""
SUBSYSTEM = $(SUBSYSTEM),$(SUBSYSTEM_VER) SUBSYSTEM = $(SUBSYSTEM),$(SUBSYSTEM_VER)
SUBSYSTEM_TOOLS = $(SUBSYSTEM_TOOLS),$(SUBSYSTEM_VER)
# Pass SUBSYSTEM_VER to GvimExt and other tools
MAKEFLAGS_GVIMEXT = $(MAKEFLAGS_GVIMEXT) SUBSYSTEM_VER=$(SUBSYSTEM_VER)
MAKEFLAGS_TOOLS = $(MAKEFLAGS_TOOLS) SUBSYSTEM_VER=$(SUBSYSTEM_VER)
!endif !endif
!if "$(GUI)" == "yes" && "$(DIRECTX)" == "yes" !if "$(GUI)" == "yes" && "$(DIRECTX)" == "yes"
@ -1186,24 +1191,26 @@ $(OUTDIR):
install.exe: dosinst.c install.exe: dosinst.c
$(CC) /nologo -DNDEBUG -DWIN32 dosinst.c kernel32.lib shell32.lib \ $(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 - if exist install.exe del install.exe
ren dosinst.exe install.exe ren dosinst.exe install.exe
uninstal.exe: uninstal.c 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 vimrun.exe: vimrun.c
$(CC) /nologo -DNDEBUG vimrun.c $(CC) /nologo -DNDEBUG vimrun.c -link -subsystem:$(SUBSYSTEM_TOOLS)
xxd/xxd.exe: xxd/xxd.c xxd/xxd.exe: xxd/xxd.c
cd xxd cd xxd
$(MAKE) /NOLOGO -f Make_mvc.mak $(MAKE) /NOLOGO -f Make_mvc.mak $(MAKEFLAGS_TOOLS)
cd .. cd ..
tee/tee.exe: tee/tee.c tee/tee.exe: tee/tee.c
cd tee cd tee
$(MAKE) /NOLOGO -f Make_mvc.mak $(MAKE) /NOLOGO -f Make_mvc.mak $(MAKEFLAGS_TOOLS)
cd .. cd ..
GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h

33
src/msvc2015.bat Normal file
View File

@ -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
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%"
set SUBSYSTEM_VER=5.02
) else (
set "LIB=%WinSdk71%\Lib;%LIB%"
set SUBSYSTEM_VER=5.01
)
set CL=/D_USING_V110_SDK71_

View File

@ -1,10 +1,15 @@
# A very (if not the most) simplistic Makefile for MSVC # A very (if not the most) simplistic Makefile for MSVC
SUBSYSTEM = console
!if "$(SUBSYSTEM_VER)" != ""
SUBSYSTEM = $(SUBSYSTEM),$(SUBSYSTEM_VER)
!endif
CC=cl CC=cl
CFLAGS=/O2 /nologo CFLAGS=/O2 /nologo
tee.exe: tee.obj tee.exe: tee.obj
$(CC) $(CFLAGS) /Fo$@ $** $(CC) $(CFLAGS) /Fo$@ $** /link /subsystem:$(SUBSYSTEM)
tee.obj: tee.c tee.obj: tee.c
$(CC) $(CFLAGS) /c $** $(CC) $(CFLAGS) /c $**

View File

@ -761,6 +761,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1178,
/**/ /**/
1177, 1177,
/**/ /**/

View File

@ -1,14 +1,19 @@
# The most simplistic Makefile for Win32 using Microsoft Visual C++ # The most simplistic Makefile for Win32 using Microsoft Visual C++
# (NT and Windows 95) # (NT and Windows 95)
SUBSYSTEM = console
!if "$(SUBSYSTEM_VER)" != ""
SUBSYSTEM = $(SUBSYSTEM),$(SUBSYSTEM_VER)
!endif
xxd: xxd.exe xxd: xxd.exe
xxd.exe: xxd.c xxd.exe: xxd.c
cl /nologo -DWIN32 xxd.c cl /nologo -DWIN32 xxd.c -link -subsystem:$(SUBSYSTEM)
# This was for an older compiler # This was for an older compiler
# cl /nologo -DWIN32 xxd.c /link setargv.obj # cl /nologo -DWIN32 xxd.c /link setargv.obj
clean: clean:
- if exist xxd.obj del xxd.obj - if exist xxd.obj del xxd.obj
- if exist xxd.exe del xxd.exe - if exist xxd.exe del xxd.exe