libasm/Makefile

42 lines
813 B
Makefile

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