CMDS = inode_hash reverseBitsFromHash getNewDInoAndCached populate \
	probeOnce collectLatencyData dictGtor autoDetectShift autoProbe autoPopulate

CC = gcc
CFLAGS = -Wall -Wextra -Werror -pedantic

.PHONY = all cmds clean setup

all: cmds vinofs

cmds: $(CMDS)

# quick commands:
inode_hash: cmd/inode_hash.c include/util.h
	$(CC) $(CFLAGS) -o inode_hash cmd/inode_hash.c
reverseBitsFromHash: cmd/reverseBitsFromHash.c include/util.h mathtool.o
	$(CC) $(CFLAGS) -o reverseBitsFromHash cmd/reverseBitsFromHash.c mathtool.o
getNewDInoAndCached: cmd/getNewDInoAndCached.c probe.o
	$(CC) $(CFLAGS) -o getNewDInoAndCached cmd/getNewDInoAndCached.c probe.o
populate: cmd/populate.c include/util.h probe.o
	$(CC) $(CFLAGS) -o populate cmd/populate.c probe.o
probeOnce: cmd/probeOnce.c include/util.h probe.o
	$(CC) $(CFLAGS) -o probeOnce cmd/probeOnce.c probe.o
collectLatencyData: cmd/collectLatencyData.c include/util.h probe.o
	$(CC) $(CFLAGS) -o collectLatencyData cmd/collectLatencyData.c probe.o
dictGtor: cmd/dictGtor.c include/util.h gtor.o
	$(CC) $(CFLAGS) -o dictGtor cmd/dictGtor.c gtor.o
autoDetectShift: cmd/autoDetectShift.c include/util.h probe.o
	$(CC) $(CFLAGS) -o autoDetectShift cmd/autoDetectShift.c probe.o
autoProbe: cmd/autoProbe.c include/util.h probe.o mathtool.o gtor.o
	$(CC) $(CFLAGS) -o autoProbe cmd/autoProbe.c probe.o mathtool.o gtor.o
autoPopulate: cmd/autoPopulate.c include/util.h probe.o gtor.o
	$(CC) $(CFLAGS) -o autoPopulate cmd/autoPopulate.c probe.o gtor.o -lpthread

mathtool.o: src/mathtool.c include/mathtool.h include/util.h
	$(CC) $(CFLAGS) -c src/mathtool.c
probe.o: src/probe.c include/probe.h include/util.h
	$(CC) $(CFLAGS) -c src/probe.c
gtor.o: src/gtor.c include/gtor.h include/util.h
	$(CC) $(CFLAGS) -c src/gtor.c


vinofs: src/vinofs/vinofs.c
	$(CC) $(CFLAGS) src/vinofs/vinofs.c `pkg-config fuse3 --cflags --libs` -o vinofs


setup: all
	mkdir -p workspace
	cp -f $(CMDS) workspace
	cp -f vinofs workspace
	cp -f scripts/* workspace

clean:
	rm -f *.o
	rm -f $(CMDS)
	rm -f vinofs
	rm -rf workspace
