-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
122 lines (111 loc) Β· 5.48 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
120
121
122
# #=== Colors ===
NO_COLOR = \033[0m
GRAY = \033[0;1;3;90m
RED = \033[0;1;3;91m
GREEN = \033[0;1;3;92m
GREEN_L = \033[0;1;3;36m
YELLOW = \033[0;1;3;33m
BLUE = \033[0;1;3;34m
# #==============
# #=== Standard ===
NAME = minishell
AUTHOR = BELKARTO && OHALIM
SRC_DIR = src/
OBJ_DIR = obj/
LIBFT = include/libft/libft.a
LEXER_DIR = lexer/lexer lexer/quote lexer/tokens
PARSER_DIR = parser/command_table
PARSER_UTILS_DIR = parser/utils/char_utils parser/utils/path_utils parser/utils/expansion_utils \
parser/utils/file_a_utils parser/utils/file_b_utils parser/utils/expansion_file_utils parser/utils/token_utils \
parser/utils/iterate_tokens_utils parser/utils/get_herdoc parser/utils/syntax_error_utils parser/utils/quotes_utils\
parser/utils/herdoc_lexer
UTILS_DIR = utils/elem_utils utils/print_utils utils/env_utils utils/env_utils2 utils/var_utils \
utils/export_sort utils/tab_utils utils/env_utils3
BUILIN_DIR = built/builtins built/ft_cd built/ft_pwd built/ft_exit built/ft_export built/ft_env built/ft_unset \
built/ft_echo
EXEC_DIR = exec/exec_cmd exec/init_files exec/execute_a exec/execute_b
SRC_FILES = main signals $(LEXER_DIR) $(PARSER_UTILS_DIR) $(PARSER_DIR) \
$(UTILS_DIR) $(BUILIN_DIR) $(EXEC_DIR)
CFLAGS = -Wall -Wextra -Werror -g
#-fsanitize=address
CC = cc
OBJF = .cache_exists
# #================
# #=== check the user to detect readline path ===
ifeq ($(USER), belkarto)
READLINE = -L ~/Desktop/homebrew/Cellar/readline/8.2.1/lib
endif
ifeq ($(USER), iiouma_ii)
READLINE = -L ~/Desktop/brew/Cellar/readline/8.2.1/lib
endif
ifeq ($(USER), ohalim)
READLINE = -L ~/Desktop/brew/Cellar/readline/8.2.1/lib
endif
ifeq ($(USER), brahim)
READLINE = -L ~/Desktop/homebrew/Cellar/readline/8.2.1/lib
endif
# #==============================================
# # ===Better not to touch ===#
SRC = $(addprefix $(SRC_DIR), $(addsuffix .c, $(SRC_FILES)))
OBJ = $(addprefix $(OBJ_DIR), $(addsuffix .o, $(SRC_FILES)))
# #===========================#
all : header $(NAME)
# # == Rule that compile source files into object files ==
$(OBJ_DIR)%.o : $(SRC_DIR)%.c | $(OBJF)
@$(CC) $(CFLAGS) -c $< -o $@
@printf "$(GRAY)\r- Creating little shell ...β$(NO_COLOR)"
@sleep 0.03
@printf "$(GRAY)\r- Creating little shell ...β³$(NO_COLOR)"
@sleep 0.03
# #=======================================================
# #=== rule that compile the final program ===
$(NAME) : $(LIBFT) $(OBJ)
@$(CC) $(CFLAGS) $(OBJ) -lreadline $(READLINE) $(LIBFT) -o $(NAME)
@printf "$(GREEN)\n- Little shell is ready β
π₯³\n$(NO_COLOR)"
# #===========================================
# stty -echoctl
# #== creat bonus part ===
$(LIBFT) : include/libft
@make -C include/libft
# #=======================
#
# #== rule that called if object folder doesn't exist ==
$(OBJF):
@mkdir -p $(OBJ_DIR)
@mkdir -p $(OBJ_DIR)/utils
@mkdir -p $(OBJ_DIR)/lexer
@mkdir -p $(OBJ_DIR)/parser
@mkdir -p $(OBJ_DIR)/parser/utils
@mkdir -p $(OBJ_DIR)/built
@mkdir -p $(OBJ_DIR)/exec
# #=====================================================
## # == rule deleting compiled files : the cache folder ==
clean : header
@rm -rf $(OBJ_DIR)
@make clean -C include/libft
@printf "$(BLUE)clean\t:\t\t\t$(GREEN)[β]$(NO_COLOR)\n"
# # =====================================================
# # == Rule calling clean and deleting the final file ==
fclean : header clean
@make fclean -C include/libft
@rm -f $(NAME)
@printf "$(BLUE)fclean\t:\t\t\t$(GREEN)[β]$(NO_COLOR)\n\n"
# # ====================================================
# # == HEADER DISPLAYS AUTHOR'S NAME AND COMILER AND FLAGS BEEN USED AND ===
header:
@printf "$(GREEN)"
@echo " βββββββββββ ββ βββββββ ββ βββββββββ ββ ββ βββββββββ ββ ββ "
@echo " ββββββββββββββ βββ βββββββββ βββ βββ βββ βββ βββ βββ βββ βββ βββ "
@echo "βββ βββ βββ ββββ βββ βββ ββββ βββ ββ βββ βββ βββ ββ βββ βββ "
@echo "βββ βββ βββ ββββ βββ βββ ββββ βββ βββββββββββββ βββββββ βββ βββ "
@echo "βββ βββ βββ ββββ βββ βββ ββββ ββββββββββββ βββββββββββββ ββββββββ βββ βββ "
@echo "βββ βββ βββ βββ βββ βββ βββ βββ βββ βββ βββ ββ βββ βββ "
@echo "βββ βββ βββ βββ βββ βββ βββ ββ βββ βββ βββ βββ βββ ββββ β ββββ β "
@echo " ββ βββ ββ ββ ββ ββ ββ ββββββββββ βββ ββ ββββββββββ βββββββββ βββββββββ "
@echo
@printf "$(GREEN_L)Author\t: $(BLUE)$(AUTHOR)\n"
@printf "$(GREEN_L)CC \t: $(YELLOW)$(CC)\n\033[m"
@printf "$(GREEN_L)Flags \t: $(YELLOW)$(CFLAGS)\n\033[m"
@echo
# # ========================================================================
re : fclean all