187 lines
6.4 KiB
Makefile
187 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)/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
|
|
|
|
# === 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 |