Skip to content

Commit cdf1c7a

Browse files
k-takatachrisbra
authored andcommitted
patch 9.1.0656: MS-Windows: MSVC Makefile CPU handling can be improved
Problem: MS-Windows: MSVC Makefile CPU handling can be improved Solution: Update Makefile and also remove some old code (Ken Takata) * The variable `ASSEMBLY_ARCHITECTURE` was originally used to generate the manifest file. However, this was removed in v7.0.198. Remove `ASSEMBLY_ARCHITECTURE` and use `CPU` instead. * `/arch:AVX512` is available starting from Visual C++ 2017. * ARM64 was not considered when validating CPUNR. Skip the validation for ARM64 for now. * Remove old code for VC6/7 and Win9x. closes: #15422 Signed-off-by: Ken Takata <kentkt@csc.jp> Signed-off-by: Christian Brabandt <cb@256bit.org>
1 parent 0aa65b4 commit cdf1c7a

File tree

3 files changed

+68
-60
lines changed

3 files changed

+68
-60
lines changed

src/GvimExt/Make_mvc.mak

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,24 @@ WINVER = 0x0601
1919
NODEBUG = 1
2020
!endif
2121

22-
!ifdef PROCESSOR_ARCHITECTURE
23-
# On Windows NT
24-
! ifndef CPU
22+
!ifndef CPU
2523
CPU = i386
26-
! if !defined(PLATFORM) && defined(TARGET_CPU)
24+
! ifndef PLATFORM
25+
! ifdef TARGET_CPU
2726
PLATFORM = $(TARGET_CPU)
27+
! elseif defined(VSCMD_ARG_TGT_ARCH)
28+
PLATFORM = $(VSCMD_ARG_TGT_ARCH)
2829
! endif
29-
! ifdef PLATFORM
30-
! if ("$(PLATFORM)" == "x64") || ("$(PLATFORM)" == "X64")
30+
! endif
31+
! ifdef PLATFORM
32+
! if ("$(PLATFORM)" == "x64") || ("$(PLATFORM)" == "X64")
3133
CPU = AMD64
32-
! elseif ("$(PLATFORM)" == "arm64") || ("$(PLATFORM)" == "ARM64")
34+
! elseif ("$(PLATFORM)" == "arm64") || ("$(PLATFORM)" == "ARM64")
3335
CPU = ARM64
34-
! elseif ("$(PLATFORM)" != "x86") && ("$(PLATFORM)" != "X86")
35-
! error *** ERROR Unknown target platform "$(PLATFORM)". Make aborted.
36-
! endif
36+
! elseif ("$(PLATFORM)" != "x86") && ("$(PLATFORM)" != "X86")
37+
! error *** ERROR Unknown target platform "$(PLATFORM)". Make aborted.
3738
! endif
3839
! endif
39-
!else
40-
CPU = i386
4140
!endif
4241

4342
!ifdef SDK_INCLUDE_DIR
@@ -80,7 +79,6 @@ all: gvimext.dll
8079
gvimext.dll: gvimext.obj \
8180
gvimext.res
8281
$(link) $(lflags) -dll -def:gvimext.def -base:$(OFFSET) -out:$*.dll $** $(olelibsdll) shell32.lib comctl32.lib -subsystem:$(SUBSYSTEM)
83-
if exist $*.dll.manifest mt -nologo -manifest $*.dll.manifest -outputresource:$*.dll;2
8482

8583
gvimext.obj: gvimext.h
8684

@@ -96,4 +94,3 @@ clean:
9694
- if exist gvimext.exp del gvimext.exp
9795
- if exist gvimext.obj del gvimext.obj
9896
- if exist gvimext.res del gvimext.res
99-
- if exist gvimext.dll.manifest del gvimext.dll.manifest

src/Make_mvc.mak

Lines changed: 55 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -127,10 +127,15 @@
127127
#
128128
# Optimization: OPTIMIZE=[SPACE, SPEED, MAXSPEED] (default is MAXSPEED)
129129
#
130-
# Processor Version: CPUNR=[any, i686, sse, sse2, avx, avx2] (default is
131-
# sse2)
130+
# Processor Version:
131+
# For x86: CPUNR=[any, i686, sse, sse2, avx, avx2, avx512]
132+
# For x64: CPUNR=[sse2, avx, avx2, avx512]
133+
# (default is sse2 (both x86 and x64))
132134
# avx is available on Visual C++ 2010 and after.
133135
# avx2 is available on Visual C++ 2013 Update 2 and after.
136+
# avx512 is available on Visual C++ 2017 and after.
137+
# For ARM64:
138+
# See: https://learn.microsoft.com/en-us/cpp/build/reference/arch-arm64
134139
#
135140
# Version Support: WINVER=[0x0601, 0x0602, 0x0603, 0x0A00] (default is
136141
# 0x0601)
@@ -257,38 +262,29 @@ OBJDIR = $(OBJDIR)V
257262
OBJDIR = $(OBJDIR)d
258263
!endif
259264

260-
!ifdef PROCESSOR_ARCHITECTURE
261-
# We're on Windows NT or using VC 6+
262-
! ifdef CPU
263-
ASSEMBLY_ARCHITECTURE = $(CPU)
264-
# Using I386 for $ASSEMBLY_ARCHITECTURE doesn't work for VC7.
265-
! if "$(CPU)" == "I386"
265+
!ifdef CPU
266+
! if "$(CPU)" == "I386"
266267
CPU = i386
267-
! endif
268-
! else # !CPU
268+
! endif
269+
!else # !CPU
269270
CPU = i386
270-
! ifndef PLATFORM
271-
! ifdef TARGET_CPU
271+
! ifndef PLATFORM
272+
! ifdef TARGET_CPU
272273
PLATFORM = $(TARGET_CPU)
273-
! elseif defined(VSCMD_ARG_TGT_ARCH)
274+
! elseif defined(VSCMD_ARG_TGT_ARCH)
274275
PLATFORM = $(VSCMD_ARG_TGT_ARCH)
275-
! endif
276276
! endif
277-
! ifdef PLATFORM
278-
! if ("$(PLATFORM)" == "x64") || ("$(PLATFORM)" == "X64")
277+
! endif
278+
! ifdef PLATFORM
279+
! if ("$(PLATFORM)" == "x64") || ("$(PLATFORM)" == "X64")
279280
CPU = AMD64
280-
! elseif ("$(PLATFORM)" == "arm64") || ("$(PLATFORM)" == "ARM64")
281+
! elseif ("$(PLATFORM)" == "arm64") || ("$(PLATFORM)" == "ARM64")
281282
CPU = ARM64
282-
! elseif ("$(PLATFORM)" != "x86") && ("$(PLATFORM)" != "X86")
283-
! error *** ERROR Unknown target platform "$(PLATFORM)". Make aborted.
284-
! endif
285-
! endif # !PLATFORM
286-
! endif
287-
!else # !PROCESSOR_ARCHITECTURE
288-
# We're on Windows 95
289-
CPU = i386
290-
!endif # !PROCESSOR_ARCHITECTURE
291-
ASSEMBLY_ARCHITECTURE = $(CPU)
283+
! elseif ("$(PLATFORM)" != "x86") && ("$(PLATFORM)" != "X86")
284+
! error *** ERROR Unknown target platform "$(PLATFORM)". Make aborted.
285+
! endif
286+
! endif # !PLATFORM
287+
!endif
292288
OBJDIR = $(OBJDIR)$(CPU)
293289

294290
# Build a retail version by default
@@ -553,48 +549,61 @@ INTDIR = $(OBJDIR)
553549
OUTDIR = $(OBJDIR)
554550

555551
### Validate CPUNR
556-
!ifndef CPUNR
552+
!if "$(CPU)" == "i386" || "$(CPU)" == "AMD64"
553+
! ifndef CPUNR
557554
# default to SSE2
558555
CPUNR = sse2
559-
!elseif "$(CPUNR)" == "i386" || "$(CPUNR)" == "i486" || "$(CPUNR)" == "i586"
556+
! elseif "$(CPU)" == "i386" \
557+
&& ("$(CPUNR)" == "i386" || "$(CPUNR)" == "i486" || "$(CPUNR)" == "i586")
560558
# alias i386, i486 and i586 to i686
561-
! message *** WARNING CPUNR=$(CPUNR) is not a valid target architecture.
562-
! message Windows 7 is the minimum target OS, with a minimum target
563-
! message architecture of i686.
564-
! message Retargeting to i686
559+
! message *** WARNING CPUNR=$(CPUNR) is not a valid target architecture.
560+
! message Windows 7 is the minimum target OS, with a minimum target
561+
! message architecture of i686.
562+
! message Retargeting to i686
565563
CPUNR = i686
566-
!elseif "$(CPUNR)" == "pentium4"
564+
! elseif "$(CPUNR)" == "pentium4"
567565
# alias pentium4 to sse2
568-
! message *** WARNING CPUNR=pentium4 is deprecated in favour of sse2.
569-
! message Retargeting to sse2.
566+
! message *** WARNING CPUNR=pentium4 is deprecated in favour of sse2.
567+
! message Retargeting to sse2.
570568
CPUNR = sse2
571-
!elseif "$(CPUNR)" != "any" && "$(CPUNR)" != "i686" \
572-
&& "$(CPUNR)" != "sse" && "$(CPUNR)" != "sse2" \
573-
&& "$(CPUNR)" != "avx" && "$(CPUNR)" != "avx2"
574-
! error *** ERROR Unknown target architecture "$(CPUNR)". Make aborted.
569+
! elseif ("$(CPU)" != "i386" \
570+
|| ("$(CPUNR)" != "any" && "$(CPUNR)" != "i686" \
571+
&& "$(CPUNR)" != "sse" )) \
572+
&& "$(CPUNR)" != "sse2" && "$(CPUNR)" != "avx" \
573+
&& "$(CPUNR)" != "avx2" && "$(CPUNR)" != "avx512"
574+
! error *** ERROR Unknown target architecture "$(CPUNR)". Make aborted.
575+
! endif
576+
!elseif "$(CPU)" == "ARM64"
577+
# TODO: Validate CPUNR.
575578
!endif
576579

577580
# Convert processor ID to MVC-compatible number
581+
!if "$(CPU)" == "i386" || "$(CPU)" == "AMD64"
578582
# IA32/SSE/SSE2 are only supported on x86
579-
!if "$(ASSEMBLY_ARCHITECTURE)" == "i386" \
583+
! if "$(CPU)" == "i386" \
580584
&& ("$(CPUNR)" == "i686" || "$(CPUNR)" == "any")
581585
CPUARG = /arch:IA32
582-
!elseif "$(ASSEMBLY_ARCHITECTURE)" == "i386" && "$(CPUNR)" == "sse"
586+
! elseif "$(CPU)" == "i386" && "$(CPUNR)" == "sse"
583587
CPUARG = /arch:SSE
584-
!elseif "$(ASSEMBLY_ARCHITECTURE)" == "i386" && "$(CPUNR)" == "sse2"
588+
! elseif "$(CPU)" == "i386" && "$(CPUNR)" == "sse2"
585589
CPUARG = /arch:SSE2
586-
!elseif "$(CPUNR)" == "avx"
590+
! elseif "$(CPUNR)" == "avx"
587591
CPUARG = /arch:AVX
588-
!elseif "$(CPUNR)" == "avx2"
592+
! elseif "$(CPUNR)" == "avx2"
589593
CPUARG = /arch:AVX2
594+
! elseif "$(CPUNR)" == "avx512"
595+
CPUARG = /arch:AVX512
596+
! endif
597+
!elseif "$(CPU)" == "ARM64" && defined(CPUNR)
598+
CPUARG = /arch:$(CPUNR)
590599
!endif
591600

592601
# Pass CPUARG to GvimExt, to avoid using version-dependent defaults
593602
MAKEFLAGS_GVIMEXT = $(MAKEFLAGS_GVIMEXT) CPUARG="$(CPUARG)"
594603

595604
!if "$(VIMDLL)" == "yes"
596605
VIMDLLBASE = vim
597-
! if "$(ASSEMBLY_ARCHITECTURE)" == "i386"
606+
! if "$(CPU)" == "i386"
598607
VIMDLLBASE = $(VIMDLLBASE)32
599608
! else
600609
VIMDLLBASE = $(VIMDLLBASE)64

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -704,6 +704,8 @@ static char *(features[]) =
704704

705705
static int included_patches[] =
706706
{ /* Add new patch number below this line */
707+
/**/
708+
656,
707709
/**/
708710
655,
709711
/**/

0 commit comments

Comments
 (0)