aboutsummaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile59
1 files changed, 59 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..fd8fe46
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,59 @@
+ifeq ($(HOSTTYPE),)
+HOSTTYPE := $(shell uname -m)_$(shell uname -s)
+endif
+
+CC = cc
+CFLAGS = -Wall -Wextra -Werror -fPIC $(EXTRA)
+
+SRCDIR = src
+INCDIR = inc
+OBJDIR = obj
+LIBDIR = lib
+
+LIBFT_DIR = deps/Libft
+LIBFT = $(LIBFT_DIR)/lib/libft.a
+
+NAME = $(LIBDIR)/libft_malloc_$(HOSTTYPE).so
+LINK = $(LIBDIR)/libft_malloc.so
+
+SRCS = malloc.c free.c realloc.c
+
+OBJS = $(SRCS:%.c=$(OBJDIR)/%.o)
+
+$(NAME): $(LIBFT) $(OBJS) | $(LIBDIR)
+ $(CC) -shared -o $@ $(OBJS) -L $(LIBFT_DIR)/lib -lft
+ ln -sf libft_malloc_$(HOSTTYPE).so $(LINK)
+
+all: $(NAME)
+
+$(LIBFT):
+ $(MAKE) -C $(LIBFT_DIR) NOMALLOC=1
+
+$(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR)
+ $(CC) $(CFLAGS) -I $(INCDIR) -I $(LIBFT_DIR)/inc -c $< -o $@
+
+$(OBJDIR):
+ mkdir -p $(OBJDIR)
+
+$(LIBDIR):
+ mkdir -p $(LIBDIR)
+
+clean:
+ rm -rf $(OBJDIR)
+ rm -f compile_commands.json
+
+fclean: clean
+ rm -rf $(LIBDIR)
+ $(MAKE) -C $(LIBFT_DIR) fclean
+ $(MAKE) -C tests clean
+
+re: fclean all
+
+test: $(NAME)
+ $(MAKE) -C tests test
+
+compile_commands.json: $(SRCS:%=$(SRCDIR)/%)
+ @echo '$(foreach src,$(SRCS),{"directory":"$(CURDIR)","command":"$(CC) $(CFLAGS) -I $(INCDIR) -I $(LIBFT_DIR)/inc -c $(SRCDIR)/$(src)","file":"$(SRCDIR)/$(src)"})' \
+ | jq -s '.' > $@
+
+.PHONY: all clean fclean re test