SRC_DIR := src/common
OBJ_DIR := obj
RAMEN_OBJ_DIR := ramen_obj
MSG_OBJ_DIR := msg_obj
BIN_DIR := bin

RAMEN_DIR := src/ramen
MSG_DIR := src/msg

RAMEN_EXE := $(BIN_DIR)/ramen
MSG_EXE := $(BIN_DIR)/msg

SRC := $(wildcard $(SRC_DIR)/*.c)
OBJ := $(SRC:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)

CFLAGS   := -Wall -lcrypto -lssl
CFLAGS += $(NIX_CFLAGS_COMPILE)

RAMEN_SRC := $(wildcard $(RAMEN_DIR)/*.c)
RAMEN_OBJ := $(RAMEN_SRC:$(RAMEN_DIR)/%.c=$(RAMEN_OBJ_DIR)/%.o)

MSG_SRC := $(wildcard $(MSG_DIR)/*.c)
MSG_OBJ := $(MSG_SRC:$(MSG_DIR)/%.c=$(MSG_OBJ_DIR)/%.o)

DESTDIR := /usr/local/bin

LDFLAGS  :=
LDLIBS   :=
LDFLAGS += $(NIX_LDFLAGS_COMPILE)

.PHONY: all clean install

all: $(RAMEN_EXE) $(MSG_EXE)

$(RAMEN_EXE): $(OBJ) $(RAMEN_OBJ) | $(BIN_DIR)
	$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@

$(RAMEN_OBJ_DIR)/%.o: $(RAMEN_DIR)/%.c | $(RAMEN_OBJ_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

$(MSG_EXE): $(OBJ) $(MSG_OBJ) | $(BIN_DIR)
	$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@

$(MSG_OBJ_DIR)/%.o: $(MSG_DIR)/%.c | $(MSG_OBJ_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c | $(OBJ_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

$(BIN_DIR) $(OBJ_DIR) $(MSG_OBJ_DIR) $(RAMEN_OBJ_DIR):
	mkdir -p $@

clean:
	@$(RM) -rv $(BIN_DIR) $(OBJ_DIR) $(MSG_OBJ_DIR) $(RAMEN_OBJ_DIR) result

install:
	install -m 755 $(BIN_DIR)/ramen $(DESTDIR)
	install -mm 755 $(BIN_DIR)/msg $(DESTDIR)

-include $(OBJ:.o=.d)