CC 	:= gcc
AS	:= nasm
ASFLAGS := -g -f elf64 -I src/
CFLAGS  := -g -Wall -Wextra -Wno-override-init -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

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


all: $(NAME)

$(NAME): $(OBJ_CC) $(OBJ_AS)
	ar rcs $(OBJ_DIR)/lib$(LIB_NAME).a $(OBJ_AS)
	$(LD) $(OBJ_CC) $(LDFLAGS) -o $(DIR)/$(NAME)

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

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

clean:
	@rm -f $(NAME)
	@rm -rf $(OBJ_DIR)

re:
	@make --no-print clean
	@make --no-print all
