-
Notifications
You must be signed in to change notification settings - Fork 0
/
Make_mvc.mak
2034 lines (1716 loc) · 54.7 KB
/
Make_mvc.mak
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# Makefile for Vim on Win32 (Windows 7/8/10/11) and Win64, using the Microsoft
# Visual C++ compilers. Known to work with VC14 (VS2015), VC14.1 (VS2017),
# VC14.2 (VS2019) and VC14.3 (VS2022).
#
# To build using other Windows compilers, see INSTALLpc.txt
#
# This makefile can build the console, GUI, OLE-enable, Perl-enabled and
# Python-enabled versions of Vim for Win32 platforms.
#
# The basic command line to build Vim is:
#
# nmake -f Make_mvc.mak
#
# This will build the console version of Vim with no additional interfaces.
# To add features, define any of the following:
#
# !!!! After changing any features do "nmake clean" first !!!!
#
# Feature Set: FEATURES=[TINY, NORMAL, HUGE] (default is HUGE)
#
# Name to add to the version: MODIFIED_BY=[name of modifier]
#
# GUI interface: GUI=yes (default is no)
#
# GUI with DirectWrite (DirectX): DIRECTX=yes
# (default is yes if GUI=yes, requires GUI=yes)
#
# Color emoji support: COLOR_EMOJI=yes
# (default is yes if DIRECTX=yes, requires WinSDK 8.1 or later.)
#
# OLE interface: OLE=yes (usually with GUI=yes)
#
# IME support: IME=yes (default is yes)
# DYNAMIC_IME=[yes or no] (to load the imm32.dll dynamically, default
# is yes)
#
# Terminal support: TERMINAL=yes (default is yes if FEATURES is HUGE)
# Will also enable CHANNEL
#
# Sound support: SOUND=yes (default is yes)
#
# Sodium support: SODIUM=[Path to Sodium directory]
# DYNAMIC_SODIUM=yes (to load the Sodium DLL dynamically)
# You need to install the msvc package from
# https://download.libsodium.org/libsodium/releases/
# and package the libsodium.dll with Vim
#
#
# DLL support (EXPERIMENTAL): VIMDLL=yes (default is no)
# Creates vim{32,64}.dll, and stub gvim.exe and vim.exe.
# The shared codes between the GUI and the console are built into
# the DLL. This reduces the total file size and memory usage.
# Also supports `vim -g` and the `:gui` command.
#
# Lua interface:
# LUA=[Path to Lua directory]
# DYNAMIC_LUA=yes (to load the Lua DLL dynamically)
# LUA_VER=[Lua version] (default is 53)
#
# MzScheme interface:
# MZSCHEME=[Path to MzScheme directory]
# DYNAMIC_MZSCHEME=yes (to load the MzScheme DLLs dynamically)
# MZSCHEME_VER=[MzScheme version] (default is 3m_a0solc (6.6))
# Used for the DLL file name. E.g.:
# C:\Program Files (x86)\Racket\lib\libracket3m_XXXXXX.dll
# MZSCHEME_DEBUG=no
#
# Perl interface:
# PERL=[Path to Perl directory]
# DYNAMIC_PERL=yes (to load the Perl DLL dynamically)
# PERL_VER=[Perl version, in the form 55 (5.005), 56 (5.6.x),
# 510 (5.10.x), etc]
# (default is 524)
#
# Python interface:
# PYTHON=[Path to Python directory]
# DYNAMIC_PYTHON=yes (to load the Python DLL dynamically)
# PYTHON_VER=[Python version, eg 22, 23, ..., 27] (default is 27)
#
# Python3 interface:
# PYTHON3=[Path to Python3 directory]
# DYNAMIC_PYTHON3=yes (to load the Python3 DLL dynamically)
# PYTHON3_VER=[Python3 version, eg 30, 31] (default is 38)
#
# Ruby interface:
# RUBY=[Path to Ruby directory]
# DYNAMIC_RUBY=yes (to load the Ruby DLL dynamically)
# RUBY_VER=[Ruby version, eg 19, 22] (default is 22)
# RUBY_API_VER_LONG=[Ruby API version, eg 1.9.1, 2.2.0]
# (default is 2.2.0)
# You must set RUBY_API_VER_LONG when change RUBY_VER.
# Note: If you use Ruby 1.9.3, set as follows:
# RUBY_VER=19
# RUBY_API_VER_LONG=1.9.1 (not 1.9.3, because the API version is 1.9.1.)
#
# Tcl interface:
# TCL=[Path to Tcl directory]
# DYNAMIC_TCL=yes (to load the Tcl DLL dynamically)
# TCL_VER=[Tcl version, e.g. 80, 83] (default is 86)
# TCL_VER_LONG=[Tcl version, eg 8.3] (default is 8.6)
# You must set TCL_VER_LONG when you set TCL_VER.
# TCL_DLL=[Tcl dll name, e.g. tcl86.dll] (default is tcl86.dll)
#
# Cscope support: CSCOPE=yes
#
# Iconv library support (always dynamically loaded):
# ICONV=[yes or no] (default is yes)
#
# Intl library support (always dynamically loaded):
# GETTEXT=[yes or no] (default is yes)
# See http://sourceforge.net/projects/gettext/
#
# PostScript printing: POSTSCRIPT=yes (default is no)
#
# Netbeans Support: NETBEANS=[yes or no] (default is yes if GUI is yes)
# Requires CHANNEL.
#
# Netbeans Debugging Support: NBDEBUG=[yes or no] (should be no, yes
# doesn't work)
#
# Inter process communication: CHANNEL=[yes or no] (default is yes if GUI
# is yes or TERMINAL is yes)
#
# XPM Image Support: XPM=[path to XPM directory]
# Default is "xpm", using the files included in the distribution.
# Use "no" to disable this feature.
#
# Optimization: OPTIMIZE=[SPACE, SPEED, MAXSPEED] (default is MAXSPEED)
#
# Processor Version:
# For x86: CPUNR=[any, i686, sse, sse2, avx, avx2, avx512]
# For x64: CPUNR=[sse2, avx, avx2, avx512]
# (default is sse2 (both x86 and x64))
# avx is available on Visual C++ 2010 and after.
# avx2 is available on Visual C++ 2013 Update 2 and after.
# avx512 is available on Visual C++ 2017 and after.
# For ARM64:
# See: https://learn.microsoft.com/en-us/cpp/build/reference/arch-arm64
#
# Version Support: WINVER=[0x0601, 0x0602, 0x0603, 0x0A00] (default is
# 0x0601)
# Supported versions depends on your target SDK, check SDKDDKVer.h
# See https://learn.microsoft.com/en-us/cpp/porting/modifying-winver-and-win32-winnt
#
# Debug version: DEBUG=yes
# Mapfile: MAP=[no, yes or lines] (default is yes)
# no: Don't write a mapfile.
# yes: Write a normal mapfile.
# lines: Write a mapfile with line numbers (only for VC6 and later)
#
# Static Code Analysis: ANALYZE=yes (works with VS2012 or later)
#
# Address Sanitizer: ASAN=yes (works with VS2019 or later)
#
# You can combine any of these interfaces
#
# Example: To build the non-debug, GUI version with Perl interface:
# nmake -f Make_mvc.mak GUI=yes PERL=C:\Perl
### See feature.h for a list of optionals.
# If you want to build some optional features without modifying the source,
# you can set DEFINES on the command line, e.g.,
# nmake -f Make_mvc.mvc "DEFINES=-DEMACS_TAGS"
RM = del /f /q
# Read MAJOR and MINOR from version.h.
!IF ![for /f "tokens=2,3" %I in (version.h) do \
@if "%I"=="VIM_VERSION_MAJOR" ( \
echo MAJOR=%J> .\major.tmp \
) else if "%I"=="VIM_VERSION_MINOR" ( \
echo MINOR=%J> .\minor.tmp && exit \
)]
!ENDIF
!IF EXIST(.\major.tmp)
! INCLUDE .\major.tmp
! IF [$(RM) .\major.tmp]
! ENDIF
!ELSE
# Change this value for the new version
MAJOR = 9
!ENDIF
!IF EXIST(.\minor.tmp)
! INCLUDE .\minor.tmp
! IF [$(RM) .\minor.tmp]
! ENDIF
!ELSE
# Change this value for the new version
MINOR = 1
!ENDIF
# Read PATCHLEVEL from version.c.
!IF ![cmd.exe /V:ON /Q /C "set LINE=0&& set FIND=0&& \
for /f "tokens=1,3 delims=, " %I in (version.c) do ( \
set /A LINE+=1 > NUL && \
if "%J"=="included_patches[^]" ( \
set /A FIND=LINE+3 > NUL \
) else if "!LINE!"=="!FIND!" ( \
echo PATCHLEVEL=%I> .\patchlvl.tmp && exit \
) \
)"]
!ENDIF
!IF EXIST(.\patchlvl.tmp)
! INCLUDE .\patchlvl.tmp
! IF [$(RM) .\patchlvl.tmp]
! ENDIF
!ENDIF
!IFDEF PATCHLEVEL
RCFLAGS = -DVIM_VERSION_PATCHLEVEL=$(PATCHLEVEL)
!ENDIF
!message Vim version: $(MAJOR).$(MINOR).$(PATCHLEVEL)
!if "$(VIMDLL)" == "yes"
GUI = yes
!endif
!ifndef DIRECTX
DIRECTX = $(GUI)
!endif
# Select a code directory, depends on GUI, OLE, DEBUG, interfaces and etc.
# If you change something else, do "make clean" first!
!if "$(VIMDLL)" == "yes"
OBJDIR = .\ObjD
!elseif "$(GUI)" == "yes"
OBJDIR = .\ObjG
!else
OBJDIR = .\ObjC
!endif
!if "$(DIRECTX)" == "yes" && "$(GUI)" == "yes"
OBJDIR = $(OBJDIR)X
!endif
!if "$(OLE)" == "yes"
OBJDIR = $(OBJDIR)O
!endif
!ifdef LUA
OBJDIR = $(OBJDIR)U
!endif
!ifdef PERL
OBJDIR = $(OBJDIR)L
!endif
!ifdef PYTHON
OBJDIR = $(OBJDIR)Y
!endif
!ifdef PYTHON3
OBJDIR = $(OBJDIR)H
!endif
!ifdef TCL
OBJDIR = $(OBJDIR)T
!endif
!ifdef RUBY
OBJDIR = $(OBJDIR)R
!endif
!ifdef MZSCHEME
OBJDIR = $(OBJDIR)Z
!endif
!ifdef USE_MSVCRT
OBJDIR = $(OBJDIR)V
!endif
!if "$(DEBUG)" == "yes"
OBJDIR = $(OBJDIR)d
!endif
!ifdef CPU
! if "$(CPU)" == "I386"
CPU = i386
! endif
!else # !CPU
CPU = i386
! ifndef PLATFORM
! ifdef TARGET_CPU
PLATFORM = $(TARGET_CPU)
! elseif defined(VSCMD_ARG_TGT_ARCH)
PLATFORM = $(VSCMD_ARG_TGT_ARCH)
! endif
! endif
! ifdef PLATFORM
! if ("$(PLATFORM)" == "x64") || ("$(PLATFORM)" == "X64")
CPU = AMD64
! elseif ("$(PLATFORM)" == "arm64") || ("$(PLATFORM)" == "ARM64")
CPU = ARM64
! elseif ("$(PLATFORM)" != "x86") && ("$(PLATFORM)" != "X86")
! error *** ERROR Unknown target platform "$(PLATFORM)". Make aborted.
! endif
! endif # !PLATFORM
!endif
OBJDIR = $(OBJDIR)$(CPU)
# Build a retail version by default
!if "$(DEBUG)" != "yes"
NODEBUG = 1
!else
! undef NODEBUG
MAKEFLAGS_GVIMEXT = DEBUG=yes
!endif
LINK = link
# Check VC version.
!if [echo MSVCVER=_MSC_VER> msvcver.c && \
echo MSVC_FULL=_MSC_FULL_VER>> msvcver.c && \
$(CC) /EP msvcver.c > msvcver.~ 2> nul]
! message *** ERROR
! message Cannot run Visual C to determine its version. Make sure cl.exe is in your PATH.
! message This can usually be done by running "vcvarsall.bat", located in the bin directory where Visual Studio was installed.
! error Make aborted.
!else
! include msvcver.~
! if [del msvcver.c msvcver.~]
! endif
!endif
!if $(MSVCVER) < 1900
! message *** ERROR
! message Unsupported MSVC version.
! message Please use Visual C++ 2015 or later.
! error Make aborted.
!endif
MSVC_MAJOR = ($(MSVCVER) / 100 - 5)
MSVCRT_VER = ($(MSVCVER) / 100 * 10 - 50)
# Calculate MSVCRT_VER
!if [(set /a MSVCRT_VER="$(MSVCRT_VER)" > nul) && set MSVCRT_VER > msvcrtver.~] == 0
! include msvcrtver.~
! if [del msvcrtver.~]
! endif
!endif
# Show the versions (for debugging).
#!message _MSC_VER=$(MSVCVER)
#!message _MSC_FULL_VER=$(MSVC_FULL)
#!message MSVCRT_VER=$(MSVCRT_VER)
# Base name of the msvcrXX.dll (vcruntimeXXX.dll)
MSVCRT_NAME = vcruntime$(MSVCRT_VER)
### Set the default $(WINVER) to make it work with Windows 7
!ifndef WINVER
WINVER = 0x0601
!endif
# Use multiprocess build
USE_MP = yes
!if "$(FEATURES)" == ""
FEATURES = HUGE
!endif
!ifndef CTAGS
# this assumes ctags is Exuberant ctags
CTAGS = ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S
!endif
!ifndef CSCOPE
CSCOPE = yes
!endif
!if "$(CSCOPE)" == "yes"
# CSCOPE - Include support for Cscope
CSCOPE_DEFS = -DFEAT_CSCOPE
!endif
!ifndef TERMINAL
! if "$(FEATURES)" == "HUGE"
TERMINAL = yes
! else
TERMINAL = no
! endif
!endif
!if "$(TERMINAL)" == "yes"
TERM_OBJ = \
$(OBJDIR)/terminal.obj \
$(OBJDIR)/libvterm/encoding.obj \
$(OBJDIR)/libvterm/keyboard.obj \
$(OBJDIR)/libvterm/mouse.obj \
$(OBJDIR)/libvterm/parser.obj \
$(OBJDIR)/libvterm/pen.obj \
$(OBJDIR)/libvterm/screen.obj \
$(OBJDIR)/libvterm/state.obj \
$(OBJDIR)/libvterm/unicode.obj \
$(OBJDIR)/libvterm/vterm.obj
TERM_DEFS = -DFEAT_TERMINAL
TERM_DEPS = \
libvterm/include/vterm.h \
libvterm/include/vterm_keycodes.h \
libvterm/src/rect.h \
libvterm/src/utf8.h \
libvterm/src/vterm_internal.h
!endif
!ifndef SOUND
! if "$(FEATURES)" == "HUGE"
SOUND = yes
! else
SOUND = no
! endif
!endif
!ifndef SODIUM
SODIUM = no
!endif
!ifndef DYNAMIC_SODIUM
DYNAMIC_SODIUM = yes
!endif
!if "$(SODIUM)" != "no"
! if "$(CPU)" == "AMD64"
SOD_LIB = $(SODIUM)\x64\Release\v143\dynamic
! elseif "$(CPU)" == "i386"
SOD_LIB = $(SODIUM)\Win32\Release\v143\dynamic
! else
SODIUM = no
! endif
!endif
!if "$(SODIUM)" != "no"
SOD_INC = /I "$(SODIUM)\include"
! if "$(DYNAMIC_SODIUM)" == "yes"
SODIUM_DLL = libsodium.dll
SOD_DEFS = -DHAVE_SODIUM -DDYNAMIC_SODIUM -DDYNAMIC_SODIUM_DLL=\"$(SODIUM_DLL)\"
SOD_LIB =
! else
SOD_DEFS = -DHAVE_SODIUM
SOD_LIB = $(SOD_LIB)\libsodium.lib
! endif
!endif
!ifndef NETBEANS
NETBEANS = $(GUI)
!endif
!ifndef CHANNEL
! if "$(FEATURES)" == "HUGE" || "$(TERMINAL)" == "yes"
CHANNEL = yes
! else
CHANNEL = $(GUI)
! endif
!endif
# GUI specific features.
!if "$(GUI)" == "yes"
# Only allow NETBEANS for a GUI build and CHANNEL.
! if "$(NETBEANS)" == "yes" && "$(CHANNEL)" == "yes"
# NETBEANS - Include support for Netbeans integration
NETBEANS_PRO = proto/netbeans.pro
NETBEANS_OBJ = $(OBJDIR)/netbeans.obj
NETBEANS_DEFS = -DFEAT_NETBEANS_INTG
! if "$(NBDEBUG)" == "yes"
NBDEBUG_DEFS = -DNBDEBUG
NBDEBUG_INCL = nbdebug.h
NBDEBUG_SRC = nbdebug.c
! endif
! endif
# DirectWrite (DirectX)
! if "$(DIRECTX)" == "yes"
DIRECTX_DEFS = -DFEAT_DIRECTX -DDYNAMIC_DIRECTX
! if "$(COLOR_EMOJI)" != "no"
DIRECTX_DEFS = $(DIRECTX_DEFS) -DFEAT_DIRECTX_COLOR_EMOJI
! endif
DIRECTX_INCL = gui_dwrite.h
DIRECTX_OBJ = $(OUTDIR)\gui_dwrite.obj
! endif
# Only allow XPM for a GUI build.
! ifndef XPM
! ifndef USE_MSVCRT
# Both XPM and USE_MSVCRT are not set, use the included xpm files, depending
# on the architecture.
! if "$(CPU)" == "AMD64"
XPM = xpm\x64
! elseif "$(CPU)" == "ARM64"
XPM = xpm\arm64
! elseif "$(CPU)" == "i386"
XPM = xpm\x86
! else
XPM = no
! endif
! else # USE_MSVCRT
XPM = no
! endif # USE_MSVCRT
! endif # XPM
! if "$(XPM)" != "no"
# XPM - Include support for XPM signs
# See the xpm directory for more information.
XPM_OBJ = $(OBJDIR)/xpm_w32.obj
XPM_DEFS = -DFEAT_XPM_W32
XPM_LIB = $(XPM)\lib-vc14\libXpm.lib
XPM_INC = -I $(XPM)\include -I $(XPM)\..\include
! endif
!endif # GUI
!if "$(SOUND)" == "yes"
SOUND_PRO = proto/sound.pro
SOUND_OBJ = $(OBJDIR)/sound.obj
SOUND_DEFS = -DFEAT_SOUND
SOUND_LIB = winmm.lib
!endif
!if "$(CHANNEL)" == "yes"
CHANNEL_PRO = proto/job.pro proto/channel.pro
CHANNEL_OBJ = $(OBJDIR)/job.obj $(OBJDIR)/channel.obj
CHANNEL_DEFS = -DFEAT_JOB_CHANNEL -DFEAT_IPV6 -DHAVE_INET_NTOP
NETBEANS_LIB = Ws2_32.lib
!endif
# need advapi32.lib for GetUserName()
# need shell32.lib for ExtractIcon()
# need netapi32.lib for NetUserEnum()
# gdi32.lib and comdlg32.lib for printing support
# ole32.lib and uuid.lib are needed for FEAT_SHORTCUT
CON_LIB = oldnames.lib kernel32.lib advapi32.lib shell32.lib gdi32.lib \
comdlg32.lib ole32.lib netapi32.lib uuid.lib user32.lib \
/machine:$(CPU)
!if "$(DELAYLOAD)" == "yes"
CON_LIB = $(CON_LIB) /DELAYLOAD:comdlg32.dll /DELAYLOAD:ole32.dll DelayImp.lib
!endif
# If you have a fixed directory for $VIM or $VIMRUNTIME, other than the normal
# default, use these lines.
#VIMRCLOC = somewhere
#VIMRUNTIMEDIR = somewhere
CFLAGS = -c /W3 /GF /nologo -I. -Iproto -DHAVE_PATHDEF -DWIN32 -DHAVE_STDINT_H \
$(CSCOPE_DEFS) $(TERM_DEFS) $(SOUND_DEFS) $(NETBEANS_DEFS) \
$(NBDEBUG_DEFS) $(XPM_DEFS) $(SOD_DEFS) $(SOD_INC) \
$(CHANNEL_DEFS) $(DEFINES) \
-DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER) \
/source-charset:utf-8
#>>>>> end of choices
###########################################################################
DEL_TREE = rmdir /s /q
INTDIR = $(OBJDIR)
OUTDIR = $(OBJDIR)
### Validate CPUNR
!if "$(CPU)" == "i386" || "$(CPU)" == "AMD64"
! ifndef CPUNR
# default to SSE2
CPUNR = sse2
! elseif "$(CPU)" == "i386" \
&& ("$(CPUNR)" == "i386" || "$(CPUNR)" == "i486" || "$(CPUNR)" == "i586")
# alias i386, i486 and i586 to i686
! message *** WARNING CPUNR=$(CPUNR) is not a valid target architecture.
! message Windows 7 is the minimum target OS, with a minimum target
! message architecture of i686.
! message Retargeting to i686
CPUNR = i686
! elseif "$(CPUNR)" == "pentium4"
# alias pentium4 to sse2
! message *** WARNING CPUNR=pentium4 is deprecated in favour of sse2.
! message Retargeting to sse2.
CPUNR = sse2
! elseif ("$(CPU)" != "i386" \
|| ("$(CPUNR)" != "any" && "$(CPUNR)" != "i686" \
&& "$(CPUNR)" != "sse" )) \
&& "$(CPUNR)" != "sse2" && "$(CPUNR)" != "avx" \
&& "$(CPUNR)" != "avx2" && "$(CPUNR)" != "avx512"
! error *** ERROR Unknown target architecture "$(CPUNR)". Make aborted.
! endif
!elseif "$(CPU)" == "ARM64"
# TODO: Validate CPUNR.
!endif
# Convert processor ID to MVC-compatible number
!if "$(CPU)" == "i386" || "$(CPU)" == "AMD64"
# IA32/SSE/SSE2 are only supported on x86
! if "$(CPU)" == "i386" \
&& ("$(CPUNR)" == "i686" || "$(CPUNR)" == "any")
CPUARG = /arch:IA32
! elseif "$(CPU)" == "i386" && "$(CPUNR)" == "sse"
CPUARG = /arch:SSE
! elseif "$(CPU)" == "i386" && "$(CPUNR)" == "sse2"
CPUARG = /arch:SSE2
! elseif "$(CPUNR)" == "avx"
CPUARG = /arch:AVX
! elseif "$(CPUNR)" == "avx2"
CPUARG = /arch:AVX2
! elseif "$(CPUNR)" == "avx512"
CPUARG = /arch:AVX512
! endif
!elseif "$(CPU)" == "ARM64" && defined(CPUNR)
CPUARG = /arch:$(CPUNR)
!endif
# Pass CPUARG to GvimExt, to avoid using version-dependent defaults
MAKEFLAGS_GVIMEXT = $(MAKEFLAGS_GVIMEXT) CPUARG="$(CPUARG)"
!if "$(VIMDLL)" == "yes"
VIMDLLBASE = vim
! if "$(CPU)" == "i386"
VIMDLLBASE = $(VIMDLLBASE)32
! else
VIMDLLBASE = $(VIMDLLBASE)64
! endif
! if "$(DEBUG)" == "yes"
VIMDLLBASE = $(VIMDLLBASE)d
! endif
!endif
LIBC =
DEBUGINFO = /Zi
# Use multiprocess build.
!if "$(USE_MP)" == "yes"
CFLAGS = $(CFLAGS) /MP
!endif
# Use static code analysis
!if "$(ANALYZE)" == "yes"
CFLAGS = $(CFLAGS) /analyze
!endif
# Address Sanitizer (ASAN) generally available starting with VS2019 version
# 16.9
!if ("$(ASAN)" == "yes") && ($(MSVC_FULL) >= 192829913)
CFLAGS = $(CFLAGS) /fsanitize=address
!endif
!ifdef NODEBUG
VIM = vim
! if "$(OPTIMIZE)" == "SPACE"
OPTFLAG = /O1
! elseif "$(OPTIMIZE)" == "SPEED"
OPTFLAG = /O2
! else # MAXSPEED
OPTFLAG = /Ox
! endif
# Use link time code generation if not worried about size
! if "$(OPTIMIZE)" != "SPACE"
OPTFLAG = $(OPTFLAG) /GL
! endif
CFLAGS = $(CFLAGS) $(OPTFLAG) -DNDEBUG $(CPUARG)
RCFLAGS = $(RCFLAGS) -DNDEBUG
! ifdef USE_MSVCRT
CFLAGS = $(CFLAGS) /MD
LIBC = msvcrt.lib
! else
CFLAGS = $(CFLAGS) /Zl /MT
LIBC = libcmt.lib
! endif
!else # DEBUG
VIM = vimd
! if ("$(CPU)" == "i386") || ("$(CPU)" == "ix86")
DEBUGINFO = /ZI
! endif
CFLAGS = $(CFLAGS) -D_DEBUG -DDEBUG /Od
RCFLAGS = $(RCFLAGS) -D_DEBUG -DDEBUG
# The /fixed:no is needed for Quantify.
LIBC = /fixed:no
! ifdef USE_MSVCRT
CFLAGS = $(CFLAGS) /MDd
LIBC = $(LIBC) msvcrtd.lib
! else
CFLAGS = $(CFLAGS) /Zl /MTd
LIBC = $(LIBC) libcmtd.lib
! endif
!endif # DEBUG
# Visual Studio 2005 has 'deprecated' many of the standard CRT functions
CFLAGS_DEPR = -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
CFLAGS = $(CFLAGS) $(CFLAGS_DEPR)
!include Make_all.mak
!include testdir\Make_all.mak
INCL = vim.h alloc.h ascii.h ex_cmds.h feature.h errors.h globals.h \
keymap.h macros.h option.h os_dos.h os_win32.h proto.h regexp.h \
spell.h structs.h termdefs.h beval.h $(NBDEBUG_INCL)
OBJ = \
$(OUTDIR)\alloc.obj \
$(OUTDIR)\arabic.obj \
$(OUTDIR)\arglist.obj \
$(OUTDIR)\autocmd.obj \
$(OUTDIR)\beval.obj \
$(OUTDIR)\blob.obj \
$(OUTDIR)\blowfish.obj \
$(OUTDIR)\buffer.obj \
$(OUTDIR)\bufwrite.obj \
$(OUTDIR)\change.obj \
$(OUTDIR)\charset.obj \
$(OUTDIR)\cindent.obj \
$(OUTDIR)\clientserver.obj \
$(OUTDIR)\clipboard.obj \
$(OUTDIR)\cmdexpand.obj \
$(OUTDIR)\cmdhist.obj \
$(OUTDIR)\crypt.obj \
$(OUTDIR)\crypt_zip.obj \
$(OUTDIR)\debugger.obj \
$(OUTDIR)\dict.obj \
$(OUTDIR)\diff.obj \
$(OUTDIR)\digraph.obj \
$(OUTDIR)\drawline.obj \
$(OUTDIR)\drawscreen.obj \
$(OUTDIR)\edit.obj \
$(OUTDIR)\eval.obj \
$(OUTDIR)\evalbuffer.obj \
$(OUTDIR)\evalfunc.obj \
$(OUTDIR)\evalvars.obj \
$(OUTDIR)\evalwindow.obj \
$(OUTDIR)\ex_cmds.obj \
$(OUTDIR)\ex_cmds2.obj \
$(OUTDIR)\ex_docmd.obj \
$(OUTDIR)\ex_eval.obj \
$(OUTDIR)\ex_getln.obj \
$(OUTDIR)\fileio.obj \
$(OUTDIR)\filepath.obj \
$(OUTDIR)\findfile.obj \
$(OUTDIR)\float.obj \
$(OUTDIR)\fold.obj \
$(OUTDIR)\getchar.obj \
$(OUTDIR)\gc.obj \
$(OUTDIR)\gui_xim.obj \
$(OUTDIR)\hardcopy.obj \
$(OUTDIR)\hashtab.obj \
$(OUTDIR)\help.obj \
$(OUTDIR)\highlight.obj \
$(OUTDIR)\if_cscope.obj \
$(OUTDIR)\indent.obj \
$(OUTDIR)\insexpand.obj \
$(OUTDIR)\json.obj \
$(OUTDIR)\list.obj \
$(OUTDIR)\locale.obj \
$(OUTDIR)\logfile.obj \
$(OUTDIR)\main.obj \
$(OUTDIR)\map.obj \
$(OUTDIR)\mark.obj \
$(OUTDIR)\match.obj \
$(OUTDIR)\mbyte.obj \
$(OUTDIR)\memfile.obj \
$(OUTDIR)\memline.obj \
$(OUTDIR)\menu.obj \
$(OUTDIR)\message.obj \
$(OUTDIR)\misc1.obj \
$(OUTDIR)\misc2.obj \
$(OUTDIR)\mouse.obj \
$(OUTDIR)\move.obj \
$(OUTDIR)\normal.obj \
$(OUTDIR)\ops.obj \
$(OUTDIR)\option.obj \
$(OUTDIR)\optionstr.obj \
$(OUTDIR)\os_mswin.obj \
$(OUTDIR)\os_win32.obj \
$(OUTDIR)\pathdef.obj \
$(OUTDIR)\popupmenu.obj \
$(OUTDIR)\popupwin.obj \
$(OUTDIR)\profiler.obj \
$(OUTDIR)\quickfix.obj \
$(OUTDIR)\regexp.obj \
$(OUTDIR)\register.obj \
$(OUTDIR)\scriptfile.obj \
$(OUTDIR)\screen.obj \
$(OUTDIR)\search.obj \
$(OUTDIR)\session.obj \
$(OUTDIR)\sha256.obj \
$(OUTDIR)\sign.obj \
$(OUTDIR)\spell.obj \
$(OUTDIR)\spellfile.obj \
$(OUTDIR)\spellsuggest.obj \
$(OUTDIR)\strings.obj \
$(OUTDIR)\syntax.obj \
$(OUTDIR)\tag.obj \
$(OUTDIR)\term.obj \
$(OUTDIR)\testing.obj \
$(OUTDIR)\textformat.obj \
$(OUTDIR)\textobject.obj \
$(OUTDIR)\textprop.obj \
$(OUTDIR)\time.obj \
$(OUTDIR)\typval.obj \
$(OUTDIR)\ui.obj \
$(OUTDIR)\undo.obj \
$(OUTDIR)\usercmd.obj \
$(OUTDIR)\userfunc.obj \
$(OUTDIR)\vim9class.obj \
$(OUTDIR)\vim9cmds.obj \
$(OUTDIR)\vim9compile.obj \
$(OUTDIR)\vim9execute.obj \
$(OUTDIR)\vim9expr.obj \
$(OUTDIR)\vim9instr.obj \
$(OUTDIR)\vim9script.obj \
$(OUTDIR)\vim9type.obj \
$(OUTDIR)\viminfo.obj \
$(OUTDIR)\winclip.obj \
$(OUTDIR)\window.obj \
!if "$(VIMDLL)" == "yes"
OBJ = $(OBJ) $(OUTDIR)\os_w32dll.obj $(OUTDIR)\vimd.res
EXEOBJC = $(OUTDIR)\os_w32exec.obj $(OUTDIR)\vimc.res
EXEOBJG = $(OUTDIR)\os_w32exeg.obj $(OUTDIR)\vimg.res
CFLAGS = $(CFLAGS) -DVIMDLL
! ifdef MZSCHEME
EXECFLAGS =
EXELIBC = $(LIBC)
! else
EXECFLAGS = -DUSE_OWNSTARTUP /GS-
EXELIBC =
! endif
!else
OBJ = $(OBJ) $(OUTDIR)\os_w32exe.obj $(OUTDIR)\vim.res
!endif
!if "$(OLE)" == "yes"
CFLAGS = $(CFLAGS) -DFEAT_OLE
RCFLAGS = $(RCFLAGS) -DFEAT_OLE
OLE_OBJ = $(OUTDIR)\if_ole.obj
OLE_IDL = if_ole.idl
OLE_LIB = oleaut32.lib
!endif
!ifndef IME
IME = yes
!endif
!if "$(IME)" == "yes"
CFLAGS = $(CFLAGS) -DFEAT_MBYTE_IME
! ifndef DYNAMIC_IME
DYNAMIC_IME = yes
! endif
! if "$(DYNAMIC_IME)" == "yes"
CFLAGS = $(CFLAGS) -DDYNAMIC_IME
! else
IME_LIB = imm32.lib
! endif
!endif
!if "$(GUI)" == "yes"
SUBSYSTEM = windows
CFLAGS = $(CFLAGS) -DFEAT_GUI_MSWIN
RCFLAGS = $(RCFLAGS) -DFEAT_GUI_MSWIN
! if "$(VIMDLL)" == "yes"
SUBSYSTEM_CON = console
GVIM = g$(VIM)
CUI_INCL = iscygpty.h
CUI_OBJ = $(OUTDIR)\iscygpty.obj
RCFLAGS = $(RCFLAGS) -DVIMDLL
! else
VIM = g$(VIM)
! endif
GUI_INCL = \
gui.h
GUI_OBJ = \
$(OUTDIR)\gui.obj \
$(OUTDIR)\gui_beval.obj \
$(OUTDIR)\gui_w32.obj
GUI_LIB = \
version.lib $(IME_LIB) winspool.lib comctl32.lib
!else
SUBSYSTEM = console
CUI_INCL = iscygpty.h
CUI_OBJ = $(OUTDIR)\iscygpty.obj
!endif
SUBSYSTEM_TOOLS = console
XDIFF_OBJ = $(OBJDIR)/xdiffi.obj \
$(OBJDIR)/xemit.obj \
$(OBJDIR)/xprepare.obj \
$(OBJDIR)/xutils.obj \
$(OBJDIR)/xhistogram.obj \
$(OBJDIR)/xpatience.obj
XDIFF_DEPS = \
xdiff/xdiff.h \
xdiff/xdiffi.h \
xdiff/xemit.h \
xdiff/xinclude.h \
xdiff/xmacros.h \
xdiff/xprepare.h \
xdiff/xtypes.h \
xdiff/xutils.h
!if "$(SUBSYSTEM_VER)" != ""
SUBSYSTEM = $(SUBSYSTEM),$(SUBSYSTEM_VER)
SUBSYSTEM_TOOLS = $(SUBSYSTEM_TOOLS),$(SUBSYSTEM_VER)
! if "$(VIMDLL)" == "yes"
SUBSYSTEM_CON = $(SUBSYSTEM_CON),$(SUBSYSTEM_VER)
! endif
# 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"
CFLAGS = $(CFLAGS) $(DIRECTX_DEFS)
GUI_INCL = $(GUI_INCL) $(DIRECTX_INCL)
GUI_OBJ = $(GUI_OBJ) $(DIRECTX_OBJ)
!endif
# iconv.dll library (dynamically loaded)
!ifndef ICONV
ICONV = yes
!endif
!if "$(ICONV)" == "yes"
CFLAGS = $(CFLAGS) -DDYNAMIC_ICONV
!endif
# libintl.dll library
!ifndef GETTEXT
GETTEXT = yes
!endif
!if "$(GETTEXT)" == "yes"
CFLAGS = $(CFLAGS) -DDYNAMIC_GETTEXT
!endif
# TCL interface
!ifdef TCL
! ifndef TCL_VER
TCL_VER = 86
TCL_VER_LONG = 8.6
! endif
! message Tcl requested (version $(TCL_VER)) - root dir is "$(TCL)"
! if "$(DYNAMIC_TCL)" == "yes"
! message Tcl DLL will be loaded dynamically
! ifndef TCL_DLL
TCL_DLL = tcl$(TCL_VER).dll
! endif
CFLAGS = $(CFLAGS) -DFEAT_TCL -DDYNAMIC_TCL -DDYNAMIC_TCL_DLL=\"$(TCL_DLL)\" \
-DDYNAMIC_TCL_VER=\"$(TCL_VER_LONG)\"
TCL_OBJ = $(OUTDIR)\if_tcl.obj
TCL_INC = /I "$(TCL)\Include" /I "$(TCL)"
TCL_LIB = "$(TCL)\lib\tclstub$(TCL_VER).lib"
! else
CFLAGS = $(CFLAGS) -DFEAT_TCL
TCL_OBJ = $(OUTDIR)\if_tcl.obj
TCL_INC = /I "$(TCL)\Include" /I "$(TCL)"
TCL_LIB = "$(TCL)\lib\tcl$(TCL_VER)vc.lib"
! endif
!endif
# Lua interface
!ifdef LUA
! ifndef LUA_VER
LUA_VER = 53
! endif
! message Lua requested (version $(LUA_VER)) - root dir is "$(LUA)"
! if "$(DYNAMIC_LUA)" == "yes"
! message Lua DLL will be loaded dynamically
! endif
CFLAGS = $(CFLAGS) -DFEAT_LUA
LUA_OBJ = $(OUTDIR)\if_lua.obj
LUA_INC = /I "$(LUA)\include" /I "$(LUA)"
! if "$(DYNAMIC_LUA)" == "yes"
CFLAGS = $(CFLAGS) -DDYNAMIC_LUA \
-DDYNAMIC_LUA_DLL=\"lua$(LUA_VER).dll\"
LUA_LIB = /nodefaultlib:lua$(LUA_VER).lib
! else
LUA_LIB = "$(LUA)\lib\lua$(LUA_VER).lib"
! endif
!endif
!if defined(PYTHON) && defined(PYTHON3)
DYNAMIC_PYTHON = yes
DYNAMIC_PYTHON3 = yes
!endif
# PYTHON interface
!ifdef PYTHON
! ifndef PYTHON_VER
PYTHON_VER = 27
! endif
! message Python requested (version $(PYTHON_VER)) - root dir is "$(PYTHON)"
! if "$(DYNAMIC_PYTHON)" == "yes"
! message Python DLL will be loaded dynamically
! endif
CFLAGS = $(CFLAGS) -DFEAT_PYTHON
PYTHON_OBJ = $(OUTDIR)\if_python.obj
PYTHON_INC = /I "$(PYTHON)\Include" /I "$(PYTHON)\PC"
! if "$(DYNAMIC_PYTHON)" == "yes"
CFLAGS = $(CFLAGS) -DDYNAMIC_PYTHON \
-DDYNAMIC_PYTHON_DLL=\"python$(PYTHON_VER).dll\"
PYTHON_LIB = /nodefaultlib:python$(PYTHON_VER).lib
! else
PYTHON_LIB = "$(PYTHON)\libs\python$(PYTHON_VER).lib"
! endif
!endif
# PYTHON3 interface
!ifdef PYTHON3
! ifndef DYNAMIC_PYTHON3_STABLE_ABI
! if "$(DYNAMIC_PYTHON3)" == "yes"
DYNAMIC_PYTHON3_STABLE_ABI = yes
! endif