SHELL := /usr/bin/env bash

PREFIX :=
CC     := $(PREFIX)gcc
LD     := $(PREFIX)ld
SIZE   := $(PREFIX)size
GDB    := $(PREFIX)gdb

NAME := c-test-project

SRC_DIR := ./src
INC_DIR := ./inc
BIN_DIR := ./bin
OBJ_DIR := $(BIN_DIR)/obj

OPT_LEVEL := -g3 \
             -O0

C_SRC := main.c

C_DEF :=
C_DEF := $(addprefix -D, $(C_DEF))

C_INC := $(INC_DIR)
C_INC := $(addprefix -I, $(C_INC))

C_FLAGS := $(C_DEF) \
           $(C_INC) \
           $(OPT_LEVEL) \
           -Wall \
           -Wextra \
           -Wpedantic \
           -Wconversion \
           -Wsign-conversion \
           -Wsign-compare \
           -Wcast-align=strict \
           -Wfloat-equal \
           -Wlogical-op \
           -Wno-maybe-uninitialized \
           -Werror

BINARY := $(BIN_DIR)/$(NAME)

MKDIR := $(BIN_DIR) $(OBJ_DIR)

VPATH := $(SRC_DIR)


.PHONY: all clean rebuild run test

all: $(MKDIR) $(BINARY)

clean:
	@rm -rf $(MKDIR)

rebuild: clean all

run: all
	./$(BINARY)

$(MKDIR):
	@mkdir -p $@

$(BINARY): $(C_SRC)
	gcc $(C_FLAGS) $^ -o $@

