summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-10-07 18:38:43 +0200
committerBram Moolenaar <Bram@vim.org>2017-10-07 18:38:43 +0200
commit73f4439ca690d8224df8f88dc71a43fafdcc89bf (patch)
treebb00da4d4e9cacd9af4cbdd8cd02e700b066eeb3
parent54e5dbf58e16d0d757a315480c9e63ac7f8a74c7 (diff)
downloadvim-73f4439ca690d8224df8f88dc71a43fafdcc89bf.zip
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)
-rw-r--r--src/GvimExt/Makefile11
-rw-r--r--src/INSTALLpc.txt46
-rw-r--r--src/Make_mvc.mak19
-rw-r--r--src/msvc2015.bat33
-rw-r--r--src/tee/Make_mvc.mak7
-rw-r--r--src/version.c2
-rw-r--r--src/xxd/Make_mvc.mak11
7 files changed, 105 insertions, 24 deletions
diff --git a/src/GvimExt/Makefile b/src/GvimExt/Makefile
index c681d3352..27ff953e2 100644
--- a/src/GvimExt/Makefile
+++ b/src/GvimExt/Makefile
@@ -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)" != ""
+SUBSYSTEM = $(SUBSYSTEM),$(SUBSYSTEM_VER)
+!endif
+
all: gvimext.dll
gvimext.dll: gvimext.obj \
gvimext.res
-# $(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
diff --git a/src/INSTALLpc.txt b/src/INSTALLpc.txt
index 8607e9dda..c711b85b1 100644
--- a/src/INSTALLpc.txt
+++ b/src/INSTALLpc.txt
@@ -43,6 +43,11 @@ 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
-------------
@@ -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
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
+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:
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
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
@@ -490,6 +506,16 @@ You need to set the following variables:
User can override this with the PLTCOLLECTS environment
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):
nmake -f Make_mvc.mak
diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak
index e9ba1c5c0..478bf69dc 100644
--- a/src/Make_mvc.mak
+++ b/src/Make_mvc.mak
@@ -587,7 +587,7 @@ CPUARG = /arch:AVX2
! 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)"
@@ -789,9 +789,14 @@ SUBSYSTEM = console
CUI_INCL = iscygpty.h
CUI_OBJ = $(OUTDIR)\iscygpty.obj
!endif
+SUBSYSTEM_TOOLS = console
!if "$(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
!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
diff --git a/src/msvc2015.bat b/src/msvc2015.bat
new file mode 100644
index 000000000..5621fca75
--- /dev/null
+++ b/src/msvc2015.bat
@@ -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_
diff --git a/src/tee/Make_mvc.mak b/src/tee/Make_mvc.mak
index 7fe22df37..950100d3c 100644
--- a/src/tee/Make_mvc.mak
+++ b/src/tee/Make_mvc.mak
@@ -1,10 +1,15 @@
# A very (if not the most) simplistic Makefile for MSVC
+SUBSYSTEM = console
+!if "$(SUBSYSTEM_VER)" != ""
+SUBSYSTEM = $(SUBSYSTEM),$(SUBSYSTEM_VER)
+!endif
+
CC=cl
CFLAGS=/O2 /nologo
tee.exe: tee.obj
- $(CC) $(CFLAGS) /Fo$@ $**
+ $(CC) $(CFLAGS) /Fo$@ $** /link /subsystem:$(SUBSYSTEM)
tee.obj: tee.c
$(CC) $(CFLAGS) /c $**
diff --git a/src/version.c b/src/version.c
index dcd77f7d8..95b4b3083 100644
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1178,
+/**/
1177,
/**/
1176,
diff --git a/src/xxd/Make_mvc.mak b/src/xxd/Make_mvc.mak
index 3227f0c86..0133d7311 100644
--- a/src/xxd/Make_mvc.mak
+++ b/src/xxd/Make_mvc.mak
@@ -1,14 +1,19 @@
# The most simplistic Makefile for Win32 using Microsoft Visual C++
# (NT and Windows 95)
+SUBSYSTEM = console
+!if "$(SUBSYSTEM_VER)" != ""
+SUBSYSTEM = $(SUBSYSTEM),$(SUBSYSTEM_VER)
+!endif
+
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
clean:
- - 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