forked from LJmartin94/Codam06_MiniShell
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
145 lines (117 loc) · 4.07 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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# **************************************************************************** #
# #
# :::::::: #
# Makefile :+: :+: #
# +:+ #
# By: limartin <[email protected]> +#+ #
# +#+ #
# Created: 2020/10/14 11:19:17 by limartin #+# #+# #
# Updated: 2021/01/13 13:51:14 by jsaariko ######## odam.nl #
# #
# **************************************************************************** #
NAME = minishell
SRC_PATH = ./srcs/
PARSE_PATH = parse/
EX_PATH = execute/
INCL_PATH = ./includes/
UTILS = utils/
LIBFT_PATH = ./libft
CC = gcc
#TODO remove sanitise flag when submitting
# CFLAGS = -Wall -Wextra -Werror -fsanitize=address -g
CFLAGS = -Wall -Wextra -Werror
HEADER_FILES = $(INCL_PATH)
#Source files mandatory part
SRC = $(SRC_PATH)main.c \
$(SRC_PATH)error.c \
$(SRC_PATH)error_exit.c \
$(SRC_PATH)invalid.c \
$(SRC_PATH)$(PARSE_PATH)parse_input.c \
$(SRC_PATH)$(PARSE_PATH)tokenizer.c \
$(SRC_PATH)$(PARSE_PATH)tokenizer_utils.c \
$(SRC_PATH)$(PARSE_PATH)fsm.c \
$(SRC_PATH)$(PARSE_PATH)control_states.c \
$(SRC_PATH)$(PARSE_PATH)basic_states.c \
$(SRC_PATH)$(PARSE_PATH)basic_pad_states.c \
$(SRC_PATH)$(PARSE_PATH)dq_basic_states.c \
$(SRC_PATH)$(PARSE_PATH)dq_bs_basic_states.c \
$(SRC_PATH)$(PARSE_PATH)dq_exit_basic_states.c \
$(SRC_PATH)$(PARSE_PATH)sq_basic_states.c \
$(SRC_PATH)$(PARSE_PATH)sq_exit_basic_states.c \
$(SRC_PATH)$(PARSE_PATH)bs_basic_states.c \
$(SRC_PATH)$(PARSE_PATH)redir_control_states.c \
$(SRC_PATH)$(PARSE_PATH)redir_basic_and_escape_states.c \
$(SRC_PATH)$(PARSE_PATH)redir_quote_states.c \
$(SRC_PATH)$(PARSE_PATH)recognise_token_state.c \
$(SRC_PATH)$(PARSE_PATH)validate_option_flags.c \
$(SRC_PATH)$(PARSE_PATH)comp_links.c \
$(SRC_PATH)$(PARSE_PATH)arg_links.c \
$(SRC_PATH)$(PARSE_PATH)redir_links.c \
$(SRC_PATH)$(PARSE_PATH)free_and_exit.c \
$(SRC_PATH)$(EX_PATH)signals.c \
$(SRC_PATH)$(EX_PATH)execute.c \
$(SRC_PATH)$(EX_PATH)expand.c \
$(SRC_PATH)$(EX_PATH)manage_execution.c \
$(SRC_PATH)$(EX_PATH)build_exec.c \
$(SRC_PATH)$(EX_PATH)redirect.c \
$(SRC_PATH)$(EX_PATH)exec_utils.c \
$(SRC_PATH)$(EX_PATH)echo.c \
$(SRC_PATH)$(EX_PATH)exit.c \
$(SRC_PATH)$(EX_PATH)env.c \
$(SRC_PATH)$(EX_PATH)env_utils.c \
$(SRC_PATH)$(EX_PATH)env_free.c \
$(SRC_PATH)$(EX_PATH)export.c \
$(SRC_PATH)$(EX_PATH)export_utils.c \
$(SRC_PATH)$(EX_PATH)unset.c \
$(SRC_PATH)$(EX_PATH)pwd.c \
$(SRC_PATH)$(EX_PATH)cd.c \
$(SRC_PATH)$(EX_PATH)cd_internal.c \
$(SRC_PATH)$(UTILS)split_unless_escaped.c \
#Source files bonus part
SRC_B = # $(SRC_PATH) bonus_goes_here.c #TODO
#Object files
OBJ := ${SRC:%.c=%.o}
#Bonus object files
BOBJ := ${SRC_B:%.c=%.o}
#Avoid relinking bonus
ifdef WITH_BONUS
COMPILE_OBJECTS = $(OBJ) $(BOBJ)
else
COMPILE_OBJECTS = $(OBJ)
endif
#TODO specifying OS may not be necessary
#Specify OS (Mac default)
ifdef FOR_LINUX
OS_FLAG = LINUX=1
endif
ifndef FOR_LINUX
OS_FLAG = MAC=1
endif
all: $(NAME)
$(NAME): $(COMPILE_OBJECTS)
@make -C $(LIBFT_PATH)
@$(CC) -o $(NAME) $(COMPILE_OBJECTS) $(CFLAGS) -D $(OS_FLAG) \
-L$(LIBFT_PATH) -lft
@echo "Minishell compiled"
%.o: %.c $(HEADER_FILES)
@$(CC) -o $@ -c $< $(CFLAGS) -O3 -I $(INCL_PATH) -I $(LIBFT_PATH) \
-D $(OS_FLAG)
bonus:
@$(MAKE) WITH_BONUS=1 all
@echo "...but done ✨fancy✨"
clean:
@make fclean -C $(LIBFT_PATH)
@rm -f $(OBJ) $(BOBJ)
@echo "Minishell object files cleaned"
fclean: clean
@rm -f $(NAME)
@echo "Minishell fully cleaned"
re: fclean all
linux:
@$(MAKE) FOR_LINUX=1 all
@echo "Compiled for Linux 🐧"
linux_bonus:
@ $(MAKE) WITH_BONUS=1 linux
@echo "...but done ✨fancy✨"
linux_re: fclean linux
.PHONY: all bonus clean fclean re linux linux_bonus linux_re