-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
119 lines (97 loc) · 3.6 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# **************************************************************************** #
# #
# ::: :::::::: #
# Makefile :+: :+: :+: #
# +:+ +:+ +:+ #
# By: msales-a <[email protected]> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2021/09/14 20:40:30 by msales-a #+# #+# #
# Updated: 2021/10/20 08:48:38 by msales-a ### ########.fr #
# #
# **************************************************************************** #
NAME := minishell
# CONFIG
DIRECTORY_SOURCE := src
DIRECTORY_HEADER := includes
DIRECTORY_TARGET := target
LIBRARIES_SYSTEM := -lreadline
LIBRARIES_COMPILED := ./libs/libft/libft.a
# PREPARE
LIBRARIES_FLAGS_UTIL = -L$(dir $(library)) -l$(patsubst lib%.a,%, $(notdir $(library)))
LIBRARIES_COMPILED_FLAGS := $(foreach library, $(LIBRARIES_COMPILED), $(LIBRARIES_FLAGS_UTIL))
LIBRARIES_FLAGS := $(LIBRARIES_COMPILED_FLAGS) $(LIBRARIES_SYSTEM)
# FILE_SOURCE := $(filter %.c, $(shell find $(DIRECTORY_SOURCE) -type f))
FILE_SOURCE := src/signals.c \
src/builtins/cd.c \
src/builtins/exit.c \
src/builtins/unset.c \
src/builtins/echo.c \
src/builtins/export.c \
src/builtins/pwd.c \
src/builtins/env.c \
src/prompt.c \
src/tokens/token_escaper.c \
src/tokens/tokens_validator.c \
src/tokens/token_recognition.c \
src/tokens/token_util.c \
src/utils/ignore_signal.c \
src/utils/free.c \
src/utils/path_formater.c \
src/utils/error_handler.c \
src/utils/set_variable.c \
src/utils/pipe_util.c \
src/utils/is_directory.c \
src/utils/paths.c \
src/utils/str_list_to_array.c \
src/utils/pipe_minishell.c \
src/utils/array_size.c \
src/utils/ft_strrstr.c \
src/here_document/parser_core.c \
src/here_document/here_document_parser.c \
src/here_document/here_document.c \
src/parser/expand_variables.c \
src/parser/join_words.c \
src/parser/show.c \
src/env/path.c \
src/env/env.c \
src/commands/get_next_command.c \
src/commands/command.c \
src/commands/redirects.c \
src/commands/operators.c \
src/commands/program.c \
src/commands/process_commands.c \
src/hashmap/free.c \
src/hashmap/index.c \
src/hashmap/get_keys.c \
src/hashmap/create.c \
src/hashmap/operations.c \
src/main.c \
OBJECTS_SOURCE := $(addprefix $(DIRECTORY_TARGET)/, $(FILE_SOURCE:.c=.o))
COMPILER := clang
COMPILER_FLAGS := -Wall -Wextra -Werror -g
HANDLER = solver
ifeq ($(SANITIZE_A),true)
COMPILER_FLAGS += -fsanitize=address
endif
ifeq ($(SANITIZE_L),true)
COMPILER_FLAGS += -fsanitize=leak
endif
# RECIPES
.PHONY : all clean fclean make re
all : $(NAME)
clean :
@rm -rf $(DIRECTORY_TARGET)
@$(foreach library, $(LIBRARIES_COMPILED), make -C $(dir $(library)) clean)
fclean : clean
@rm -f $(NAME)
@$(foreach library, $(LIBRARIES_COMPILED), make -C $(dir $(library)) fclean)
re : clean all
$(NAME) : $(OBJECTS_SOURCE) $(LIBRARIES_COMPILED)
@$(COMPILER) $(COMPILER_FLAGS) $(OBJECTS_SOURCE) $(LIBRARIES_FLAGS) -o $(NAME)
$(BONUS_NAME) : $(OBJECTS_SOURCE_BONUS) $(LIBRARIES_COMPILED)
@$(COMPILER) $(COMPILER_FLAGS) $(OBJECTS_SOURCE_BONUS) $(LIBRARIES_FLAGS) -o $(BONUS_NAME)
$(DIRECTORY_TARGET)/%.o : %.c Makefile
@mkdir -p $(@D)
@$(COMPILER) -I$(DIRECTORY_HEADER) $(COMPILER_FLAGS) -c $< -o $@
$(LIBRARIES_COMPILED) :
@$(MAKE) -C $(dir $@)