#########################################################################
# Makefile for Microsofts MPEG VM software encoder & decoder
#
# Peter Van Beek, Wed Feb  5 14:20:17 1997
# University of Rochester, Department of Electrical Engineering
#
#########################################################################

########## General definitions ##########################################
CCC 		= g++

CCFLAGS		= $(INC) -O -Wall -Wpointer-arith

LN 			= /usr/bin/ln -s
MV 			= /usr/bin/mv
CP 			= /usr/bin/cp
RM 			= /usr/bin/rm -f
INSTALL		= $(LN)



########## Module definitions ###########################################
TOPDIR		= /home/mpeg/programs/src
BINDIR		= /home/mpeg/programs/bin/sun4

GROUP		= vm7

SRCDIR		= $(TOPDIR)/$(GROUP)

OBJDIR		= $(TOPDIR)/$(GROUP)/obj

LIBS		= -lm

PROGRAMS 	= vm_enc vm_dec

SOURCES = \
$(SRCDIR)/type/yuva.cc \
$(SRCDIR)/type/yuvai.cc \
$(SRCDIR)/type/warp.cc \
$(SRCDIR)/type/voppd.cc \
$(SRCDIR)/type/vop.cc \
$(SRCDIR)/type/typeapi.cc \
$(SRCDIR)/type/svd.cc \
$(SRCDIR)/type/grayfpd.cc \
$(SRCDIR)/type/grayf.cc \
$(SRCDIR)/type/grayipd.cc \
$(SRCDIR)/type/grayi.cc \
$(SRCDIR)/type/geom.cc \
$(SRCDIR)/type/basic.cc \
$(SRCDIR)/sys/vopses.cc \
$(SRCDIR)/sys/vopmbs.cc \
$(SRCDIR)/sys/mode.cc \
$(SRCDIR)/sys/shape.cc \
$(SRCDIR)/sys/cae.cc \
$(SRCDIR)/sys/cae.cc \
$(SRCDIR)/sys/mb.cc \
$(SRCDIR)/sys/block.cc \
$(SRCDIR)/sys/encoder/vopmbenc.cc \
$(SRCDIR)/sys/encoder/vopseenc.cc \
$(SRCDIR)/sys/encoder/sesenc.cc \
$(SRCDIR)/sys/encoder/shpenc.cc \
$(SRCDIR)/sys/encoder/mbenc.cc \
$(SRCDIR)/sys/encoder/blkenc.cc \
$(SRCDIR)/sys/decoder/vopsedec.cc \
$(SRCDIR)/sys/decoder/vopmbdec.cc \
$(SRCDIR)/sys/decoder/shpdec.cc \
$(SRCDIR)/sys/decoder/mbdec.cc \
$(SRCDIR)/sys/decoder/blkdec.cc \
$(SRCDIR)/tools/entropy/huffman.cc \
$(SRCDIR)/tools/entropy/bitstrm.cc \
$(SRCDIR)/tools/motion/blkmatch.cc \
$(SRCDIR)/tools/2dcompr/dct.cc

OBJECTS	= \
			$(OBJDIR)/yuva.o \
			$(OBJDIR)/yuvai.o \
			$(OBJDIR)/warp.o \
			$(OBJDIR)/voppd.o \
			$(OBJDIR)/vop.o \
			$(OBJDIR)/typeapi.o \
			$(OBJDIR)/svd.o \
			$(OBJDIR)/grayfpd.o \
			$(OBJDIR)/grayf.o \
			$(OBJDIR)/grayipd.o \
			$(OBJDIR)/grayi.o \
			$(OBJDIR)/geom.o \
			$(OBJDIR)/basic.o \
			$(OBJDIR)/vopses.o \
			$(OBJDIR)/vopmbs.o \
			$(OBJDIR)/mode.o \
			$(OBJDIR)/shape.o \
			$(OBJDIR)/cae.o \
			$(OBJDIR)/mb.o \
			$(OBJDIR)/block.o \
			$(OBJDIR)/vopmbenc.o \
			$(OBJDIR)/vopseenc.o \
			$(OBJDIR)/sesenc.o \
			$(OBJDIR)/shpenc.o \
			$(OBJDIR)/mbenc.o \
			$(OBJDIR)/blkenc.o \
			$(OBJDIR)/vopsedec.o \
			$(OBJDIR)/vopmbdec.o \
			$(OBJDIR)/shpdec.o \
			$(OBJDIR)/mbdec.o \
			$(OBJDIR)/blkdec.o \
			$(OBJDIR)/huffman.o \
			$(OBJDIR)/bitstrm.o \
			$(OBJDIR)/blkmatch.o \
			$(OBJDIR)/dct.o


# Include all subdirectories for ease
INC			= 	-I$(TOPDIR)/$(GROUP)/sys \
I$(TOPDIR)/$(GROUP)/sys/encoder \
I$(TOPDIR)/$(GROUP)/sys/decoder \
I$(TOPDIR)/$(GROUP)/type \
I$(TOPDIR)/$(GROUP)/tools \
I$(TOPDIR)/$(GROUP)/tools/2dcompr \
I$(TOPDIR)/$(GROUP)/tools/entropy \
I$(TOPDIR)/$(GROUP)/tools/motion


.KEEP_STATE:

########## Targets #########################################

$(GROUP): $(OBJECTS)
@echo Done making $(GROUP) objects

all:	$(OBJECTS) $(PROGRAMS)
	@echo Done making $(GROUP) objects and programs


vm_enc: $(OBJECTS) $(OBJDIR)/encoder.o
	@echo $(CCC) $(CFLAGS) -o vm_enc $(OBJECTS) $(OBJDIR)/encoder.o $(LIBS)
	@$(CCC) $(CFLAGS) -o vm_enc $(OBJECTS) $(OBJDIR)/encoder.o $(LIBS)
	@echo Done making vm_enc


vm_dec: $(OBJECTS) $(OBJDIR)/decoder.o
	@echo $(CCC) $(CFLAGS) -o vm_dec $(OBJECTS) $(OBJDIR)/decoder.o $(LIBS)
	@$(CCC) $(CFLAGS) -o vm_dec $(OBJECTS) $(OBJDIR)/decoder.o $(LIBS)
	@echo Done making vm_dec


$(OBJDIR)/encoder.o:   $(SRCDIR)/app/encoder/encoder.cc
	$(CCC) -c $@ $(SRCDIR)/app/encoder/encoder.cc
$(OBJDIR)/decoder.o:   $(SRCDIR)/app/decoder/decoder.cc
	$(CCC) -c $@ $(SRCDIR)/app/decoder/decoder.cc
$(OBJDIR)/yuva.o:      $(SRCDIR)/type/yuva.cc
	$(CCC) -c $@ $(SRCDIR)/type/yuva.cc
$(OBJDIR)/yuvai.o:      $(SRCDIR)/type/yuvai.cc
	$(CCC) -c $@ $(SRCDIR)/type/yuvai.cc
$(OBJDIR)/warp.o:      $(SRCDIR)/type/warp.cc
	$(CCC) -c $@ $(SRCDIR)/type/warp.cc
$(OBJDIR)/voppd.o:     $(SRCDIR)/type/voppd.cc
	$(CCC) -c $@ $(SRCDIR)/type/voppd.cc
$(OBJDIR)/vop.o:       $(SRCDIR)/type/vop.cc
	$(CCC) -c $@ $(SRCDIR)/type/vop.cc
$(OBJDIR)/typeapi.o:   $(SRCDIR)/type/typeapi.cc
	$(CCC) -c $@ $(SRCDIR)/type/typeapi.cc
$(OBJDIR)/svd.o:       $(SRCDIR)/type/svd.cc
	$(CCC) -c $@ $(SRCDIR)/type/svd.cc
$(OBJDIR)/grayfpd.o:   $(SRCDIR)/type/grayfpd.cc
	$(CCC) -c $@ $(SRCDIR)/type/grayfpd.cc
$(OBJDIR)/grayf.o:     $(SRCDIR)/type/grayf.cc
	$(CCC) -c $@ $(SRCDIR)/type/grayf.cc
$(OBJDIR)/grayipd.o:   $(SRCDIR)/type/grayipd.cc
	$(CCC) -c $@ $(SRCDIR)/type/grayipd.cc
$(OBJDIR)/grayi.o:     $(SRCDIR)/type/grayi.cc
	$(CCC) -c $@ $(SRCDIR)/type/grayi.cc
$(OBJDIR)/geom.o:      $(SRCDIR)/type/geom.cc
	$(CCC) -c $@ $(SRCDIR)/type/geom.cc
$(OBJDIR)/basic.o:     $(SRCDIR)/type/basic.cc
	$(CCC) -c $@ $(SRCDIR)/type/basic.cc
$(OBJDIR)/vopses.o:    $(SRCDIR)/sys/vopses.cc
	$(CCC) -c $@ $(SRCDIR)/sys/vopses.cc
$(OBJDIR)/vopmbs.o:    $(SRCDIR)/sys/vopmbs.cc
	$(CCC) -c $@ $(SRCDIR)/sys/vopmbs.cc
$(OBJDIR)/mode.o:      $(SRCDIR)/sys/mode.cc
	$(CCC) -c $@ $(SRCDIR)/sys/mode.cc
$(OBJDIR)/shape.o:      $(SRCDIR)/sys/shape.cc
	$(CCC) -c $@ $(SRCDIR)/sys/shape.cc
$(OBJDIR)/cae.o:      $(SRCDIR)/sys/cae.cc
	$(CCC) -c $@ $(SRCDIR)/sys/cae.cc
$(OBJDIR)/mb.o:        $(SRCDIR)/sys/mb.cc
	$(CCC) -c $@ $(SRCDIR)/sys/mb.cc
$(OBJDIR)/block.o:     $(SRCDIR)/sys/block.cc
	$(CCC) -c $@ $(SRCDIR)/sys/block.cc
$(OBJDIR)/vopseenc.o:  $(SRCDIR)/sys/encoder/vopseenc.cc
	$(CCC) -c $@ $(SRCDIR)/sys/encoder/vopseenc.cc
$(OBJDIR)/vopmbenc.o:  $(SRCDIR)/sys/encoder/vopmbenc.cc
	$(CCC) -c $@ $(SRCDIR)/sys/encoder/vopmbenc.cc
$(OBJDIR)/sesenc.o:    $(SRCDIR)/sys/encoder/sesenc.cc
	$(CCC) -c $@ $(SRCDIR)/sys/encoder/sesenc.cc
$(OBJDIR)/shpenc.o:     $(SRCDIR)/sys/encoder/shpenc.cc
	$(CCC) -c $@ $(SRCDIR)/sys/encoder/shpenc.cc
$(OBJDIR)/mbenc.o:     $(SRCDIR)/sys/encoder/mbenc.cc
	$(CCC) -c $@ $(SRCDIR)/sys/encoder/mbenc.cc
$(OBJDIR)/blkenc.o:    $(SRCDIR)/sys/encoder/blkenc.cc
	$(CCC) -c $@ $(SRCDIR)/sys/encoder/blkenc.cc
$(OBJDIR)/vopsedec.o:  $(SRCDIR)/sys/decoder/vopsedec.cc
	$(CCC) -c $@ $(SRCDIR)/sys/decoder/vopsedec.cc
$(OBJDIR)/vopmbdec.o:  $(SRCDIR)/sys/decoder/vopmbdec.cc
	$(CCC) -c $@ $(SRCDIR)/sys/decoder/vopmbdec.cc
$(OBJDIR)/sesdec.o:    $(SRCDIR)/sys/decoder/sesdec.cc
	$(CCC) -c $@ $(SRCDIR)/sys/decoder/sesdec.cc
$(OBJDIR)/shpdec.o:     $(SRCDIR)/sys/decoder/shpdec.cc
	$(CCC) -c $@ $(SRCDIR)/sys/decoder/shpdec.cc
$(OBJDIR)/mbdec.o:     $(SRCDIR)/sys/decoder/mbdec.cc
	$(CCC) -c $@ $(SRCDIR)/sys/decoder/mbdec.cc
$(OBJDIR)/blkdec.o:    $(SRCDIR)/sys/decoder/blkdec.cc
	$(CCC) -c $@ $(SRCDIR)/sys/decoder/blkdec.cc
$(OBJDIR)/dct.o:   	$(SRCDIR)/tools/2dcompr/dct.cc
	$(CCC) -c $@ $(SRCDIR)/tools/2dcompr/dct.cc
$(OBJDIR)/huffman.o:   $(SRCDIR)/tools/entropy/huffman.cc
	$(CCC) -c $@ $(SRCDIR)/tools/entropy/huffman.cc
$(OBJDIR)/bitstrm.o:   $(SRCDIR)/tools/entropy/bitstrm.cc
	$(CCC) -c $@ $(SRCDIR)/tools/entropy/bitstrm.cc
$(OBJDIR)/blkmatch.o:  $(SRCDIR)/tools/motion/blkmatch.cc
	$(CCC) -c $@ $(SRCDIR)/tools/motion/blkmatch.cc

install:	$(PROGRAMS)
	$(INSTALL) $(SRCDIR)/vm_enc $(BINDIR)
	$(INSTALL) $(SRCDIR)/vm_dec $(BINDIR)
	@echo Installed $(PROGRAMS) in $(BINDIR)
deinstall:	
	$(RM) $(BINDIR)/vm_enc
	$(RM) $(BINDIR)/vm_dec
	@echo Removed $(PROGRAMS) from $(BINDIR)


clean:
	$(RM) core $(PROGRAMS) $(OBJECTS) $(OBJDIR)/*.o @echo Done cleaning ... 
