# **************************************************************************** #
#                                                                              #
#                                                         :::      ::::::::    #
#    Makefile                                           :+:      :+:    :+:    #
#                                                     +:+ +:+         +:+      #
#    By: lfirmin lfirmim@student.42.fr>             +#+  +:+       +#+         #
#                                                 +#+#+#+#+#+   +#+            #
#    Created: 2024/08/12 07:07:31 by lfirmin           #+#    #+#              #
#    Updated: 2024/11/07 07:46:53 by lfirmin          ###   ########.fr        #
#                                                                              #
# **************************************************************************** #

NAME = push_swap
PRINTF = libftprintf.a
LIBFT = libft.a
SRC_FILES = main.c op.c sort_tiny.c stack.c utils.c sort_utils.c sort.c \
			calc_cheap.c calc_cheap_utils.c sort_2.c pars.c
INCLUDES_FILES = include/pushswap.h
SRC_DIR = srcs/
SRC = $(addprefix $(SRC_DIR), $(SRC_FILES))
OBJ_DIR = obj/
OBJ = $(addprefix $(OBJ_DIR), $(SRC_FILES:.c=.o))
CC = cc
CFLAGS = -Wall -Werror -Wextra -g3
INCLUDE = -I include
RM = rm -rf
MKDIR = mkdir -p

GREEN = \033[0;32m
YELLOW = \033[0;33m
CYAN = \033[0;36m
RESET = \033[0m
BOLD = \033[1m
WHITE = \033[0;97m

LOADING_CHARS = ⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏

define PUSHSWAP_ART
 ________  ___  ___  ________  ___  ___  ________  ___       __   ________  ________
|\   __  \|\  \|\  \|\   ____\|\  \|\  \|\   ____\|\  \     |\  \|\   __  \|\   __  \\
\ \  \|\  \ \  \\\  \ \  \___|\ \  \\\  \ \  \___|\ \  \    \ \  \ \  \|\  \ \  \|\  \\
 \ \   ____\ \  \\\  \ \_____  \ \   __  \ \_____  \ \  \  __\ \  \ \   __  \ \   ____\\
  \ \  \___|\ \  \\\  \|____|\  \ \  \ \  \|____|\  \ \  \|\__\_\  \ \  \ \  \ \  \___||
   \ \__\    \ \_______\____\_\  \ \__\ \__\____\_\  \ \____________\ \__\ \__\ \__\\
    \|__|     \|_______|\_________\|__|\|__|\_________\|____________|\|__|\|__|\|__|
                       \|_________|        \|_________|

endef
export PUSHSWAP_ART

all: print_art $(NAME)

print_art:
	@printf "$(CYAN)%s$(RESET)\n" "$$PUSHSWAP_ART"

$(NAME): $(OBJ) $(INCLUDES_FILES)
	@printf "$(BOLD)$(WHITE)Hello Sir,\nWelcome to the $(GREEN)PUSH_SWAP$(WHITE) compilation process.\nPlease hold on as we prepare your program.\n\n$(RESET)"
	@make -s -C printf_fd
	@make -s -C libft
	@printf "$(YELLOW)Compiling Push_swap, Please wait...$(RESET)"
	@for char in $(LOADING_CHARS); do \
		printf "\r$(YELLOW)Compiling Push_swap, Please wait... $$char$(RESET)"; \
		sleep 0.1; \
	done
	@$(CC) $(CFLAGS) $(OBJ) $(INCLUDE) printf_fd/$(PRINTF) libft/$(LIBFT) -o $(NAME)
	@printf "\r$(GREEN)Great news ! $(WHITE)Push_swap compiled successfully !     $(RESET)\n\n"
	@printf "$(BOLD)$(WHITE)Compilation complete !\n$(GREEN)PUSH_SWAP$(WHITE) is ready to use !\n"

$(OBJ_DIR)%.o: $(SRC_DIR)%.c
	@$(MKDIR) $(OBJ_DIR)
	@$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@

clean:
	@make clean -s -C printf_fd
	@make clean -s -C libft
	@$(RM) $(OBJ_DIR)
	@printf "$(WHITE)Clean process completed for $(GREEN)Push_swap.$(RESET)\n"

clean1:
	@$(RM) $(OBJ_DIR)
	@printf "$(WHITE)Clean process completed for $(GREEN)Push_swap.$(RESET)\n"

fclean: clean1
	@make fclean -s -C printf_fd
	@make fclean -s -C libft
	@$(RM) $(NAME)
	@$(RM) $(PRINTF)
	@$(RM) $(LIBFT)
	@printf "$(WHITE)Full clean process completed for $(GREEN)Push_swap.$(RESET)\n"

re: fclean all

.PHONY: all clean fclean re print_art

norm:
	norminette $(SRC_DIR) include/* printf_fd/* libft/*
