114 lines
4.0 KiB
Makefile
114 lines
4.0 KiB
Makefile
# **************************************************************************** #
|
|
# #
|
|
# ::: :::::::: #
|
|
# Makefile :+: :+: :+: #
|
|
# +:+ +:+ +:+ #
|
|
# By: anarama <anarama@student.42.fr> +#+ +:+ +#+ #
|
|
# +#+#+#+#+#+ +#+ #
|
|
# Created: 2024/07/05 12:24:47 by victor #+# #+# #
|
|
# Updated: 2025/05/15 17:07:59 by victor ### ########.fr #
|
|
# #
|
|
# **************************************************************************** #
|
|
|
|
# COMPILER AND FLAGS
|
|
CC := cc
|
|
CFLAGS := -Werror -Wall -Wextra
|
|
|
|
# DIRECTORIES
|
|
SRCDIR := src
|
|
ASTDIR := ast
|
|
BULDINDIR := builtin
|
|
OBJDIR := obj
|
|
TOKENDIR := tokenizer
|
|
BINDIR := bin
|
|
|
|
SRC := src/commands.c src/environment_variables.c \
|
|
src/handle_signals.c src/input.c src/list_memory.c \
|
|
src/list.c src/minishell.c \
|
|
src/path_utils.c src/termios.c \
|
|
src/utils.c src/utils2.c src/utils3.c \
|
|
src/environment_variables_manip.c \
|
|
src/wildcards.c src/execution.c \
|
|
src/non_interactive.c src/wildcards_hanlde_match.c \
|
|
src/wildcards_helper.c
|
|
|
|
PROMPT_SRC := prompt/prompt_input.c prompt/prompt_string_management.c \
|
|
prompt/prompt_utils.c prompt/tab_completion.c \
|
|
prompt/escape_sequences.c prompt/arrowkeys.c \
|
|
prompt/prompt_print.c prompt/tab_get_word.c \
|
|
prompt/non_blocking_mode.c prompt/prompt_handle_chars.c \
|
|
|
|
AST_SRC := ast/ast_utils.c \
|
|
ast/handle_command.c ast/handle_fds.c \
|
|
ast/parse_tokens.c ast/parser.c \
|
|
ast/syntax_check.c ast/handle_redirs.c \
|
|
ast/handle_heredoc.c ast/parse_tokens_helper.c \
|
|
ast/syntax_check_helper.c ast/buildin.c
|
|
|
|
TOKEN_SRC := tokenizer/check_special_symbol.c \
|
|
tokenizer/create_token_double_special_symbol.c \
|
|
tokenizer/create_token_single_special_symbol.c \
|
|
tokenizer/create_token_word.c \
|
|
tokenizer/create_token.c \
|
|
tokenizer/tokenizer.c \
|
|
tokenizer/subshell.c tokenizer/evaluate_input.c \
|
|
tokenizer/input_skip_patterns.c \
|
|
tokenizer/token_heredoc.c \
|
|
tokenizer/tokenizer_heredoc_helper.c tokenizer/evaluate_input_helper.c \
|
|
tokenizer/evaluate_input_helper2.c
|
|
|
|
BUILDIN_SRC := builtin/ft_echo.c builtin/ft_env.c \
|
|
builtin/ft_pwd.c builtin/ft_unset.c \
|
|
builtin/ft_export.c builtin/ft_exit.c \
|
|
builtin/ft_cd.c
|
|
|
|
# OBJECT FILES
|
|
OBJ := $(SRC:%.c=$(OBJDIR)/%.o)
|
|
AST_OBJ := $(AST_SRC:ast/%.c=$(OBJDIR)/ast/%.o)
|
|
BUILDIN_OBJ := $(BUILDIN_SRC:builtin/%.c=$(OBJDIR)/builtin/%.o)
|
|
PROMPT_OBJ := $(PROMPT_SRC:prompt/%.c=$(OBJDIR)/prompt/%.o)
|
|
TOKEN_OBJ := $(TOKEN_SRC:tokenizer/%.c=$(OBJDIR)/tokenizer/%.o)
|
|
|
|
NAME := $(BINDIR)/minishell
|
|
LIBS := libft/libft.a
|
|
|
|
# Create object directory if none exists
|
|
$(shell mkdir -p $(BINDIR) $(OBJDIR) $(OBJDIR)/ast $(OBJDIR)/src $(OBJDIR)/tokenizer $(OBJDIR)/builtin $(OBJDIR)/prompt)
|
|
|
|
all: $(NAME) $(BINDIR)
|
|
cp -r $(BINDIR) ..
|
|
|
|
$(NAME): $(OBJ) $(AST_OBJ) $(TOKEN_OBJ) $(BUILDIN_OBJ) $(PROMPT_OBJ) $(LIBS) minishell.h
|
|
$(CC) -static $(CFLAGS) $(OBJ) $(AST_OBJ) $(TOKEN_OBJ) $(BUILDIN_OBJ) $(PROMPT_OBJ) $(LIBS) -o $(NAME)
|
|
|
|
test: $(TEST_OBJ) $(AST_OBJ) $(TOKEN_OBJ) $(LIBS) minishell.h
|
|
$(CC) $(CFLAGS) $(TEST_OBJ) $(AST_OBJ) $(TOKEN_OBJ) $(LIBS) -o $(TEST_NAME)
|
|
|
|
clean:
|
|
make clean -C libft
|
|
rm -rf $(OBJ) $(BINDIR) $(AST_OBJ) $(TEST_OBJ) $(TOKEN_OBJ) $(PROMPT_OBJ) $(BUILDIN_OBJ)
|
|
|
|
fclean: clean
|
|
rm -f $(NAME) $(TEST_NAME)
|
|
make fclean -C libft
|
|
|
|
re: fclean all
|
|
|
|
$(OBJDIR)/%.o: %.c
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
$(OBJDIR)/builtin/%.o: builtin/%.c
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
$(OBJDIR)/prompt/%.o: prompt/%.c
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
$(OBJDIR)/ast/%.o: ast/%.c
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
$(OBJDIR)/tokenizer/%.o: tokenizer/%.c
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
$(LIBS):
|
|
make bonus -C libft
|