# Makefile for zlib -- Microsoft (Visual) C
#
# Authors:
#   Cosmin Truta, 11-Mar-2003
#   Christian Spieler, 19-Mar-2003
#
# Last updated:
#   Cosmin Truta, 27-Aug-2003
#
# Usage:
#   nmake -f win32/Makefile.msc            (standard build)
#   nmake -f win32/Makefile.msc LOC=-DFOO  (nonstandard build)
#   nmake -f win32/Makefile.msc LOC=-DASMV OBJA=match.obj  (use ASM code)


# variables
STATICLIB = zlib64.lib
SHAREDLIB = zlib64.dll
IMPLIB    = zdll64.lib

CC        = cl
AS        = ml64
LD        = link
AR        = lib
RC        = rc
ARFLAGS   = -nologo
ASFLAGS   = -coff
# CFLAGS    = -nologo -MD -Ox
CFLAGS    = -nologo -MD -Ox /DASMV /DASMINF
LDFLAGS   = -nologo -release
RCFLAGS   = /dWIN64 /r
LIBS      = bufferoverflowu.lib

#OBJA      = inffast.obj
OBJA      = gvmat64.obj inffas8664.obj inffasx64.obj 

OBJS = adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infback.obj \
       inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj $(OBJA)


# targets

all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) \
     example.exe minigzip.exe example_d.exe minigzip_d.exe

$(STATICLIB): $(OBJS)
	$(AR) $(ARFLAGS) -out:$@ $(OBJS)

$(IMPLIB): $(SHAREDLIB)

$(SHAREDLIB): zlib.def $(OBJS) zlib32.res
	$(LD) $(LDFLAGS) -def:zlib.def -dll -implib:$(IMPLIB) \
	  -out:$@ $(OBJS) zlib32.res $(LIBS)

example.exe: example.obj $(STATICLIB)
	$(LD) $(LDFLAGS) example.obj $(STATICLIB) $(LIBS)

minigzip.exe: minigzip.obj $(STATICLIB)
	$(LD) $(LDFLAGS) minigzip.obj $(STATICLIB) $(LIBS)

example_d.exe: example.obj $(IMPLIB)
	$(LD) $(LDFLAGS) -out:$@ example.obj $(IMPLIB) $(LIBS)

minigzip_d.exe: minigzip.obj $(IMPLIB)
	$(LD) $(LDFLAGS) -out:$@ minigzip.obj $(IMPLIB) $(LIBS)


adler32.obj: ../adler32.c ../zlib.h ../zconf.h
	$(CC) -c $(CFLAGS) ../adler32.c

compress.obj: ../compress.c ../zlib.h ../zconf.h
	$(CC) -c $(CFLAGS) ../compress.c

crc32.obj: ../crc32.c ../zlib.h ../zconf.h ../crc32.h
	$(CC) -c $(CFLAGS) ../crc32.c

deflate.obj: ../deflate.c ../deflate.h ../zutil.h ../zlib.h ../zconf.h
	$(CC) -c $(CFLAGS) ../deflate.c

gzio.obj: ../gzio.c ../zutil.h ../zlib.h ../zconf.h
	$(CC) -c $(CFLAGS) ../gzio.c

gvmat64.obj: gvmat64.asm
	$(AS) /Flgvmat64 /c /Zi gvmat64.asm

infback.obj: ../infback.c ../zutil.h ../zlib.h ../zconf.h ../inftrees.h ../inflate.h \
             ../inffast.h ../inffixed.h
	$(CC) -c $(CFLAGS) ../infback.c

inffast.obj: ../inffast.c ../zutil.h ../zlib.h ../zconf.h ../inftrees.h ../inflate.h \
             ../inffast.h
	$(CC) -c $(CFLAGS) ../inffast.c

inffas8664.obj: inffas8664.c ../zutil.h ../zlib.h ../zconf.h ../inftrees.h ../inflate.h \
             ../inffast.h
	$(CC) -c $(CFLAGS) /I.. inffas8664.c

inffasx64.obj: inffasx64.asm
	$(AS) /Flgvmat64 /c /Zi inffasx64.asm

inflate.obj: ../inflate.c ../zutil.h ../zlib.h ../zconf.h ../inftrees.h ../inflate.h \
             ../inffast.h ../inffixed.h
	$(CC) -c $(CFLAGS) ../inflate.c

inftrees.obj: ../inftrees.c ../zutil.h ../zlib.h ../zconf.h ../inftrees.h
	$(CC) -c $(CFLAGS) ../inftrees.c

trees.obj: ../trees.c ../zutil.h ../zlib.h ../zconf.h ../deflate.h ../trees.h
	$(CC) -c $(CFLAGS) ../trees.c

uncompr.obj: ../uncompr.c ../zlib.h ../zconf.h
	$(CC) -c $(CFLAGS) ../uncompr.c

zutil.obj: ../zutil.c ../zutil.h ../zlib.h ../zconf.h
	$(CC) -c $(CFLAGS) ../zutil.c

example.obj: ../example.c ../zlib.h ../zconf.h
	$(CC) -c $(CFLAGS) ../example.c

minigzip.obj: ../minigzip.c ../zlib.h ../zconf.h
	$(CC) -c $(CFLAGS) ../minigzip.c

zlib32.res: ../Mingw32/zlib32.rc
	$(RC) $(RCFLAGS) /fo$@ ../Mingw32/zlib32.rc


# testing
test: example.exe minigzip.exe
	example
	echo hello world | minigzip | minigzip -d

testdll: example_d.exe minigzip_d.exe
	example_d
	echo hello world | minigzip_d | minigzip_d -d


# cleanup
clean:
	-del *.obj
	-del *.res

cleanall:
	-del $(STATICLIB)
	-del $(SHAREDLIB)
	-del $(IMPLIB)
	-del *.obj
	-del *.res
	-del *.exp
	-del *.exe
	-del foo.gz
