CC = clang
CFLAGS = -std=c18 -Wall -Wextra -Werror -Wpedantic -Wstrict-aliasing -O2 -D_POSIX_C_SOURCE=200809L
LDFLAGS = -lm -lpthread

COMMON_SRC = rpc.c storage.c net.c handlers.c
COMMON_OBJ = $(COMMON_SRC:.c=.o)

SERVER_SRC = server.c
SERVER_OBJ = $(SERVER_SRC:.c=.o)

CLIENT_SRC = client.c
CLIENT_OBJ = $(CLIENT_SRC:.c=.o)

all: server client

server: $(COMMON_OBJ) $(SERVER_OBJ)
	$(CC) $(CFLAGS) -o server $^ $(LDFLAGS)

client: $(COMMON_OBJ) $(CLIENT_OBJ)
	$(CC) $(CFLAGS) -o client $^ $(LDFLAGS)

%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

clean:
	rm -f *.o server client

.PHONY: all clean
