CC = gcc CFLAGS += -std=c99 -Wall -Werror -pedantic -ggdb3 INCDIR = ./lib/utils ./lib/ini ./lib/threadpool ./src ./lib/log ./lib/api INCLUDES := $(patsubst %,-I %,$(INCDIR)) LDFLAGS = -L . -lm OPTFLAGS = #-O3 LIBS = -lpthread SOCKET = ./socket BUILD_DIR = ./build SRC_DIR = ./src LIB_DIR = ./lib OBJ_DIR = ./obj OBJ_SRC_SERVER := $(addprefix $(OBJ_DIR)/,$(patsubst %.c,%.o,$(notdir $(wildcard $(SRC_DIR)/server*.c)))) OBJ_SRC_CLIENT := $(addprefix $(OBJ_DIR)/,$(patsubst %.c,%.o,$(notdir $(wildcard $(SRC_DIR)/client*.c)))) OBJ_LIBS_SERVER := $(addprefix $(OBJ_DIR)/,$(patsubst %.c,%.o,$(notdir $(filter-out $(wildcard $(LIB_DIR)/api/*.c),$(wildcard $(LIB_DIR)/*/*.c))))) OBJ_LIBS_CLIENT := $(addprefix $(OBJ_DIR)/,$(patsubst %.c,%.o,$(notdir $(filter-out $(wildcard $(LIB_DIR)/threadpool/*.c) $(wildcard $(LIB_DIR)/log/*.c),$(wildcard $(LIB_DIR)/*/*.c))))) OBJ_SERVER := $(OBJ_SRC_SERVER) $(OBJ_LIBS_SERVER) OBJ_CLIENT := $(OBJ_SRC_CLIENT) $(OBJ_LIBS_CLIENT) VPATH := $(SRC_DIR) $(wildcard $(LIB_DIR)/*) .DEFAULT_GOAL := all .PHONY: all multi clean cleanall all: @$(MAKE) -s -j multi multi: $(BUILD_DIR)/server $(BUILD_DIR)/client @echo "Compiled!" # -SERVER-RULES----------------------------------------------------------------- $(OBJ_DIR)/fileQueue.o: fileQueue.c fileQueue.h conn.h fileQueue.h util.h @$(CC) $(CFLAGS) $(OPTFLAGS) $(INCLUDES) -c $< -o $@ @echo $@ $(OBJ_DIR)/apiFile.o: apiFile.c apiFile.h fileQueue.h taglialegna.h conn.h @$(CC) $(CFLAGS) $(OPTFLAGS) $(INCLUDES) -c $< -o $@ @echo $@ $(OBJ_DIR)/taglialegna.o: taglialegna.c taglialegna.h fileQueue.h @$(CC) $(CFLAGS) $(OPTFLAGS) $(INCLUDES) -c $< -o $@ @echo $@ $(OBJ_DIR)/threadpool.o: threadpool.c util.h threadpool.h @$(CC) $(CFLAGS) $(OPTFLAGS) $(INCLUDES) -c $< -o $@ @echo $@ $(OBJ_DIR)/ini.o: ini.c ini.h @$(CC) $(CFLAGS) $(OPTFLAGS) $(INCLUDES) -c $< -o $@ @echo $@ $(OBJ_DIR)/strsep_gnu.o: strsep_gnu.c strsep_gnu.h @$(CC) $(CFLAGS) $(OPTFLAGS) $(INCLUDES) -c $< -o $@ @echo $@ $(OBJ_DIR)/serverWorker.o: serverWorker.c serverWorker.h apiFile.h fileQueue.h taglialegna.h threadpool.h conn.h message.h strsep_gnu.h @$(CC) $(CFLAGS) $(OPTFLAGS) $(INCLUDES) -c $< -o $@ @echo $@ $(OBJ_DIR)/server.o: server.c threadpool.h conn.h util.h serverWorker.h ini.h serverUtil.h fileQueue.h taglialegna.h @$(CC) $(CFLAGS) $(OPTFLAGS) $(INCLUDES) -c $< -o $@ @echo $@ $(BUILD_DIR)/server: $(OBJ_SERVER) @$(CC) $(CFLAGS) $(OPTFLAGS) $(OPTFLAGS) $(OBJ_SERVER) $(LDFLAGS) -o $(BUILD_DIR)/server $(LIBS) @echo $@ # -CLIENT-RULES----------------------------------------------------------------- $(OBJ_DIR)/api.o: api.c api.h @$(CC) $(CFLAGS) $(OPTFLAGS) $(INCLUDES) -c $< -o $@ @echo $@ $(OBJ_DIR)/client.o: client.c api.h @$(CC) $(CFLAGS) $(OPTFLAGS) $(INCLUDES) -c $< -o $@ @echo $@ $(BUILD_DIR)/client: $(OBJ_CLIENT) @$(CC) $(CFLAGS) $(OPTFLAGS) $(OBJ_CLIENT) $(LDFLAGS) -o $(BUILD_DIR)/client $(LIBS) @echo $@ # -PHONY------------------------------------------------------------------------ clean: @rm -rf $(BUILD_DIR)/* logs/*.log cleanall: clean @rm -rf $(OBJ_DIR)/* @rm -f $(SOCKET) print-%: ; @echo $* = $($*) # -TESTS------------------------------------------------------------------------ test1: all @echo "[threadpool]" > $(BUILD_DIR)/config.ini @echo "quantity = 1" >> $(BUILD_DIR)/config.ini @echo "pending = 10" >> $(BUILD_DIR)/config.ini @echo "" >> $(BUILD_DIR)/config.ini @echo "[files]" >> $(BUILD_DIR)/config.ini @echo "MaxSize = 128000000" >> $(BUILD_DIR)/config.ini @echo "MaxFiles = 10000" >> $(BUILD_DIR)/config.ini @echo "" >> $(BUILD_DIR)/config.ini @echo "[log]" >> $(BUILD_DIR)/config.ini @echo "logFile = ./logs/l.log" >> $(BUILD_DIR)/config.ini @echo "" >> $(BUILD_DIR)/config.ini @echo "[socket]" >> $(BUILD_DIR)/config.ini @echo "name = ./socket" >> $(BUILD_DIR)/config.ini @echo "backlog = 100" >> $(BUILD_DIR)/config.ini valgrind --leak-check=full --track-origins=yes $(BUILD_DIR)/server $(BUILD_DIR)/config.ini & bash scripts/test1.sh pkill --signal SIGHUP memcheck test2: all @echo "[threadpool]" > $(BUILD_DIR)/config.ini @echo "quantity = 4" >> $(BUILD_DIR)/config.ini @echo "pending = 100" >> $(BUILD_DIR)/config.ini @echo "" >> $(BUILD_DIR)/config.ini @echo "[files]" >> $(BUILD_DIR)/config.ini @echo "MaxSize = 1000" >> $(BUILD_DIR)/config.ini @echo "MaxFiles = 10" >> $(BUILD_DIR)/config.ini @echo "" >> $(BUILD_DIR)/config.ini @echo "[log]" >> $(BUILD_DIR)/config.ini @echo "logFile = ./logs/l.log" >> $(BUILD_DIR)/config.ini @echo "" >> $(BUILD_DIR)/config.ini @echo "[socket]" >> $(BUILD_DIR)/config.ini @echo "name = ./socket" >> $(BUILD_DIR)/config.ini @echo "backlog = 100" >> $(BUILD_DIR)/config.ini $(BUILD_DIR)/server $(BUILD_DIR)/config.ini & bash scripts/test2.sh pkill --signal SIGHUP server