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_AVX_CHUNKSET \
36	-DX86_SSE2_CHUNKSET \
37	-DUNALIGNED_OK \
38	-DUNALIGNED64_OK \
39	#
40LDFLAGS = -nologo -debug -incremental:no -opt:ref -manifest
41ARFLAGS = -nologo
42RCFLAGS = /dWIN32 /r
43DEFFILE = zlib.def
44RCFILE = zlib1.rc
45RESFILE = zlib1.res
46WITH_GZFILEOP = yes
47ZLIB_COMPAT =
48SUFFIX =
49
50OBJS = \
51	adler32.obj \
52	chunkset.obj \
53	chunkset_avx.obj \
54	chunkset_sse.obj \
55	compare258.obj \
56	compare258_avx.obj \
57	compare258_sse.obj \
58	compress.obj \
59	crc32.obj \
60	crc32_comb.obj \
61	crc_folding.obj \
62	deflate.obj \
63	deflate_fast.obj \
64	deflate_quick.obj \
65	deflate_slow.obj \
66	deflate_medium.obj \
67	functable.obj \
68	infback.obj \
69	inflate.obj \
70	inftrees.obj \
71	inffast.obj \
72	insert_string.obj \
73	insert_string_sse.obj \
74	slide_avx.obj \
75	slide_sse.obj \
76	trees.obj \
77	uncompr.obj \
78	zutil.obj \
79	x86.obj \
80	#
81!if "$(ZLIB_COMPAT)" != ""
82WITH_GZFILEOP = yes
83WFLAGS = $(WFLAGS) -DZLIB_COMPAT
84DEFFILE = zlibcompat.def
85!else
86STATICLIB = zlib-ng.lib
87SHAREDLIB = zlib-ng1.dll
88IMPLIB = zngdll.lib
89DEFFILE = zlib-ng.def
90RCFILE = zlib-ng1.rc
91RESFILE = zlib-ng1.res
92SUFFIX = -ng
93!endif
94
95!if "$(WITH_GZFILEOP)" != ""
96WFLAGS = $(WFLAGS) -DWITH_GZFILEOP
97OBJS = $(OBJS) gzlib.obj gzread.obj gzwrite.obj
98!endif
99
100# targets
101all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) \
102     example.exe minigzip.exe example_d.exe minigzip_d.exe
103
104zconf: $(TOP)/zconf$(SUFFIX).h.in
105     $(CP) $(TOP)\zconf$(SUFFIX).h.in $(TOP)\zconf$(SUFFIX).h
106
107$(STATICLIB): zconf $(OBJS)
108	$(AR) $(ARFLAGS) -out:$@ $(OBJS)
109
110$(IMPLIB): $(SHAREDLIB)
111
112$(SHAREDLIB): zconf $(TOP)/win32/$(DEFFILE) $(OBJS) $(RESFILE)
113	$(LD) $(LDFLAGS) -def:$(TOP)/win32/$(DEFFILE) -dll -implib:$(IMPLIB) \
114	  -out:$@ -base:0x5A4C0000 $(OBJS) $(RESFILE)
115	if exist $@.manifest \
116	  mt -nologo -manifest $@.manifest -outputresource:$@;2
117
118example.exe: example.obj gzlib2.obj gzread2.obj gzwrite2.obj $(STATICLIB)
119	$(LD) $(LDFLAGS) example.obj gzlib2.obj gzread2.obj gzwrite2.obj $(STATICLIB)
120	if exist $@.manifest \
121	  mt -nologo -manifest $@.manifest -outputresource:$@;1
122
123minigzip.exe: minigzip.obj gzlib2.obj gzread2.obj gzwrite2.obj $(STATICLIB)
124	$(LD) $(LDFLAGS) minigzip.obj gzlib2.obj gzread2.obj gzwrite2.obj $(STATICLIB)
125	if exist $@.manifest \
126	  mt -nologo -manifest $@.manifest -outputresource:$@;1
127
128example_d.exe: example.obj gzlib2.obj gzread2.obj gzwrite2.obj $(IMPLIB)
129	$(LD) $(LDFLAGS) -out:$@ example.obj gzlib2.obj gzread2.obj gzwrite2.obj $(IMPLIB)
130	if exist $@.manifest \
131	  mt -nologo -manifest $@.manifest -outputresource:$@;1
132
133minigzip_d.exe: minigzip.obj gzlib2.obj gzread2.obj gzwrite2.obj $(IMPLIB)
134	$(LD) $(LDFLAGS) -out:$@ minigzip.obj gzlib2.obj gzread2.obj gzwrite2.obj $(IMPLIB)
135	if exist $@.manifest \
136	  mt -nologo -manifest $@.manifest -outputresource:$@;1
137
138{$(TOP)}.c.obj:
139	$(CC) -c $(WFLAGS) $(CFLAGS) $<
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
162gzlib.obj: $(SRCDIR)/gzlib.c $(SRCDIR)/zbuild.h $(SRCDIR)/gzguts.h $(SRCDIR)/zutil_p.h
163gzread.obj: $(SRCDIR)/gzread.c $(SRCDIR)/zbuild.h $(SRCDIR)/gzguts.h $(SRCDIR)/zutil_p.h
164gzwrite.obj: $(SRCDIR)/gzwrite.c $(SRCDIR)/zbuild.h $(SRCDIR)/gzguts.h $(SRCDIR)/zutil_p.h
165compress.obj: $(SRCDIR)/compress.c $(SRCDIR)/zbuild.h $(SRCDIR)/zlib$(SUFFIX).h
166uncompr.obj: $(SRCDIR)/uncompr.c $(SRCDIR)/zbuild.h $(SRCDIR)/zlib$(SUFFIX).h
167chunkset.obj: $(SRCDIR)/zbuild.h $(SRCDIR)/zutil.h
168chunkset_avx.obj: $(SRCDIR)/arch/x86/chunkset_avx.c $(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
171crc32_comb.obj: $(SRCDIR)/crc32_comb.c $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/crc32_comb_tbl.h
172deflate.obj: $(SRCDIR)/deflate.c $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/deflate_p.h $(SRCDIR)/functable.h
173deflate_fast.obj: $(SRCDIR)/deflate_fast.c $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/deflate_p.h $(SRCDIR)/functable.h
174deflate_medium.obj: $(SRCDIR)/deflate_medium.c $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/deflate_p.h $(SRCDIR)/functable.h
175deflate_quick.obj: $(SRCDIR)/deflate_quick.c $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/deflate_p.h $(SRCDIR)/functable.h $(SRCDIR)/trees_emit.h
176deflate_slow.obj: $(SRCDIR)/deflate_slow.c $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/deflate_p.h $(SRCDIR)/functable.h
177infback.obj: $(SRCDIR)/infback.c $(SRCDIR)/zbuild.h $(SRCDIR)/zutil.h $(SRCDIR)/inftrees.h $(SRCDIR)/inflate.h $(SRCDIR)/inffast.h
178inffast.obj: $(SRCDIR)/inffast.c $(SRCDIR)/zbuild.h $(SRCDIR)/zutil.h $(SRCDIR)/inftrees.h $(SRCDIR)/inflate.h $(SRCDIR)/inffast.h $(SRCDIR)/functable.h
179inflate.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
180inftrees.obj: $(SRCDIR)/inftrees.c $(SRCDIR)/zbuild.h $(SRCDIR)/zutil.h $(SRCDIR)/inftrees.h
181slide_sse.obj: $(SRCDIR)/arch/x86/slide_sse.c $(SRCDIR)/deflate.h
182trees.obj: $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/trees_tbl.h
183zutil.obj: $(SRCDIR)/zbuild.h $(SRCDIR)/zutil.h $(SRCDIR)/zutil_p.h
184
185example.obj: $(TOP)/test/example.c $(TOP)/zbuild.h $(TOP)/zlib$(SUFFIX).h
186
187minigzip.obj: $(TOP)/test/minigzip.c $(TOP)/zbuild.h $(TOP)/zlib$(SUFFIX).h
188
189$(RESFILE): $(TOP)/win32/$(RCFILE)
190	$(RC) $(RCFLAGS) /fo$@ $(TOP)/win32/$(RCFILE)
191
192# testing
193test: example.exe minigzip.exe
194	example
195	echo hello world | minigzip | minigzip -d
196
197testdll: example_d.exe minigzip_d.exe
198	example_d
199	echo hello world | minigzip_d | minigzip_d -d
200
201
202# cleanup
203clean:
204	-del $(STATICLIB)
205	-del $(SHAREDLIB)
206	-del $(IMPLIB)
207	-del *.obj
208	-del *.res
209	-del *.exp
210	-del *.exe
211	-del *.pdb
212	-del *.manifest
213
214distclean: clean
215	-del zconf$(SUFFIX).h
216