|
127 | 127 | # |
128 | 128 | # Optimization: OPTIMIZE=[SPACE, SPEED, MAXSPEED] (default is MAXSPEED) |
129 | 129 | # |
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)) |
132 | 134 | # avx is available on Visual C++ 2010 and after. |
133 | 135 | # 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 |
134 | 139 | # |
135 | 140 | # Version Support: WINVER=[0x0601, 0x0602, 0x0603, 0x0A00] (default is |
136 | 141 | # 0x0601) |
@@ -257,38 +262,29 @@ OBJDIR = $(OBJDIR)V |
257 | 262 | OBJDIR = $(OBJDIR)d |
258 | 263 | !endif |
259 | 264 |
|
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" |
266 | 267 | CPU = i386 |
267 | | -! endif |
268 | | -! else # !CPU |
| 268 | +! endif |
| 269 | +!else # !CPU |
269 | 270 | CPU = i386 |
270 | | -! ifndef PLATFORM |
271 | | -! ifdef TARGET_CPU |
| 271 | +! ifndef PLATFORM |
| 272 | +! ifdef TARGET_CPU |
272 | 273 | PLATFORM = $(TARGET_CPU) |
273 | | -! elseif defined(VSCMD_ARG_TGT_ARCH) |
| 274 | +! elseif defined(VSCMD_ARG_TGT_ARCH) |
274 | 275 | PLATFORM = $(VSCMD_ARG_TGT_ARCH) |
275 | | -! endif |
276 | 276 | ! endif |
277 | | -! ifdef PLATFORM |
278 | | -! if ("$(PLATFORM)" == "x64") || ("$(PLATFORM)" == "X64") |
| 277 | +! endif |
| 278 | +! ifdef PLATFORM |
| 279 | +! if ("$(PLATFORM)" == "x64") || ("$(PLATFORM)" == "X64") |
279 | 280 | CPU = AMD64 |
280 | | -! elseif ("$(PLATFORM)" == "arm64") || ("$(PLATFORM)" == "ARM64") |
| 281 | +! elseif ("$(PLATFORM)" == "arm64") || ("$(PLATFORM)" == "ARM64") |
281 | 282 | 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 |
292 | 288 | OBJDIR = $(OBJDIR)$(CPU) |
293 | 289 |
|
294 | 290 | # Build a retail version by default |
@@ -553,48 +549,61 @@ INTDIR = $(OBJDIR) |
553 | 549 | OUTDIR = $(OBJDIR) |
554 | 550 |
|
555 | 551 | ### Validate CPUNR |
556 | | -!ifndef CPUNR |
| 552 | +!if "$(CPU)" == "i386" || "$(CPU)" == "AMD64" |
| 553 | +! ifndef CPUNR |
557 | 554 | # default to SSE2 |
558 | 555 | CPUNR = sse2 |
559 | | -!elseif "$(CPUNR)" == "i386" || "$(CPUNR)" == "i486" || "$(CPUNR)" == "i586" |
| 556 | +! elseif "$(CPU)" == "i386" \ |
| 557 | + && ("$(CPUNR)" == "i386" || "$(CPUNR)" == "i486" || "$(CPUNR)" == "i586") |
560 | 558 | # 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 |
565 | 563 | CPUNR = i686 |
566 | | -!elseif "$(CPUNR)" == "pentium4" |
| 564 | +! elseif "$(CPUNR)" == "pentium4" |
567 | 565 | # 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. |
570 | 568 | 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. |
575 | 578 | !endif |
576 | 579 |
|
577 | 580 | # Convert processor ID to MVC-compatible number |
| 581 | +!if "$(CPU)" == "i386" || "$(CPU)" == "AMD64" |
578 | 582 | # IA32/SSE/SSE2 are only supported on x86 |
579 | | -!if "$(ASSEMBLY_ARCHITECTURE)" == "i386" \ |
| 583 | +! if "$(CPU)" == "i386" \ |
580 | 584 | && ("$(CPUNR)" == "i686" || "$(CPUNR)" == "any") |
581 | 585 | CPUARG = /arch:IA32 |
582 | | -!elseif "$(ASSEMBLY_ARCHITECTURE)" == "i386" && "$(CPUNR)" == "sse" |
| 586 | +! elseif "$(CPU)" == "i386" && "$(CPUNR)" == "sse" |
583 | 587 | CPUARG = /arch:SSE |
584 | | -!elseif "$(ASSEMBLY_ARCHITECTURE)" == "i386" && "$(CPUNR)" == "sse2" |
| 588 | +! elseif "$(CPU)" == "i386" && "$(CPUNR)" == "sse2" |
585 | 589 | CPUARG = /arch:SSE2 |
586 | | -!elseif "$(CPUNR)" == "avx" |
| 590 | +! elseif "$(CPUNR)" == "avx" |
587 | 591 | CPUARG = /arch:AVX |
588 | | -!elseif "$(CPUNR)" == "avx2" |
| 592 | +! elseif "$(CPUNR)" == "avx2" |
589 | 593 | CPUARG = /arch:AVX2 |
| 594 | +! elseif "$(CPUNR)" == "avx512" |
| 595 | +CPUARG = /arch:AVX512 |
| 596 | +! endif |
| 597 | +!elseif "$(CPU)" == "ARM64" && defined(CPUNR) |
| 598 | +CPUARG = /arch:$(CPUNR) |
590 | 599 | !endif |
591 | 600 |
|
592 | 601 | # Pass CPUARG to GvimExt, to avoid using version-dependent defaults |
593 | 602 | MAKEFLAGS_GVIMEXT = $(MAKEFLAGS_GVIMEXT) CPUARG="$(CPUARG)" |
594 | 603 |
|
595 | 604 | !if "$(VIMDLL)" == "yes" |
596 | 605 | VIMDLLBASE = vim |
597 | | -! if "$(ASSEMBLY_ARCHITECTURE)" == "i386" |
| 606 | +! if "$(CPU)" == "i386" |
598 | 607 | VIMDLLBASE = $(VIMDLLBASE)32 |
599 | 608 | ! else |
600 | 609 | VIMDLLBASE = $(VIMDLLBASE)64 |
|
0 commit comments