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