1LIBS = $(LIBS) oleaut32.lib ole32.lib
2
3!IFNDEF MY_NO_UNICODE
4CFLAGS = $(CFLAGS) -DUNICODE -D_UNICODE
5!ENDIF
6
7!IF "$(CC)" != "clang-cl"
8# for link time code generation:
9# CFLAGS = $(CFLAGS) -GL
10!ENDIF
11
12!IFNDEF O
13!IFDEF PLATFORM
14O=$(PLATFORM)
15!ELSE
16O=o
17!ENDIF
18!ENDIF
19
20!IF "$(CC)" != "clang-cl"
21# CFLAGS = $(CFLAGS) -FAsc -Fa$O/asm/
22!ENDIF
23
24
25!IF "$(PLATFORM)" == "x64"
26MY_ML = ml64 -WX
27#-Dx64
28!ELSEIF "$(PLATFORM)" == "arm"
29MY_ML = armasm -WX
30!ELSE
31MY_ML = ml -WX
32# -DABI_CDECL
33!ENDIF
34
35# MY_ML = "$(MY_ML) -Fl$O\asm\
36
37
38!IFDEF UNDER_CE
39RFLAGS = $(RFLAGS) -dUNDER_CE
40!IFDEF MY_CONSOLE
41LFLAGS = $(LFLAGS) /ENTRY:mainACRTStartup
42!ENDIF
43!ELSE
44!IFDEF OLD_COMPILER
45LFLAGS = $(LFLAGS) -OPT:NOWIN98
46!ENDIF
47!IF "$(PLATFORM)" != "arm" && "$(PLATFORM)" != "arm64"
48CFLAGS = $(CFLAGS) -Gr
49!ENDIF
50LIBS = $(LIBS) user32.lib advapi32.lib shell32.lib
51!ENDIF
52
53!IF "$(PLATFORM)" == "arm"
54COMPL_ASM = $(MY_ML) $** $O/$(*B).obj
55!ELSE
56COMPL_ASM = $(MY_ML) -c -Fo$O/ $**
57!ENDIF
58
59!IFDEF OLD_COMPILER
60CFLAGS_WARN_LEVEL = -W4
61!ELSE
62CFLAGS_WARN_LEVEL = -Wall
63!ENDIF
64
65CFLAGS = $(CFLAGS) -nologo -c -Fo$O/ $(CFLAGS_WARN_LEVEL) -WX -EHsc -Gy -GR- -GF
66
67!IF "$(CC)" == "clang-cl"
68
69CFLAGS = $(CFLAGS) \
70  -Werror \
71  -Wall \
72  -Wextra \
73  -Weverything \
74  -Wfatal-errors \
75
76!ENDIF
77
78!IFDEF MY_DYNAMIC_LINK
79CFLAGS = $(CFLAGS) -MD
80!ELSE
81!IFNDEF MY_SINGLE_THREAD
82CFLAGS = $(CFLAGS) -MT
83!ENDIF
84!ENDIF
85
86
87CFLAGS = $(CFLAGS_COMMON) $(CFLAGS)
88
89
90!IFNDEF OLD_COMPILER
91
92CFLAGS = $(CFLAGS) -GS- -Zc:wchar_t
93!IFDEF VCTOOLSVERSION
94!IF "$(VCTOOLSVERSION)" >= "14.00"
95!IF "$(CC)" != "clang-cl"
96CFLAGS = $(CFLAGS) -Zc:throwingNew
97!ENDIF
98!ENDIF
99!ELSE
100# -Zc:forScope is default in VS2010. so we need it only for older versions
101CFLAGS = $(CFLAGS) -Zc:forScope
102!ENDIF
103
104!IFNDEF UNDER_CE
105!IF "$(CC)" != "clang-cl"
106CFLAGS = $(CFLAGS) -MP4
107!ENDIF
108!IFNDEF PLATFORM
109# CFLAGS = $(CFLAGS) -arch:IA32
110!ENDIF
111!ENDIF
112
113!ENDIF
114
115
116!IFDEF MY_CONSOLE
117CFLAGS = $(CFLAGS) -D_CONSOLE
118!ENDIF
119
120!IFNDEF UNDER_CE
121!IF "$(PLATFORM)" == "arm"
122CFLAGS = $(CFLAGS) -D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE
123!ENDIF
124!ENDIF
125
126!IF "$(PLATFORM)" == "x64"
127CFLAGS_O1 = $(CFLAGS) -O1
128!ELSE
129CFLAGS_O1 = $(CFLAGS) -O1
130!ENDIF
131CFLAGS_O2 = $(CFLAGS) -O2
132
133LFLAGS = $(LFLAGS) -nologo -OPT:REF -OPT:ICF -INCREMENTAL:NO
134
135!IFNDEF UNDER_CE
136LFLAGS = $(LFLAGS) /LARGEADDRESSAWARE
137!ENDIF
138
139!IFDEF DEF_FILE
140LFLAGS = $(LFLAGS) -DLL -DEF:$(DEF_FILE)
141!ELSE
142!IF defined(MY_FIXED) && "$(PLATFORM)" != "arm" && "$(PLATFORM)" != "arm64"
143LFLAGS = $(LFLAGS) /FIXED
144!ELSE
145LFLAGS = $(LFLAGS) /FIXED:NO
146!ENDIF
147# /BASE:0x400000
148!ENDIF
149
150!IF "$(PLATFORM)" == "arm64"
151# we can get better compression ratio with ARM64 filter if we change alignment to 4096
152# LFLAGS = $(LFLAGS) /FILEALIGN:4096
153!ENDIF
154
155
156
157# !IF "$(PLATFORM)" == "x64"
158
159!IFDEF SUB_SYS_VER
160
161MY_SUB_SYS_VER=5.02
162
163!IFDEF MY_CONSOLE
164LFLAGS = $(LFLAGS) /SUBSYSTEM:console,$(MY_SUB_SYS_VER)
165!ELSE
166LFLAGS = $(LFLAGS) /SUBSYSTEM:windows,$(MY_SUB_SYS_VER)
167!ENDIF
168
169!ENDIF
170
171
172PROGPATH = $O\$(PROG)
173
174COMPL_O1   = $(CC) $(CFLAGS_O1) $**
175COMPL_O2   = $(CC) $(CFLAGS_O2) $**
176COMPL_PCH  = $(CC) $(CFLAGS_O1) -Yc"StdAfx.h" -Fp$O/a.pch $**
177COMPL      = $(CC) $(CFLAGS_O1) -Yu"StdAfx.h" -Fp$O/a.pch $**
178COMPLB     = $(CC) $(CFLAGS_O1) -Yu"StdAfx.h" -Fp$O/a.pch $<
179COMPLB_O2  = $(CC) $(CFLAGS_O2) $<
180# COMPLB_O2  = $(CC) $(CFLAGS_O2) -Yu"StdAfx.h" -Fp$O/a.pch $<
181
182CFLAGS_C_ALL = $(CFLAGS_O2) $(CFLAGS_C_SPEC)
183
184CCOMPL_PCH  = $(CC) $(CFLAGS_C_ALL) -Yc"Precomp.h" -Fp$O/a.pch $**
185CCOMPL_USE  = $(CC) $(CFLAGS_C_ALL) -Yu"Precomp.h" -Fp$O/a.pch $**
186CCOMPLB_USE = $(CC) $(CFLAGS_C_ALL) -Yu"Precomp.h" -Fp$O/a.pch $<
187CCOMPL      = $(CC) $(CFLAGS_C_ALL) $**
188CCOMPLB     = $(CC) $(CFLAGS_C_ALL) $<
189
190!IF "$(CC)" == "clang-cl"
191COMPL  = $(COMPL) -FI StdAfx.h
192COMPLB = $(COMPLB) -FI StdAfx.h
193CCOMPL_USE  = $(CCOMPL_USE) -FI Precomp.h
194CCOMPLB_USE = $(CCOMPLB_USE) -FI Precomp.h
195!ENDIF
196
197all: $(PROGPATH)
198
199clean:
200	-del /Q $(PROGPATH) $O\*.exe $O\*.dll $O\*.obj $O\*.lib $O\*.exp $O\*.res $O\*.pch $O\*.asm
201
202$O:
203	if not exist "$O" mkdir "$O"
204$O/asm:
205	if not exist "$O/asm" mkdir "$O/asm"
206
207!IF "$(CC)" != "clang-cl"
208# for link time code generation:
209# LFLAGS = $(LFLAGS) -LTCG
210!ENDIF
211
212$(PROGPATH): $O $O/asm $(OBJS) $(DEF_FILE)
213	link $(LFLAGS) -out:$(PROGPATH) $(OBJS) $(LIBS)
214
215!IFNDEF NO_DEFAULT_RES
216$O\resource.res: $(*B).rc
217	rc $(RFLAGS) -fo$@ $**
218!ENDIF
219$O\StdAfx.obj: $(*B).cpp
220	$(COMPL_PCH)
221
222predef: empty.c
223	$(CCOMPL)   /EP /Zc:preprocessor /PD
224predef2: A.cpp
225	$(COMPL)   -EP -Zc:preprocessor -PD
226predef3: A.cpp
227	$(COMPL)   -E -dM 
228predef4: A.cpp
229	$(COMPL_O2)   -E
230