CC = gcc CFLAGS = -Wall -Wextra -O2 -g -D_GNU_SOURCE LDFLAGS = -lssl -lcrypto -lsqlite3 -lm SRC_DIR = src BUILD_DIR = build TESTS_DIR = tests SOURCES = $(SRC_DIR)/main.c \ $(SRC_DIR)/buffer.c \ $(SRC_DIR)/logging.c \ $(SRC_DIR)/config.c \ $(SRC_DIR)/monitor.c \ $(SRC_DIR)/http.c \ $(SRC_DIR)/ssl_handler.c \ $(SRC_DIR)/connection.c \ $(SRC_DIR)/dashboard.c \ cJSON.c OBJECTS = $(patsubst %.c,$(BUILD_DIR)/%.o,$(notdir $(SOURCES))) TARGET = rproxy TEST_SOURCES = $(TESTS_DIR)/test_main.c \ $(TESTS_DIR)/test_http.c \ $(TESTS_DIR)/test_buffer.c \ $(TESTS_DIR)/test_config.c \ $(TESTS_DIR)/test_routing.c TEST_OBJECTS = $(patsubst %.c,$(BUILD_DIR)/%.o,$(notdir $(TEST_SOURCES))) TEST_LIB_SOURCES = $(SRC_DIR)/buffer.c \ $(SRC_DIR)/logging.c \ $(SRC_DIR)/config.c \ $(SRC_DIR)/monitor.c \ $(SRC_DIR)/http.c \ $(SRC_DIR)/ssl_handler.c \ $(SRC_DIR)/connection.c \ $(SRC_DIR)/dashboard.c \ cJSON.c TEST_LIB_OBJECTS = $(patsubst %.c,$(BUILD_DIR)/%.o,$(notdir $(TEST_LIB_SOURCES))) TEST_TARGET = rproxy_test .PHONY: all clean test legacy run all: $(BUILD_DIR) $(TARGET) $(BUILD_DIR): mkdir -p $(BUILD_DIR) $(TARGET): $(OBJECTS) $(CC) $(OBJECTS) -o $@ $(LDFLAGS) $(BUILD_DIR)/main.o: $(SRC_DIR)/main.c $(CC) $(CFLAGS) -c $< -o $@ $(BUILD_DIR)/buffer.o: $(SRC_DIR)/buffer.c $(CC) $(CFLAGS) -c $< -o $@ $(BUILD_DIR)/logging.o: $(SRC_DIR)/logging.c $(CC) $(CFLAGS) -c $< -o $@ $(BUILD_DIR)/config.o: $(SRC_DIR)/config.c $(CC) $(CFLAGS) -c $< -o $@ $(BUILD_DIR)/monitor.o: $(SRC_DIR)/monitor.c $(CC) $(CFLAGS) -c $< -o $@ $(BUILD_DIR)/http.o: $(SRC_DIR)/http.c $(CC) $(CFLAGS) -c $< -o $@ $(BUILD_DIR)/ssl_handler.o: $(SRC_DIR)/ssl_handler.c $(CC) $(CFLAGS) -c $< -o $@ $(BUILD_DIR)/connection.o: $(SRC_DIR)/connection.c $(CC) $(CFLAGS) -c $< -o $@ $(BUILD_DIR)/dashboard.o: $(SRC_DIR)/dashboard.c $(CC) $(CFLAGS) -c $< -o $@ $(BUILD_DIR)/cJSON.o: cJSON.c $(CC) $(CFLAGS) -c $< -o $@ $(BUILD_DIR)/test_main.o: $(TESTS_DIR)/test_main.c $(CC) $(CFLAGS) -I$(SRC_DIR) -c $< -o $@ $(BUILD_DIR)/test_http.o: $(TESTS_DIR)/test_http.c $(CC) $(CFLAGS) -I$(SRC_DIR) -c $< -o $@ $(BUILD_DIR)/test_buffer.o: $(TESTS_DIR)/test_buffer.c $(CC) $(CFLAGS) -I$(SRC_DIR) -c $< -o $@ $(BUILD_DIR)/test_config.o: $(TESTS_DIR)/test_config.c $(CC) $(CFLAGS) -I$(SRC_DIR) -c $< -o $@ $(BUILD_DIR)/test_routing.o: $(TESTS_DIR)/test_routing.c $(CC) $(CFLAGS) -I$(SRC_DIR) -c $< -o $@ $(TEST_TARGET): $(BUILD_DIR) $(TEST_OBJECTS) $(TEST_LIB_OBJECTS) $(CC) $(TEST_OBJECTS) $(TEST_LIB_OBJECTS) -o $@ $(LDFLAGS) test: $(TEST_TARGET) ./$(TEST_TARGET) legacy: rproxy.c cJSON.c cJSON.h $(CC) $(CFLAGS) rproxy.c cJSON.c -o rproxy_legacy $(LDFLAGS) run: $(TARGET) ./$(TARGET) clean: rm -rf $(BUILD_DIR) $(TARGET) $(TEST_TARGET) rproxy_legacy