minishell/Makefile

177 lines
4.2 KiB
Makefile

NAME = minishell
DEBUG = -g -O0
# -fno-omit-frame-pointer is to prevent malloc stacktraces from being truncated,
# see "My malloc stacktraces are too short" here:
# https://github.com/google/sanitizers/wiki/AddressSanitizer
ASAN = -fsanitize=address -fno-omit-frame-pointer
TSAN = -fsanitize=thread
UBSAN = -fsanitize=undefined
LDLIBS = \
-lreadline \
-lft
LIBFTDIR = ./libft/
LIBFT = $(LIBFTDIR)libft.a
IFLAGS = -I$(LIBFTDIR)
LINCLUDE = -L$(LIBFTDIR)
ifeq ($(CFLAGS),)
CFLAGS = -Wall -Wextra -Werror $(DEBUG)
endif
export CFLAGS
srcs = \
src/buffer/buffer.c \
src/buffer/buffer_charptr.c \
src/env/env.c \
src/env/env_convert.c \
src/env/env_manip.c \
src/env/envp.c \
src/executing/here_doc/here_doc.c \
src/executing/here_doc/here_doc_expand_line.c \
src/executing/here_doc/random_filename.c \
src/executing/here_doc/strip_newline.c \
src/executing/simple_cmd/simple_cmd_execute.c \
src/ft_errno.c \
src/get_command.c \
src/parser/cmdgroup/cmdgroup.c \
src/parser/cmdgroup/cmdgroup_builder.c \
src/parser/cmdgroup/paren.c \
src/parser/cmdlist/cmdlist.c \
src/parser/cmdlist/cmdlist_builder.c \
src/parser/cmdlist/cmdlist_debug.c \
src/parser/cmdlist/cmdlist_item.c \
src/parser/cmdlist/operator.c \
src/parser/matchers/blank.c \
src/parser/matchers/identifier.c \
src/parser/matchers/metacharacter.c \
src/parser/matchers/operator_combo.c \
src/parser/matchers/operator_start.c \
src/parser/matchers/pipe.c \
src/parser/matchers/quote.c \
src/parser/pipeline/pipeline.c \
src/parser/pipeline/pipeline_debug.c \
src/parser/pipeline/pipeline_parse.c \
src/parser/pipeline/pipeline_parse_baseops.c \
src/parser/remove_quotes/cmdgroup_remove_quotes.c \
src/parser/remove_quotes/remove_quotes.c \
src/parser/simple_cmd/simple_cmd.c \
src/parser/worddesc/worddesc.c \
src/parser/wordlist/wordlist.c \
src/parser/wordlist/wordlist_copy.c \
src/parser/wordlist/wordlist_debug.c \
src/parser/wordlist/wordlist_idx.c \
src/parser/wordlist/wordlist_quicksort.c \
src/parser/wordlist/wordlist_utils.c \
src/parser/wordsplit/rule_utils.c \
src/parser/wordsplit/tokenizing_1_5.c \
src/parser/wordsplit/tokenizing_6_10.c \
src/parser/wordsplit/wordsplit.c \
src/parser/wordsplit/wordsplit_utils.c \
src/subst/path_split.c \
src/subst/replace_substr.c \
src/subst/simple_filename_exp.c \
src/subst/simple_filename_exp_utils.c \
src/subst/variable_subst.c \
src/subst/variable_subst_utils.c \
src/subst/wildcard_exp.c \
src/subst/wildcard_exp_utils.c \
src/subst/wildcard_exp_utils2.c \
src/treedrawing.c \
objs = $(srcs:.c=.o)
export objs
minishell_objs = $(addsuffix .o,src/$(NAME)) $(objs)
all_objs = $(minishell_objs)
deps = $(all_objs:.o=.d)
.PHONY: all clean fclean re norm tests ctests ctestsa ctestsub ctestst alla \
allub allt testsa testsub testst inttests inttestsa inttestsub inttestst
all: $(NAME)
-include $(deps)
$(NAME): $(minishell_objs) $(LIBFT)
$(CC) $(CFLAGS) -o $@ $(minishell_objs) $(LINCLUDE) $(LDLIBS)
$(LIBFT):
+$(MAKE) -C $(LIBFTDIR)
%.o: %.c
$(CC) -c $(CFLAGS) $(IFLAGS) -o $*.o $*.c
$(CC) -MM $(CFLAGS) $(IFLAGS) $*.c > $*.d
clean:
+$(MAKE) -C $(LIBFTDIR) clean
find . -name '*.o' -print -delete
find . -name '*.d' -print -delete
fclean: clean
$(MAKE) -C $(LIBFTDIR) fclean
rm -f $(NAME)
+make -C tests fclean
re:
+make fclean
+make all
norm:
norminette src libft | grep -v OK || true
tests:
+make fclean
+make testsa
+make fclean
+make testsub
+make fclean
+make testst
@echo "All tests passed!"
testsa: CFLAGS += $(ASAN)
testsa:
@echo "Running tests with AddressSanitizer..."
+make inttests
+make ctests
testsub: CFLAGS += $(UBSAN)
testsub: all
@echo "Running tests with UndefinedBehaviourSanitizer..."
+make inttests
+make ctests
testst: CFLAGS += $(TSAN)
testst: all
@echo "Running tests with ThreadSanitizer..."
+make inttests
+make ctests
inttests: all
./test.sh
inttestsa: CFLAGS += $(ASAN)
inttestsa: all
./test.sh
inttestsub: CFLAGS += $(UBSAN)
inttestsub: all
./test.sh
inttestst: CFLAGS += $(TSAN)
inttestst: all
./test.sh
ctests: $(LIBFT) all
+make -C tests
ctestsa: CFLAGS += $(ASAN)
ctestsa: ctests
ctestsub: CFLAGS += $(UBSAN)
ctestsub: ctests
ctestst: CFLAGS += $(TSAN)
ctestst: ctests
alla: CFLAGS += $(ASAN)
alla: all
allub: CFLAGS += $(UBSAN)
allub: all
allt: CFLAGS += $(TSAN)
allt: all