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