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.arm                          (standard build)
6#   nmake -f win32/Makefile.arm 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
19SYMBOL_PREFIX =
20
21CC = cl
22LD = link
23AR = lib
24RC = rc
25CP = copy /y
26CFLAGS  = -nologo -MD -W3 -O2 -Oy- -Zi -Fd"zlib" $(LOC)
27WFLAGS  = \
28	-D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1 \
29	-D_CRT_SECURE_NO_DEPRECATE \
30	-D_CRT_NONSTDC_NO_DEPRECATE \
31	-DARM_FEATURES \
32	-DARM_NEON_HASLD4 \
33	#
34LDFLAGS = -nologo -debug -incremental:no -opt:ref -manifest
35ARFLAGS = -nologo
36RCFLAGS = /dARM /r
37DEFFILE = zlib.def
38RCFILE = zlib1.rc
39RESFILE = zlib1.res
40WITH_GZFILEOP = yes
41ZLIB_COMPAT =
42WITH_ACLE =
43WITH_NEON =
44WITH_VFPV3 =
45NEON_ARCH = /arch:VFPv4
46SUFFIX =
47
48OBJS = \
49	adler32.obj \
50	adler32_fold.obj \
51	arm_features.obj \
52	chunkset.obj \
53	compare256.obj \
54	compress.obj \
55	cpu_features.obj \
56	crc32_braid.obj \
57	crc32_braid_comb.obj \
58	crc32_fold.obj \
59	deflate.obj \
60	deflate_fast.obj \
61	deflate_huff.obj \
62	deflate_medium.obj \
63	deflate_quick.obj \
64	deflate_rle.obj \
65	deflate_slow.obj \
66	deflate_stored.obj \
67	functable.obj \
68	infback.obj \
69	inflate.obj \
70	inftrees.obj \
71	inffast.obj \
72	insert_string.obj \
73	insert_string_roll.obj \
74	slide_hash.obj \
75	trees.obj \
76	uncompr.obj \
77	zutil.obj \
78	#
79!if "$(ZLIB_COMPAT)" != ""
80WITH_GZFILEOP = yes
81WFLAGS = $(WFLAGS) -DZLIB_COMPAT
82DEFFILE = zlibcompat.def
83!else
84STATICLIB = zlib-ng.lib
85SHAREDLIB = zlib-ng1.dll
86IMPLIB = zngdll.lib
87DEFFILE = zlib-ng.def
88RCFILE = zlib-ng1.rc
89RESFILE = zlib-ng1.res
90SUFFIX = -ng
91!endif
92
93!if "$(WITH_GZFILEOP)" != ""
94WFLAGS = $(WFLAGS) -DWITH_GZFILEOP
95OBJS = $(OBJS) gzlib.obj gzread.obj gzwrite.obj
96!endif
97
98!if "$(WITH_ACLE)" != ""
99WFLAGS = $(WFLAGS) -DARM_ACLE_CRC_HASH
100OBJS = $(OBJS) crc32_acle.obj insert_string_acle.obj
101!endif
102!if "$(WITH_VFPV3)" != ""
103NEON_ARCH = /arch:VFPv3
104!endif
105!if "$(WITH_NEON)" != ""
106CFLAGS = $(CFLAGS) $(NEON_ARCH)
107WFLAGS = $(WFLAGS) \
108	-D__ARM_NEON__=1 \
109	-DARM_NEON \
110	-DARM_NEON_ADLER32 \
111	-DARM_NEON_CHUNKSET \
112	-DARM_NEON_SLIDEHASH \
113	-DARM_NOCHECK_NEON \
114	#
115OBJS = $(OBJS) adler32_neon.obj chunkset_neon.obj compare256_neon.obj slide_hash_neon.obj
116!endif
117
118# targets
119all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) \
120     example.exe minigzip.exe example_d.exe minigzip_d.exe
121
122!if "$(SYMBOL_PREFIX)" != ""
123zlib_name_mangling$(SUFFIX).h: zlib_name_mangling$(SUFFIX).h.in
124	cscript $(TOP)\win32\replace.vbs $(TOP)\zlib_name_mangling$(SUFFIX).h.in zlib_name_mangling$(SUFFIX).h "@ZLIB_SYMBOL_PREFIX@" "$(SYMBOL_PREFIX)"
125!else
126zlib_name_mangling$(SUFFIX).h: zlib_name_mangling.h.empty
127	$(CP) $(TOP)\zlib_name_mangling.h.empty zlib_name_mangling$(SUFFIX).h
128!endif
129
130zlib$(SUFFIX).h: zlib$(SUFFIX).h.in
131	cscript $(TOP)\win32\replace.vbs $(TOP)\zlib$(SUFFIX).h.in zlib$(SUFFIX).h "@ZLIB_SYMBOL_PREFIX@" "$(SYMBOL_PREFIX)"
132
133gzread.c: gzread.c.in
134	cscript $(TOP)\win32\replace.vbs $(TOP)\gzread.c.in gzread.c "@ZLIB_SYMBOL_PREFIX@" "$(SYMBOL_PREFIX)"
135
136zconf: $(TOP)/zconf$(SUFFIX).h.in $(TOP)/zlib$(SUFFIX).h $(TOP)/zlib_name_mangling$(SUFFIX).h
137	$(CP) $(TOP)\zconf$(SUFFIX).h.in $(TOP)\zconf$(SUFFIX).h
138
139$(TOP)/win32/$(DEFFILE): $(TOP)/win32/$(DEFFILE).in
140	cscript $(TOP)\win32\replace.vbs $(TOP)/win32/$(DEFFILE).in $(TOP)/win32/$(DEFFILE) "@ZLIB_SYMBOL_PREFIX@" "$(SYMBOL_PREFIX)"
141
142$(STATICLIB): zconf $(OBJS)
143	$(AR) $(ARFLAGS) -out:$@ $(OBJS)
144
145$(IMPLIB): $(SHAREDLIB)
146
147$(SHAREDLIB): zconf $(TOP)/win32/$(DEFFILE) $(OBJS) $(RESFILE)
148	$(LD) $(LDFLAGS) -def:$(TOP)/win32/$(DEFFILE) -dll -implib:$(IMPLIB) \
149	  -out:$@ -base:0x5A4C0000 $(OBJS) $(RESFILE)
150	if exist $@.manifest \
151	  mt -nologo -manifest $@.manifest -outputresource:$@;2
152
153example.exe: example.obj gzlib2.obj gzread2.obj gzwrite2.obj $(STATICLIB)
154	$(LD) $(LDFLAGS) example.obj gzlib2.obj gzread2.obj gzwrite2.obj $(STATICLIB)
155	if exist $@.manifest \
156	  mt -nologo -manifest $@.manifest -outputresource:$@;1
157
158minigzip.exe: minigzip.obj gzlib2.obj gzread2.obj gzwrite2.obj $(STATICLIB)
159	$(LD) $(LDFLAGS) minigzip.obj gzlib2.obj gzread2.obj gzwrite2.obj $(STATICLIB)
160	if exist $@.manifest \
161	  mt -nologo -manifest $@.manifest -outputresource:$@;1
162
163example_d.exe: example.obj gzlib2.obj gzread2.obj gzwrite2.obj $(IMPLIB)
164	$(LD) $(LDFLAGS) -out:$@ example.obj gzlib2.obj gzread2.obj gzwrite2.obj $(IMPLIB)
165	if exist $@.manifest \
166	  mt -nologo -manifest $@.manifest -outputresource:$@;1
167
168minigzip_d.exe: minigzip.obj gzlib2.obj gzread2.obj gzwrite2.obj $(IMPLIB)
169	$(LD) $(LDFLAGS) -out:$@ minigzip.obj gzlib2.obj gzread2.obj gzwrite2.obj $(IMPLIB)
170	if exist $@.manifest \
171	  mt -nologo -manifest $@.manifest -outputresource:$@;1
172
173{$(TOP)}.c.obj:
174	$(CC) -c $(WFLAGS) $(CFLAGS) $<
175
176gzlib2.obj: gzlib.c
177	$(CC) -c $(WFLAGS) $(CFLAGS) -DWITH_GZFILEOP -Fogzlib2.obj gzlib.c
178
179gzread2.obj: gzread.c
180	$(CC) -c $(WFLAGS) $(CFLAGS) -DWITH_GZFILEOP -Fogzread2.obj gzread.c
181
182gzwrite2.obj: gzwrite.c
183	$(CC) -c $(WFLAGS) $(CFLAGS) -DWITH_GZFILEOP -Fogzwrite2.obj gzwrite.c
184
185{$(TOP)/arch/arm}.c.obj:
186	$(CC) -c -I$(TOP) $(WFLAGS) $(CFLAGS) $<
187
188{$(TOP)/test}.c.obj:
189	$(CC) -c -I$(TOP) $(WFLAGS) $(CFLAGS) -DWITH_GZFILEOP $<
190
191$(TOP)/zconf$(SUFFIX).h: zconf
192
193SRCDIR = $(TOP)
194# Keep the dependences in sync with top-level Makefile.in
195adler32.obj: $(SRCDIR)/adler32.c $(SRCDIR)/zbuild.h $(SRCDIR)/zutil.h $(SRCDIR)/functable.h $(SRCDIR)/adler32_p.h
196adler32_fold.obj: $(SRCDIR)/adler32_fold.c $(SRCDIR)/zbuild.h $(SRCDIR)/adler32_fold.h $(SRCDIR)/functable.h
197functable.obj: $(SRCDIR)/functable.c $(SRCDIR)/zbuild.h $(SRCDIR)/functable.h $(SRCDIR)/deflate.h $(SRCDIR)/deflate_p.h $(SRCDIR)/zendian.h $(SRCDIR)/arch/x86/x86_features.h
198gzlib.obj: $(SRCDIR)/gzlib.c $(SRCDIR)/zbuild.h $(SRCDIR)/gzguts.h $(SRCDIR)/zutil_p.h
199gzread.obj: $(SRCDIR)/gzread.c $(SRCDIR)/zbuild.h $(SRCDIR)/gzguts.h $(SRCDIR)/zutil_p.h
200gzwrite.obj: $(SRCDIR)/gzwrite.c $(SRCDIR)/zbuild.h $(SRCDIR)/gzguts.h $(SRCDIR)/zutil_p.h
201compress.obj: $(SRCDIR)/compress.c $(SRCDIR)/zbuild.h $(SRCDIR)/zlib$(SUFFIX).h
202uncompr.obj: $(SRCDIR)/uncompr.c $(SRCDIR)/zbuild.h $(SRCDIR)/zlib$(SUFFIX).h
203chunkset.obj: $(SRCDIR)/zbuild.h $(SRCDIR)/zutil.h
204cpu_features.obj: $(SRCDIR)/cpu_features.c $(SRCDIR)/zbuild.h $(SRCDIR)/zutil.h
205crc32_braid.obj: $(SRCDIR)/crc32_braid.c $(SRCDIR)/zbuild.h $(SRCDIR)/zendian.h $(SRCDIR)/deflate.h $(SRCDIR)/functable.h $(SRCDIR)/crc32_braid_p.h $(SRCDIR)/crc32_braid_tbl.h
206crc32_braid_comb.obj: $(SRCDIR)/crc32_braid_comb.c $(SRCDIR)/zbuild.h $(SRCDIR)/zutil.h $(SRCDIR)/crc32_braid_p.h $(SRCDIR)/crc32_braid_tbl.h $(SRCDIR)/crc32_braid_comb_p.h
207crc32_fold.obj: $(SRCDIR)/crc32_fold.c $(SRCDIR)/zbuild.h
208deflate.obj: $(SRCDIR)/deflate.c $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/deflate_p.h $(SRCDIR)/functable.h
209deflate_fast.obj: $(SRCDIR)/deflate_fast.c $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/deflate_p.h $(SRCDIR)/functable.h
210deflate_huff.obj: $(SRCDIR)/deflate_huff.c $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/deflate_p.h $(SRCDIR)/functable.h
211deflate_medium.obj: $(SRCDIR)/deflate_medium.c $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/deflate_p.h $(SRCDIR)/functable.h
212deflate_quick.obj: $(SRCDIR)/deflate_quick.c $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/deflate_p.h $(SRCDIR)/functable.h $(SRCDIR)/trees_emit.h
213deflate_rle.obj: $(SRCDIR)/deflate_rle.c $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/deflate_p.h $(SRCDIR)/functable.h
214deflate_slow.obj: $(SRCDIR)/deflate_slow.c $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/deflate_p.h $(SRCDIR)/functable.h
215deflate_stored.obj: $(SRCDIR)/deflate_stored.c $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/deflate_p.h $(SRCDIR)/functable.h
216infback.obj: $(SRCDIR)/infback.c $(SRCDIR)/zbuild.h $(SRCDIR)/zutil.h $(SRCDIR)/inftrees.h $(SRCDIR)/inflate.h $(SRCDIR)/inffast.h
217inffast.obj: $(SRCDIR)/inffast.c $(SRCDIR)/zbuild.h $(SRCDIR)/zutil.h $(SRCDIR)/inftrees.h $(SRCDIR)/inflate.h $(SRCDIR)/inffast.h $(SRCDIR)/functable.h
218inflate.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
219inftrees.obj: $(SRCDIR)/inftrees.c $(SRCDIR)/zbuild.h $(SRCDIR)/zutil.h $(SRCDIR)/inftrees.h
220slide_hash.obj: $(SRCDIR)/slide_hash.c $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h
221trees.obj: $(SRCDIR)/zbuild.h $(SRCDIR)/deflate.h $(SRCDIR)/trees_tbl.h
222zutil.obj: $(SRCDIR)/zbuild.h $(SRCDIR)/zutil.h $(SRCDIR)/zutil_p.h
223
224example.obj: $(TOP)/test/example.c $(TOP)/zbuild.h $(TOP)/zlib$(SUFFIX).h
225
226minigzip.obj: $(TOP)/test/minigzip.c $(TOP)/zbuild.h $(TOP)/zlib$(SUFFIX).h
227
228$(RESFILE): $(TOP)/win32/$(RCFILE)
229	$(RC) $(RCFLAGS) /fo$@ $(TOP)/win32/$(RCFILE)
230
231# testing
232test: example.exe minigzip.exe
233	example
234	echo hello world | minigzip | minigzip -d
235
236testdll: example_d.exe minigzip_d.exe
237	example_d
238	echo hello world | minigzip_d | minigzip_d -d
239
240
241# cleanup
242clean:
243	-del $(STATICLIB)
244	-del $(SHAREDLIB)
245	-del $(IMPLIB)
246	-del *.obj
247	-del *.res
248	-del *.exp
249	-del *.exe
250	-del *.pdb
251	-del *.manifest
252
253distclean: clean
254	-del zconf$(SUFFIX).h
255	-del zlib$(SUFFIX).h
256	-del zlib_name_mangling$(SUFFIX).h
257	-del $(TOP)\win32\zlib.def
258	-del $(TOP)\win32\zlibcompat.def
259	-del $(TOP)\win32\zlib-ng.def
260	-del gzread.c
261