CC		:= gcc
AS		:= nasm
ASFLAGS		:= -g -f elf64 -I src/
CFLAGS		:= -g -std=c2x
MAIN		:= $(wildcard *.c)
SRC		:= $(wildcard src/*.s)
OBJ_DIR		:= build
OBJ_CC		:= $(addprefix $(OBJ_DIR)/, $(patsubst %.c,%.o, $(MAIN)))
OBJ_AS		:= $(addprefix $(OBJ_DIR)/, $(patsubst %.s,%.o, $(SRC)))
DIR		:= .
NAME		:= main
LIB_NAME	:= asm
PATH_LIB_NAME	:= $(OBJ_DIR)/lib$(LIB_NAME).a

LD  	:= $(CC)
LDFLAGS := -L$(OBJ_DIR) -l$(LIB_NAME)


all: $(NAME)

$(NAME): $(PATH_LIB_NAME) $(OBJ_CC)
	$(LD) $(OBJ_CC) $(LDFLAGS) -o $(DIR)/$(NAME)

$(PATH_LIB_NAME): $(OBJ_AS)
	ar rcs $(PATH_LIB_NAME) $(OBJ_AS)

$(OBJ_DIR)/%.o: %.c
	@mkdir -p $(@D)
	$(CC) $(CFLAGS) -c -o $@ $<

$(OBJ_DIR)/%.o: %.s
	@mkdir -p $(@D)
	$(AS) $(ASFLAGS) $< -o $@

clean:
	@rm -rf $(OBJ_DIR)

fclean: clean
	@rm -f $(NAME)

re: fclean all
