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 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"