Cube3d/Makefile

189 lines
6.4 KiB
Makefile

CC = gcc
CFLAGS = -Wall -Wextra -Werror
NAME = cub3d
SRCDIR = srcs
INCDIR = includes
LIBFT = libft/libft.a
GNL = gnl/gnl.a
MLX_DIR = minilibx-linux
MLX = $(MLX_DIR)/libmlx_Linux.a
MLX_REPO = https://git.gasoff.ovh/lfirmin/mlx_42.git
# Flags pour MLX (Linux)
MLX_FLAGS = -lXext -lX11 -lm
# Couleurs
RED = \033[0;31m
GREEN = \033[0;32m
YELLOW = \033[0;33m
BLUE = \033[0;34m
MAGENTA = \033[0;35m
CYAN = \033[0;36m
WHITE = \033[0;37m
RESET = \033[0m
BOLD = \033[1m
SRCS = \
$(SRCDIR)/main.c \
$(SRCDIR)/parsing/parsing.c \
$(SRCDIR)/parsing/check_file.c \
$(SRCDIR)/parsing/init_parsing.c \
$(SRCDIR)/parsing/get_map.c \
$(SRCDIR)/parsing/get_map_2.c \
$(SRCDIR)/parsing/line_detect.c \
$(SRCDIR)/parsing/get_textures.c \
$(SRCDIR)/parsing/check_colors.c \
$(SRCDIR)/parsing/check_map.c \
$(SRCDIR)/parsing/check_map_2.c \
$(SRCDIR)/utils/init.c \
$(SRCDIR)/utils/utils.c \
$(SRCDIR)/utils/free.c \
$(SRCDIR)/exec/draw.c \
$(SRCDIR)/exec/hooks.c \
$(SRCDIR)/exec/image.c \
$(SRCDIR)/exec/init.c \
$(SRCDIR)/exec/loop.c \
$(SRCDIR)/exec/player.c \
$(SRCDIR)/exec/raycast.c \
$(SRCDIR)/exec/textures.c \
$(SRCDIR)/exec/world.c \
$(SRCDIR)/exec/raycast_utils.c
# === Includes ===
INCS = \
$(INCDIR)/parsing.h \
$(INCDIR)/cub.h \
$(INCDIR)/exec.h \
$(INCDIR)/keys.h
# Animation de chargement
define loading_animation
@echo "$(1)"
@for i in 1 2 3 4 5 6 7 8 9 10; do \
printf "$(CYAN)["; \
for j in $$(seq 1 $$i); do printf "█"; done; \
for j in $$(seq $$i 9); do printf " "; done; \
printf "] $$(($$i * 10))%%$(RESET)\r"; \
sleep 0.1; \
done
@echo ""
endef
all:
@echo "$(BOLD)$(MAGENTA)"
@echo "╔════════════════════════════════════════╗"
@echo "║ 🎮 CUB3D BUILD 🎮 ║"
@echo "╚════════════════════════════════════════╝"
@echo "$(RESET)"
@$(MAKE) -s $(NAME)
$(MLX_DIR):
@echo "$(BOLD)$(CYAN)📦 Cloning MLX42...$(RESET)"
$(call loading_animation,$(YELLOW)⬇️ Downloading MLX42 library...)
@if [ ! -d "$(MLX_DIR)/.git" ]; then \
rm -rf $(MLX_DIR) > /dev/null 2>&1; \
git clone $(MLX_REPO) $(MLX_DIR) > /dev/null 2>&1; \
fi
@echo "$(GREEN)✅ MLX42 cloned successfully!$(RESET)"
@echo ""
$(MLX): $(MLX_DIR)
@echo "$(BOLD)$(BLUE)🔨 Building MLX42...$(RESET)"
$(call loading_animation,$(YELLOW)⚙️ Compiling MLX42...)
@$(MAKE) -s -C $(MLX_DIR) > /dev/null 2>&1
@echo "$(GREEN)✅ MLX42 built successfully!$(RESET)"
@echo ""
$(LIBFT):
@echo "$(BOLD)$(BLUE)📚 Building libft...$(RESET)"
@$(MAKE) -s -C libft > /dev/null 2>&1 & \
PID=$$!; \
for i in 1 2 3 4 5 6 7 8 9 10; do \
printf "$(CYAN)["; \
for j in $$(seq 1 $$i); do printf "█"; done; \
for j in $$(seq $$i 9); do printf " "; done; \
printf "] $$(($$i * 10))%%$(RESET)\r"; \
sleep 0.1; \
done; \
wait $$PID; \
echo ""
@echo ""
$(GNL):
@echo "$(BOLD)$(BLUE)📚 Building gnl...$(RESET)"
@$(MAKE) -s -C gnl > /dev/null 2>&1 & \
PID=$$!; \
for i in 1 2 3 4 5 6 7 8 9 10; do \
printf "$(CYAN)["; \
for j in $$(seq 1 $$i); do printf "█"; done; \
for j in $$(seq $$i 9); do printf " "; done; \
printf "] $$(($$i * 10))%%$(RESET)\r"; \
sleep 0.1; \
done; \
wait $$PID; \
echo ""
@echo ""
$(NAME): $(MLX) $(LIBFT) $(GNL) $(SRCS) $(INCS)
@echo "$(BOLD)$(BLUE)🎯 Building $(NAME)...$(RESET)"
$(call loading_animation,$(YELLOW)🚀 Compiling main executable...)
@$(CC) -g -I$(INCDIR) -I$(MLX_DIR)/include $(SRCS) -o $(NAME) $(LIBFT) $(GNL) $(MLX) $(MLX_FLAGS)
@echo "$(BOLD)$(GREEN)"
@echo "╔════════════════════════════════════════╗"
@echo "║ 🎉 BUILD SUCCESSFUL! 🎉 ║"
@echo "║ ║"
@echo "║ Your $(NAME) is ready to use! 🚀 ║"
@echo "╚════════════════════════════════════════╝"
@echo "$(RESET)"
clean:
@echo "$(BOLD)$(YELLOW)"
@echo "╔════════════════════════════════════════╗"
@echo "║ 🧹 CLEANING UP 🧹 ║"
@echo "╚════════════════════════════════════════╝"
@echo "$(RESET)"
$(call loading_animation,$(YELLOW)🗑️ Cleaning object files...)
@rm -f $(NAME)
@make clean -s -C libft > /dev/null 2>&1
@make clean -s -C gnl > /dev/null 2>&1
@if [ -d "$(MLX_DIR)" ]; then make clean -s -C $(MLX_DIR) > /dev/null 2>&1; fi
@echo "$(GREEN)✅ Clean completed!$(RESET)"
clean1:
@echo "$(CYAN)🗑️ Removing executable...$(RESET)"
@rm -f $(NAME)
@echo "$(GREEN)✅ Executable removed!$(RESET)"
fclean:
@echo "$(BOLD)$(RED)"
@echo "╔════════════════════════════════════════╗"
@echo "║ 💣 DEEP CLEAN 💣 ║"
@echo "╚════════════════════════════════════════╝"
@echo "$(RESET)"
@$(MAKE) -s clean1
$(call loading_animation,$(RED)🔥 Full cleanup in progress...)
@make fclean -s -C libft > /dev/null 2>&1
@make fclean -s -C gnl > /dev/null 2>&1
@if [ -d "$(MLX_DIR)/minilibx-linux" ]; then make fclean -s -C $(MLX_DIR)/minilibx-linux > /dev/null 2>&1; fi
@rm -rf $(MLX_DIR)
@echo ""
@echo "$(BOLD)$(GREEN)"
@echo "╔════════════════════════════════════════╗"
@echo "║ ✨ DEEP CLEAN COMPLETE! ✨ ║"
@echo "║ ║"
@echo "║ All files have been removed! 🗑️ ║"
@echo "╚════════════════════════════════════════╝"
@echo "$(RESET)"
re:
@echo "$(BOLD)$(MAGENTA)"
@echo "╔════════════════════════════════════════╗"
@echo "║ 🔄 REBUILDING 🔄 ║"
@echo "╚════════════════════════════════════════╝"
@echo "$(RESET)"
@$(MAKE) -s fclean
@echo ""
@$(MAKE) -s all
.PHONY: all clean fclean re clean1