# Bucket Uploader V2 — C Engine
#
# Fully self-contained upload engine.
# Usage: bucket_uploader_v2 --config config.json

CC = gcc
CFLAGS = -Wall -Wextra -Wpedantic -O2 -pthread -D_FILE_OFFSET_BITS=64
LDFLAGS = -lcurl -lssl -lcrypto -lm

SRC_DIR = src
BUILD_DIR = build

SOURCES = $(SRC_DIR)/main.c \
          $(SRC_DIR)/api.c \
          $(SRC_DIR)/crypto.c \
          $(SRC_DIR)/worker.c \
          $(SRC_DIR)/status.c \
          $(SRC_DIR)/cleanup.c \
          $(SRC_DIR)/utils.c \
          $(SRC_DIR)/cJSON.c

OBJECTS = $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/%.o,$(SOURCES))
TARGET = bucket_uploader_v2

.PHONY: all clean install debug release

all: $(BUILD_DIR) $(TARGET)

release: CFLAGS = -Wall -Wextra -O3 -pthread -DNDEBUG -D_FILE_OFFSET_BITS=64
release: clean all
	@echo "Built $(TARGET) (release) successfully"
	strip $(TARGET)

debug: CFLAGS = -Wall -Wextra -Wpedantic -g -O0 -pthread -DDEBUG -D_FILE_OFFSET_BITS=64 -fsanitize=address
debug: LDFLAGS += -fsanitize=address
debug: clean all
	@echo "Built $(TARGET) (debug) successfully"

$(BUILD_DIR):
	mkdir -p $(BUILD_DIR)

$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c $(SRC_DIR)/engine.h
	$(CC) $(CFLAGS) -c $< -o $@

$(TARGET): $(OBJECTS)
	$(CC) $(CFLAGS) $(OBJECTS) -o $@ $(LDFLAGS)
	@echo "Built $(TARGET) successfully"

clean:
	rm -rf $(BUILD_DIR) $(TARGET)

install: $(TARGET)
	install -m 755 $(TARGET) /usr/local/bin/
	@echo "Installed to /usr/local/bin/$(TARGET)"
