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:
parent
54e5dbf58e
commit
73f4439ca6
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
33
src/msvc2015.bat
Normal 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_
|
@ -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 $**
|
||||||
|
@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user