ft_malloc/Makefile

71 lines
No EOL
1.7 KiB
Makefile

CC := cc
CFLAGS := -Wall -Wextra -Werror -fPIC -Iincludes -Ilibft
ifeq ($(HOSTTYPE),)
HOSTTYPE := $(shell uname -m)_$(shell uname -s)
endif
NAME := libft_malloc_$(HOSTTYPE).so
LINK := libft_malloc.so
# --------------------------------------------------------------------------- #
# Sources / objects
# --------------------------------------------------------------------------- #
SRCS_DIR := srcs
SRCS := $(SRCS_DIR)/ft_malloc.c \
$(SRCS_DIR)/ft_free.c \
$(SRCS_DIR)/ft_calloc.c \
$(SRCS_DIR)/ft_realloc.c \
$(SRCS_DIR)/init_state.c \
$(SRCS_DIR)/bonus_utils.c \
$(SRCS_DIR)/utils.c
OBJS := $(SRCS:.c=.o)
LIBFT_DIR := libft
LIBFT_A := $(LIBFT_DIR)/libft.a
# --------------------------------------------------------------------------- #
# Rules
# --------------------------------------------------------------------------- #
.PHONY: all clean fclean re test
all: $(NAME) $(LINK)
# Build the shared library
$(NAME): $(LIBFT_A) $(OBJS)
$(CC) -shared -o $@ $(OBJS) -L$(LIBFT_DIR) -lft -lpthread
# Symlink libft_malloc.so -> libft_malloc_$HOSTTYPE.so
$(LINK): $(NAME)
ln -sf $(NAME) $(LINK)
# Build libft first (using its own Makefile)
$(LIBFT_A):
$(MAKE) -C $(LIBFT_DIR)
# Object files
$(SRCS_DIR)/%.o: $(SRCS_DIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f $(OBJS)
$(MAKE) -C $(LIBFT_DIR) clean
fclean: clean
rm -f $(NAME) $(LINK)
$(MAKE) -C $(LIBFT_DIR) fclean
re: fclean all
# Simple helper target to remind how to test with LD_PRELOAD
test: all
@echo "Library built:"
@echo " $(NAME)"
@echo "Symlink:"
@echo " $(LINK) -> $(NAME)"
@echo ""
@echo "Example usage (run any program with your malloc):"
@echo " LD_PRELOAD=./$(LINK) ls"