LFLAG=-lnetfilter_queue -lpcap -lpthread -lssl -lcrypto
TOOL_DISTS=packet_attribute_parser.o hash_map.o pcap_dumper.o
CORE_DISTS=core.o decoy.o err.o stateful_module.o blacklist_module.o
STATEFUL_MODULES_DISTS=default_layer1_modules.o default_layer2_modules.o default_layer3_modules.o default_layer4_modules.o default_layer5_modules.o default_layer7_modules.o

all: dispatcher

dispatcher: main.o $(CORE_DISTS) $(TOOL_DISTS) $(STATEFUL_MODULES_DISTS)
	$(CC) $(CFLAGS) $(LFLAG) -o dispatcher main.o $(CORE_DISTS) $(TOOL_DISTS) $(STATEFUL_MODULES_DISTS)
main.o: main.c
	$(CC) $(CFLAGS) -c main.c

# core
core.o: core.c core.h
	$(CC) $(CFLAGS) -c core.c
decoy.o: decoy.c decoy.h
	$(CC) $(CFLAGS) -c decoy.c
err.o: err.c err.h
	$(CC) $(CFLAGS) -c err.c
stateful_module.o: stateful_module.c stateful_module.h
	$(CC) $(CFLAGS) -c stateful_module.c
blacklist_module.o: blacklist_module.c blacklist_module.h
	$(CC) $(CFLAGS) -c blacklist_module.c

# stateful modeuls
default_layer1_modules.o: default_layer1_modules.c
	$(CC) $(CFLAGS) -c default_layer1_modules.c
default_layer2_modules.o: default_layer2_modules.c
	$(CC) $(CFLAGS) -c default_layer2_modules.c
default_layer3_modules.o: default_layer3_modules.c
	$(CC) $(CFLAGS) -c default_layer3_modules.c
default_layer4_modules.o: default_layer4_modules.c
	$(CC) $(CFLAGS) -c default_layer4_modules.c
default_layer5_modules.o: default_layer5_modules.c
	$(CC) $(CFLAGS) -c default_layer5_modules.c
default_layer7_modules.o: default_layer7_modules.c
	$(CC) $(CFLAGS) -c default_layer7_modules.c

# tools
packet_attribute_parser.o: packet_attribute_parser.c packet_attribute_parser.h
	$(CC) $(CFLAGS) -c packet_attribute_parser.c
hash_map.o: hash_map.c hash_map.h
	$(CC) $(CFLAGS) -c hash_map.c
pcap_dumper.o: pcap_dumper.c pcap_dumper.h
	$(CC) $(CFLAGS) -c pcap_dumper.c

install: all
	$(INSTALL) -m 755 dispatcher $(INSTALL_DIR)

.PHONY: clean

clean:
	rm -f *.o *.a
	rm -f dispatcher
