include config.mk

all: $(TARGET)

release: clean
release: CFLAGS += -O2
release: $(TARGET)

# Run the target.
run: $(TARGET)
	./$(TARGET)

# Compile project source objects.
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(INC_DIR)/%.h
	@ mkdir -p $(OBJ_DIR)
	@ $(PRINT) "$(WHITE_BOLD)Compiling source object $(WHITE)$@$(WHITE_BOLD)... $(RESETCOLOR)"
	$(CC) $(CFLAGS) -c $< -o $@

# Link to final binary.
$(TARGET): $(OBJ_FILES)
	@ $(PRINT) "$(WHITE_BOLD)Linking $(WHITE)$@$(WHITE_BOLD)...$(RESETCOLOR)"
	$(LINK) -o $(TARGET) $(OBJ_FILES) $(LDFLAGS)

# Clean out objects, binaries, and built artifacts.
clean:
	@ $(PRINT) "$(WHITE_BOLD)Cleaning up...$(RESETCOLOR)"
	rm -rf $(OBJ_DIR)/*.o $(TARGET)

# Get LOC.
lines:
	@ wc -l $(SRC_FILES) $(INC_FILES)

.PHONY: all clean test nocolor release run lines
