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