# Horloge's Makefile for: WIFSS

CC=gcc
CFLAGS=-D _XOPEN_SOURCE=200809L -std=c99 -O3 -pthread -Wall -Wextra -Wpedantic -Wshadow -Wno-missing-field-initializers -Wstrict-overflow
LDFLAGS=-pthread
EXEC=WClient WServer


# By default, build both Client and Server
all: $(EXEC)


# Client
WClient: ccommands.o ccore.o cclient.o
	$(MAKE) str.o
	$(CC) -o $@ $^ str.o $(LDFLAGS)
	$(MAKE) clean

ccommands.o: client/commands/*
	$(CC) -o $@ -c client/commands/commands.c $(CFLAGS)
ccore.o: client/core/*
	$(CC) -o $@ -c client/core/core.c $(CFLAGS)
cclient.o: client/core/*
	$(CC) -o $@ -c client/core/client.c $(CFLAGS)


# Server
WServer: scommands.o score.o sserver.o sprotocols.o
	$(MAKE) str.o
	$(CC) -o $@ $^ str.o $(LDFLAGS)
	$(MAKE) clean

scommands.o: server/commands/*
	$(CC) -o $@ -c server/commands/commands.c $(CFLAGS)
score.o: server/core/*
	$(CC) -o $@ -c server/core/core.c $(CFLAGS)
sserver.o: server/core/*
	$(CC) -o $@ -c server/core/server.c $(CFLAGS)
sprotocols.o: server/protocols/*
	$(CC) -o $@ -c server/protocols/protocols.c $(CFLAGS)


# Common string functions
str.o: commons/str/*
	$(CC) -o $@ -c commons/str/str.c $(CFLAGS)


.SILENT:
.PHONY: clean mrproper

clean:
	@rm -f *.o

mrproper: clean
	@rm -f $(EXEC)