1# Makefile for zlib using Microsoft (Visual) C
2# zlib is copyright (C) 1995-2006 Jean-loup Gailly and Mark Adler
3#
4# Usage:
5#   nmake -f win32/Makefile.msc                          (standard build)
6#   nmake -f win32/Makefile.msc LOC=-DFOO                (nonstandard build)
7#   nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" \
8#         OBJA="inffas32.obj match686.obj"               (use ASM code, x86)
9#   nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF" \
10#         OBJA="inffasx64.obj gvmat64.obj inffas8664.c"  (use ASM code, x64)
11
12# optional build flags
13LOC =
14
15# variables
16!IFDEF DEBUG
17STATICLIB = zlib_debug.lib
18SHAREDLIB = zlib1_debug.dll
19IMPLIB    = zdll_debug.lib
20!ELSE
21STATICLIB = zlib.lib
22SHAREDLIB = zlib1.dll
23IMPLIB    = zdll.lib
24!ENDIF
25
26CC = cl
27AS = ml
28LD = link
29AR = lib
30RC = rc
31!IFDEF DEBUG
32CFLAGS  = -nologo /MDd /Od /Zi /GS /D "DEBUG" /D "_DEBUG" $(LOC)
33!ELSE
34CFLAGS  = -nologo /MD /O2 /GS $(LOC)
35!ENDIF
36WFLAGS  = -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
37ASFLAGS = -coff -Zi $(LOC)
38
39!IF "$(PLATFORM)" == "x86"
40!IFDEF DEBUG
41LDFLAGS = -nologo -debug /SAFESEH /FIXED:NO /dynamicbase
42!ELSE
43LDFLAGS = -nologo -release /debug /SAFESEH /FIXED:NO /dynamicbase
44!ENDIF
45!ELSE
46!IFDEF DEBUG
47LDFLAGS = -nologo -debug /FIXED:NO /dynamicbase
48!ELSE
49LDFLAGS = -nologo -release /debug /FIXED:NO /dynamicbase
50!ENDIF
51!ENDIF
52
53ARFLAGS = -nologo
54RCFLAGS = /dWIN32 /r
55
56OBJS = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj \
57       gzwrite.obj infback.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj \
58       inffast.obj
59OBJA =
60
61
62# targets
63all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) \
64     example.exe minigzip.exe example_d.exe minigzip_d.exe
65
66$(STATICLIB): $(OBJS) $(OBJA)
67	$(AR) $(ARFLAGS) -out:$@ $(OBJS) $(OBJA)
68
69$(IMPLIB): $(SHAREDLIB)
70
71$(SHAREDLIB): win32/zlib.def $(OBJS) $(OBJA) zlib1.res
72	$(LD) $(LDFLAGS) -def:win32/zlib.def -dll -implib:$(IMPLIB) \
73	  -out:$@ -base:0x5A4C0000 $(OBJS) $(OBJA) zlib1.res
74	if exist $@.manifest \
75	  mt -nologo -manifest $@.manifest -outputresource:$@;2
76
77example.exe: example.obj $(STATICLIB)
78	$(LD) $(LDFLAGS) example.obj $(STATICLIB)
79	if exist $@.manifest \
80	  mt -nologo -manifest $@.manifest -outputresource:$@;1
81
82minigzip.exe: minigzip.obj $(STATICLIB)
83	$(LD) $(LDFLAGS) minigzip.obj $(STATICLIB)
84	if exist $@.manifest \
85	  mt -nologo -manifest $@.manifest -outputresource:$@;1
86
87example_d.exe: example.obj $(IMPLIB)
88	$(LD) $(LDFLAGS) -out:$@ example.obj $(IMPLIB)
89	if exist $@.manifest \
90	  mt -nologo -manifest $@.manifest -outputresource:$@;1
91
92minigzip_d.exe: minigzip.obj $(IMPLIB)
93	$(LD) $(LDFLAGS) -out:$@ minigzip.obj $(IMPLIB)
94	if exist $@.manifest \
95	  mt -nologo -manifest $@.manifest -outputresource:$@;1
96
97.c.obj:
98	$(CC) -c $(WFLAGS) $(CFLAGS) $<
99
100{contrib/masmx64}.c.obj:
101	$(CC) -c $(WFLAGS) $(CFLAGS) $<
102
103{contrib/masmx64}.asm.obj:
104	$(AS) -c $(ASFLAGS) $<
105
106{contrib/masmx86}.asm.obj:
107	$(AS) -c $(ASFLAGS) $<
108
109adler32.obj: adler32.c zlib.h zconf.h
110
111compress.obj: compress.c zlib.h zconf.h
112
113crc32.obj: crc32.c zlib.h zconf.h crc32.h
114
115deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h
116
117gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h
118
119gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h
120
121gzread.obj: gzread.c zlib.h zconf.h gzguts.h
122
123gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h
124
125infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
126             inffast.h inffixed.h
127
128inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
129             inffast.h
130
131inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
132             inffast.h inffixed.h
133
134inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h
135
136trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h
137
138uncompr.obj: uncompr.c zlib.h zconf.h
139
140zutil.obj: zutil.c zutil.h zlib.h zconf.h
141
142gvmat64.obj: contrib\masmx64\gvmat64.asm
143
144inffasx64.obj: contrib\masmx64\inffasx64.asm
145
146inffas8664.obj: contrib\masmx64\inffas8664.c zutil.h zlib.h zconf.h \
147		inftrees.h inflate.h inffast.h
148
149inffas32.obj: contrib\masmx86\inffas32.asm
150
151match686.obj: contrib\masmx86\match686.asm
152
153example.obj: example.c zlib.h zconf.h
154
155minigzip.obj: minigzip.c zlib.h zconf.h
156
157zlib1.res: win32/zlib1.rc
158	$(RC) $(RCFLAGS) /fo$@ win32/zlib1.rc
159
160
161# testing
162test: example.exe minigzip.exe
163	example
164	echo hello world | minigzip | minigzip -d
165
166testdll: example_d.exe minigzip_d.exe
167	example_d
168	echo hello world | minigzip_d | minigzip_d -d
169
170
171# cleanup
172clean:
173	-del $(STATICLIB)
174	-del $(SHAREDLIB)
175	-del $(IMPLIB)
176	-del *.obj
177	-del *.res
178	-del *.exp
179	-del *.exe
180	-del *.pdb
181	-del *.manifest
182	-del foo.gz
183