ASM = ml
#AFLAG = /c /coff
AFLAG = /c /coff /Zd /Zi
CC = cl
CFLAG = /c /Ox /Ot /Oa /Og /Oi /Op /Ob2 /Gr /ML /W4 /Zp1 /D "NDEBUG"
LINK = link
LFLAG = /DLL /OPT:REF /pdb:m2v.pdb /pdbtype:sept /nologo /EXPORT:vfGetPluginInfo /EXPORT:vfGetPluginFunc kernel32.lib user32.lib advapi32.lib 
#LFLAG = /DLL /DEBUG /pdb:m2v.pdb /pdbtype:sept /nologo /MAP /EXPORT:vfGetPluginInfo /EXPORT:vfGetPluginFunc kernel32.lib user32.lib advapi32.lib 
RC = rc
BINDIR = "..\release\"

OBJ = m2v.obj mpeg2video.obj video_stream.obj sequence_header.obj timecode.obj picture_header.obj gop.obj gop_list.obj picture.obj slice_header.obj macroblock.obj mc.obj block.obj b14.obj b15.obj dct_coefficient.obj idct_int32.obj idct_double.obj idct_clip_table.obj idct_sse32.obj idct_mmx32.obj frame.obj scan.obj yuv_to_bgr.obj block_mmx.obj mc_mmx.obj
RES = m2v.res

ALL: m2v

m2v: $(OBJ) $(RES)
	$(LINK) $(LFLAG) /OUT:m2v.vfp *.obj m2v.res

m2v.res: m2v.rc resource.h
	$(RC) m2v.rc

m2v.obj: m2v.c mpeg2video.h video_stream.h sequence_header.h timecode.h picture_header.h gop_list.h frame.h picture.h mc.h slice_header.h macroblock.h block.h mc.h
	$(CC) $(CFLAG) m2v.c

mpeg2video.obj: mpeg2video.c mpeg2video.h video_stream.h sequence_header.h timecode.h picture_header.h gop_list.h frame.h picture.h mc.h slice_header.h macroblock.h block.h mc.h idct_int32.h idct_double.h idct_mmx32.h
	$(CC) $(CFLAG) mpeg2video.c

video_stream.obj: video_stream.c video_stream.h
	$(CC) $(CFLAG) video_stream.c

sequence_header.obj: sequence_header.c sequence_header.h video_stream.h slice_header.h macroblock.h block.h mc.h frame.h scan.h
	$(CC) $(CFLAG) sequence_header.c

timecode.obj: timecode.c timecode.h video_stream.h
	$(CC) $(CFLAG) timecode.c

picture_header.obj: picture_header.c picture_header.h video_stream.h macroblock.h block.h mc.h frame.h scan.h
	$(CC) $(CFLAG) picture_header.c

gop_list.obj: gop_list.c gop_list.h gop.h video_stream.h picture_header.h timecode.h macroblock.h block.h mc.h frame.h
	$(CC) $(CFLAG) gop_list.c

gop.obj: gop.c gop.h video_stream.h picture_header.h timecode.h sequence_header.h macroblock.h block.h mc.h frame.h
	$(CC) $(CFLAG) gop.c

picture.obj: picture.c picture.h video_stream.h slice_header.h macroblock.h mc.h block.h frame.h idct.h
	$(CC) $(CFLAG) picture.c

slice_header.obj: slice_header.c slice_header.h video_stream.h sequence_header.h block.h
	$(CC) $(CFLAG) slice_header.c

macroblock.obj: macroblock.c macroblock.h video_stream.h mc.h block.h frame.h
	$(CC) $(CFLAG) macroblock.c

mc.obj: mc.c mc.h frame.h
	$(CC) $(CFLAG) mc.c

mc_mmx.obj: mc_mmx.asm
	$(ASM) $(AFLAG) mc_mmx.asm

block.obj: block.c block.h video_stream.h scan.h b14.h b15.h dct_coefficient.h
	$(CC) $(CFLAG) block.c

b14.obj: b14.c b14.h dct_coefficient.h
	$(CC) $(CFLAG) b14.c

b15.obj: b15.c b15.h dct_coefficient.h
	$(CC) $(CFLAG) b15.c

dct_coefficient.obj: dct_coefficient.c dct_coefficient.h
	$(CC) $(CFLAG) dct_coefficient.c

idct_int32.obj: idct_int32.c idct_int32.h idct_clip_table.h
	$(CC) $(CFLAG) idct_int32.c

idct_double.obj: idct_double.c idct_double.h idct_clip_table.h
	$(CC) $(CFLAG) idct_double.c

idct_sse32.obj: idct_sse32.c idct_sse32.h idct_clip_table.h
	$(CC) $(CFLAG) idct_sse32.c

idct_mmx32.obj: idct_mmx32.asm
	$(ASM) $(AFLAG) idct_mmx32.asm

idct_clip_table.obj: idct_clip_table.c idct_clip_table.h
	$(CC) $(CFLAG) idct_clip_table.c

frame.obj: frame.c frame.h
	$(CC) $(CFLAG) frame.c

yuv_to_bgr.obj: yuv_to_bgr.asm
	$(ASM) $(AFLAG) yuv_to_bgr.asm

block_mmx.obj: block_mmx.asm
	$(ASM) $(AFLAG) block_mmx.asm

scan.obj: scan.c scan.h
	$(CC) $(CFLAG) scan.c

clean:
	DEL *.obj
	DEL *.res
	DEL *.exp
	DEL *.lib
	DEL m2v.vfp

install: all
	copy m2v.vfp $(BINDIR)m2v.vfp