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
8# The toplevel directory of the source tree.
9#
10TOP = .
11
12# optional build flags
13LOC =
14
15# variables
16STATICLIB = zlib.lib
17SHAREDLIB = zlib1.dll
18IMPLIB    = zdll.lib
19
20CC = cl
21LD = link
22AR = lib
23RC = rc
24CP = copy /y
25CFLAGS  = -nologo -MD -W3 -O2 -Oy- -Zi -Fd"zlib" $(LOC)
26WFLAGS  = \
27	-D_CRT_SECURE_NO_DEPRECATE \
28	-D_CRT_NONSTDC_NO_DEPRECATE \
29	-DX86_FEATURES \
30	-DX86_PCLMULQDQ_CRC \
31	-DX86_SSE2 \
32	-DX86_SSE42_CRC_INTRIN \
33	-DX86_SSE42_CRC_HASH \
34	-DX86_AVX2 \
35	-DX86_SSE2_CHUNKSET \
36	-DUNALIGNED_OK \
37	-DUNALIGNED64_OK \
38	#
39LDFLAGS = -nologo -debug -incremental:no -opt:ref -manifest
40ARFLAGS = -nologo
41RCFLAGS = /dWIN32 /r
42DEFFILE = zlib.def
43RCFILE = zlib1.rc
44RESFILE = zlib1.res
45WITH_GZFILEOP =
46ZLIB_COMPAT =
47SUFFIX =
48
49OBJS = \
50	adler32.obj \
51	chunkset.obj \
52	chunkset_sse.obj \
53	compare258.obj \
54	compare258_avx.obj \
55	compare258_sse.obj \
56	compress.obj \
57	crc32.obj \
58	crc_folding.obj \
59	deflate.obj \
60	deflate_fast.obj \
61	deflate_quick.obj \
62	deflate_slow.obj \
63	deflate_medium.obj \
64	functable.obj \
65	infback.obj \
66	inflate.obj \
67	inftrees.obj \
68	inffast.obj \
69	insert_string.obj \
70	insert_string_sse.obj \
71	slide_avx.obj \
72	slide_sse.obj \
73	trees.obj \
74	uncompr.obj \
75	zutil.obj \
76	x86.obj \
77	#
78!if "$(ZLIB_COMPAT)" != ""
79WITH_GZFILEOP = yes
80WFLAGS = $(WFLAGS) -DZLIB_COMPAT
81DEFFILE = zlibcompat.def
82!else
83STATICLIB = zlib-ng.lib
84SHAREDLIB = zlib-ng1.dll
85IMPLIB = zngdll.lib
86DEFFILE = zlib-ng.def
87RCFILE = zlib-ng1.rc
88RESFILE = zlib-ng1.res
89SUFFIX = -ng
90!endif
91
92!if "$(WITH_GZFILEOP)" != ""
93WFLAGS = $(WFLAGS) -DWITH_GZFILEOP
94OBJS = $(OBJS) gzclose.obj gzlib.obj gzread.obj gzwrite.obj
95!endif
96
97# targets
98all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) \
99     example.exe minigzip.exe example_d.exe minigzip_d.exe
100
101zconf: $(TOP)/zconf$(SUFFIX).h.in
102     $(CP) $(TOP)\zconf$(SUFFIX).h.in $(TOP)\zconf$(SUFFIX).h
103
104$(STATICLIB): zconf $(OBJS)
105	$(AR) $(ARFLAGS) -out:$@ $(OBJS)
106
107$(IMPLIB): $(SHAREDLIB)
108
109$(SHAREDLIB): zconf $(TOP)/win32/$(DEFFILE) $(OBJS) $(RESFILE)
110	$(LD) $(LDFLAGS) -def:$(TOP)/win32/$(DEFFILE) -dll -implib:$(IMPLIB) \
111	  -out:$@ -base:0x5A4C0000 $(OBJS) $(RESFILE)
112	if exist $@.manifest \
113	  mt -nologo -manifest $@.manifest -outputresource:$@;2
114
115example.exe: example.obj gzclose2.obj gzlib2.obj gzread2.obj gzwrite2.obj $(STATICLIB)
116	$(LD) $(LDFLAGS) example.obj gzclose2.obj gzlib2.obj gzread2.obj gzwrite2.obj $(STATICLIB)
117	if exist $@.manifest \
118	  mt -nologo -manifest $@.manifest -outputresource:$@;1
119
120minigzip.exe: minigzip.obj gzclose2.obj gzlib2.obj gzread2.obj gzwrite2.obj $(STATICLIB)
121	$(LD) $(LDFLAGS) minigzip.obj gzclose2.obj gzlib2.obj gzread2.obj gzwrite2.obj $(STATICLIB)
122	if exist $@.manifest \
123	  mt -nologo -manifest $@.manifest -outputresource:$@;1
124
125example_d.exe: example.obj gzclose2.obj gzlib2.obj gzread2.obj gzwrite2.obj $(IMPLIB)
126	$(LD) $(LDFLAGS) -out:$@ example.obj gzclose2.obj gzlib2.obj gzread2.obj gzwrite2.obj $(IMPLIB)
127	if exist $@.manifest \
128	  mt -nologo -manifest $@.manifest -outputresource:$@;1
129
130minigzip_d.exe: minigzip.obj gzclose2.obj gzlib2.obj gzread2.obj gzwrite2.obj $(IMPLIB)
131	$(LD) $(LDFLAGS) -out:$@ minigzip.obj gzclose2.obj gzlib2.obj gzread2.obj gzwrite2.obj $(IMPLIB)
132	if exist $@.manifest \
133	  mt -nologo -manifest $@.manifest -outputresource:$@;1
134
135{$(TOP)}.c.obj:
136	$(CC) -c $(WFLAGS) $(CFLAGS) $<
137
138gzclose2.obj: gzclose.c
139	$(CC) -c $(WFLAGS) $(CFLAGS) -DWITH_GZFILEOP -Fogzclose2.obj gzclose.c
140
141gzlib2.obj: gzlib.c
142	$(CC) -c $(WFLAGS) $(CFLAGS) -DWITH_GZFILEOP -Fogzlib2.obj gzlib.c
143
144gzread2.obj: gzread.c
145	$(CC) -c $(WFLAGS) $(CFLAGS) -DWITH_GZFILEOP -Fogzread2.obj gzread.c
146
147gzwrite2.obj: gzwrite.c
148	$(CC) -c $(WFLAGS) $(CFLAGS) -DWITH_GZFILEOP -Fogzwrite2.obj gzwrite.c
149
150{$(TOP)/arch/x86}.c.obj:
151	$(CC) -c -I$(TOP) $(WFLAGS) $(CFLAGS) $<
152
153{$(TOP)/test}.c.obj:
154	$(CC) -c -I$(TOP) $(WFLAGS) $(CFLAGS) -DWITH_GZFILEOP $<
155
156$(TOP)/zconf$(SUFFIX).h: zconf
157
158SRCDIR = $(TOP)
159# Keep the dependences in sync with top-level Makefile.in
160adler32.obj: $(SRCDIR)/adler32.c $(SRCDIR)/zbuild.h $(SRCDIR)/zutil.h $(SRCDIR)/functable.h $(SRCDIR)/adler32_p.h
161functable.obj: $(SRCDIR)/functable.c $(SRCDIR)/zbuild.h $(SRCDIR)/functable.h $(SRCDIR)/deflate.h $(SRCDIR)/deflate_p.h $(SRCDIR)/zendian.h $(SRCDIR)/arch/x86/x86.h
162gzclose.obj: $(SRCDIR)/gzclose.c $(SRCDIR)/zbuild.h $(SRCDIR)/gzguts.h
163gzlib.obj: $(SRCDIR)/gzlib.c $(SRCDIR)/zbuild.h $(SRCDIR)/gzguts.h
164gzread.obj: $(SRCDIR)/gzread.c $(SRCDIR)/zbuild.h $(SRCDIR)/gzguts.h
165gzwrite.obj: $(SRCDIR)/gzwrite.c $(SRCDIR)/zbuild.h $(SRCDIR)/gzguts.h
166compress.obj: $(SRCDIR)/compress.c $(SRCDIR)/zbuild.h $(SRCDIR)/zlib$(SUFFIX).h
167uncompr.obj: $(SRCDIR)/uncompr.c $(SRCDIR)/zbuild.h $(SRCDIR)/zlib$(SUFFIX).h
168chunkset.obj: $(SRCDIR)/zbuild.h $(SRCDIR)/zutil.h
169chunkset_sse.obj: $(SRCDIR)/arch/x86/chunkset_sse.c $(SRCDIR)/zbuild.h $(SRCDIR)/zutil.h
170crc32.obj: $(SRCDIR)/crc32.c $(SRCDIR)/zbuild.h $(SRCDIR)/zendian.h $(SRCDIR)/deflate.h $(SRCDIR)/functable.h $(SRCDIR)/crc32_tbl.h
171deflate.obj: $(SRCDIR)/deflate.c $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/deflate_p.h $(SRCDIR)/functable.h
172deflate_fast.obj: $(SRCDIR)/deflate_fast.c $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/deflate_p.h $(SRCDIR)/functable.h
173deflate_medium.obj: $(SRCDIR)/deflate_medium.c $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/deflate_p.h $(SRCDIR)/functable.h
174deflate_quick.obj: $(SRCDIR)/deflate_quick.c $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/deflate_p.h $(SRCDIR)/functable.h $(SRCDIR)/trees_emit.h
175deflate_slow.obj: $(SRCDIR)/deflate_slow.c $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/deflate_p.h $(SRCDIR)/functable.h
176infback.obj: $(SRCDIR)/infback.c $(SRCDIR)/zbuild.h $(SRCDIR)/zutil.h $(SRCDIR)/inftrees.h $(SRCDIR)/inflate.h $(SRCDIR)/inffast.h
177inffast.obj: $(SRCDIR)/inffast.c $(SRCDIR)/zbuild.h $(SRCDIR)/zutil.h $(SRCDIR)/inftrees.h $(SRCDIR)/inflate.h $(SRCDIR)/inffast.h $(SRCDIR)/functable.h
178inflate.obj: $(SRCDIR)/inflate.c $(SRCDIR)/zbuild.h $(SRCDIR)/zutil.h $(SRCDIR)/inftrees.h $(SRCDIR)/inflate.h $(SRCDIR)/inffast.h $(SRCDIR)/functable.h $(SRCDIR)/functable.h
179inftrees.obj: $(SRCDIR)/inftrees.c $(SRCDIR)/zbuild.h $(SRCDIR)/zutil.h $(SRCDIR)/inftrees.h
180slide_sse.obj: $(SRCDIR)/arch/x86/slide_sse.c $(SRCDIR)/deflate.h
181trees.obj: $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/trees_tbl.h
182zutil.obj: $(SRCDIR)/zbuild.h $(SRCDIR)/zutil.h $(SRCDIR)/gzguts.h
183
184example.obj: $(TOP)/test/example.c $(TOP)/zbuild.h $(TOP)/zlib$(SUFFIX).h
185
186minigzip.obj: $(TOP)/test/minigzip.c $(TOP)/zbuild.h $(TOP)/zlib$(SUFFIX).h
187
188$(RESFILE): $(TOP)/win32/$(RCFILE)
189	$(RC) $(RCFLAGS) /fo$@ $(TOP)/win32/$(RCFILE)
190
191# testing
192test: example.exe minigzip.exe
193	example
194	echo hello world | minigzip | minigzip -d
195
196testdll: example_d.exe minigzip_d.exe
197	example_d
198	echo hello world | minigzip_d | minigzip_d -d
199
200
201# cleanup
202clean:
203	-del $(STATICLIB)
204	-del $(SHAREDLIB)
205	-del $(IMPLIB)
206	-del *.obj
207	-del *.res
208	-del *.exp
209	-del *.exe
210	-del *.pdb
211	-del *.manifest
212
213distclean: clean
214	-del zconf$(SUFFIX).h
215