CXX = g++
SFSROOT := /u/6.824
RPCC=$(SFSROOT)/bin/rpcc
CFLAGS = -g -I. -I$(SFSROOT)/include/sfs -I$(SFSROOT)/include -I/usr/local/include -Wall -Werror -Wno-unused
CXXFLAGS := $(CFLAGS)
LIBS = -L$(SFSROOT)/lib -L$(SFSROOT)/lib/sfs -L/usr/local/lib -lclassfs -lsfsmisc -lsvc -lsfscrypt -larpc -lasync -lgmp -ldmalloc

all : blockdbd ccfs test-lab-4-b

BLOCKDBD_OBJECTS := blockdbd.o blockdb.o block_proto.o lock_server.o lock_proto.o
blockdbd : $(BLOCKDBD_OBJECTS)
	$(CXX) $(CFLAGS) -o blockdbd $(BLOCKDBD_OBJECTS) $(LIBS)

blockdbd.o : blockdbd.C blockdb.h block_proto.h
blockdb.o : blockdb.C blockdb.h block_proto.h
blockdbc.o : blockdbc.C blockdbc.h block_proto.h

block_proto.h block_proto.C : block_proto.x
	$(RPCC) -c block_proto.x ; $(RPCC) -h block_proto.x

lock_server.o : lock_server.C lock_server.h lock_proto.h
lock_client.o : lock_client.C lock_client.h lock_proto.h
lock_proto.h lock_proto.C : lock_proto.x
	$(RPCC) -c lock_proto.x ; $(RPCC) -h lock_proto.x

CCFS_OBJECTS := ccfs.o blockdbc.o block_proto.o fs.o fsrep.o lock_client.o lock_proto.o
ccfs : $(CCFS_OBJECTS)
	$(CXX) $(CFLAGS) -o ccfs $(CCFS_OBJECTS) $(LIBS)

ccfs.o : ccfs.C blockdb.h block_proto.h fs.h fsrep.h
fs.o : fs.C blockdb.h block_proto.h fs.h fsrep.h
fsrep.h fsrep.C : fsrep.x
	$(RPCC) -c fsrep.x ; $(RPCC) -h fsrep.x

handin:
	tar czf lab-2-handin.tgz *.[Cchx] Makefile
	chmod og= lab-2-handin.tgz

clean:
	-rm -f *.o ccfs blockdbd test-lab-4-b *.core
	-rm -f block_proto.C block_proto.h
	-rm -f fsrep.C fsrep.h 
	-rm -f lock_proto.C lock_proto.h
