diff --git a/.github/workflows/linux_clang.yml b/.github/workflows/linux_clang.yml index 0081cc4..b35ab2c 100644 --- a/.github/workflows/linux_clang.yml +++ b/.github/workflows/linux_clang.yml @@ -35,7 +35,7 @@ jobs: # Build the lib - name: Build MacroLibX - run: make -j && make fclean && make -j DEBUG=true + run: make -j && make fclean && make debug # Build the example - name: Build Example diff --git a/.github/workflows/linux_gcc.yml b/.github/workflows/linux_gcc.yml index 9a0be87..35e0348 100644 --- a/.github/workflows/linux_gcc.yml +++ b/.github/workflows/linux_gcc.yml @@ -35,7 +35,7 @@ jobs: # Build the lib - name: Build MacroLibX - run: make TOOLCHAIN=gcc -j && make fclean && make TOOLCHAIN=gcc DEBUG=true -j + run: make TOOLCHAIN=gcc -j && make fclean && make TOOLCHAIN=gcc debug # Build the example - name: Build Example diff --git a/.github/workflows/macos_x86.yml b/.github/workflows/macos_x86.yml index 18919d5..78433d2 100644 --- a/.github/workflows/macos_x86.yml +++ b/.github/workflows/macos_x86.yml @@ -35,7 +35,7 @@ jobs: # Build the lib - name: Build MacroLibX - run: make -j && make fclean && make DEBUG=true -j + run: make -j && make fclean && make debug # Build the example - name: Build Example diff --git a/Makefile b/Makefile index c621183..f4d1ebe 100644 --- a/Makefile +++ b/Makefile @@ -6,96 +6,124 @@ # By: maldavid +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2022/10/04 16:43:41 by maldavid #+# #+# # -# Updated: 2024/01/10 14:20:30 by maldavid ### ########.fr # +# Updated: 2024/04/23 22:45:41 by kiroussa ### ########.fr # # # # **************************************************************************** # -NAME = libmlx.so +NAME = libmlx.so +MAKE = make --no-print-directory -SRCS = $(wildcard $(addsuffix /*.cpp, ./src/core)) -SRCS += $(wildcard $(addsuffix /*.cpp, ./src/platform)) -SRCS += $(wildcard $(addsuffix /*.cpp, ./src/renderer)) -SRCS += $(wildcard $(addsuffix /*.cpp, ./src/renderer/**)) +OS ?= $(shell uname -s) +DEBUG ?= false +TOOLCHAIN ?= clang +IMAGES_OPTIMIZED ?= true +FORCE_INTEGRATED_GPU ?= false +GRAPHICS_MEMORY_DUMP ?= false +PROFILER ?= false +_ENABLEDFLAGS = -OBJ_DIR = objs/makefile -OBJS = $(addprefix $(OBJ_DIR)/, $(SRCS:.cpp=.o)) +SRCS = $(wildcard $(addsuffix /*.cpp, src/core)) +SRCS += $(wildcard $(addsuffix /*.cpp, src/platform)) +SRCS += $(wildcard $(addsuffix /*.cpp, src/renderer)) +SRCS += $(wildcard $(addsuffix /*.cpp, src/renderer/**)) -OS = $(shell uname -s) -DEBUG ?= false -TOOLCHAIN ?= clang -IMAGES_OPTIMIZED ?= true -FORCE_INTEGRATED_GPU ?= false -GRAPHICS_MEMORY_DUMP ?= false -PROFILER ?= false +OBJ_DIR = objs/make/$(shell echo $(OS) | tr '[:upper:]' '[:lower:]') +OBJS := $(addprefix $(OBJ_DIR)/, $(SRCS:.cpp=.o)) -MODE = "release" - -CXX = clang++ - -CXXFLAGS = -std=c++17 -O3 -fPIC -Wall -Wextra -Werror -DSDL_MAIN_HANDLED -INCLUDES = -I./includes -I./src -I./third_party - -LDLIBS = +CXX = clang++ +CXXFLAGS = -std=c++17 -O3 -fPIC -Wall -Wextra -Werror -DSDL_MAIN_HANDLED +INCLUDES = -I./includes -I./src -I./third_party ifeq ($(TOOLCHAIN), gcc) - CXX = g++ - CXXFLAGS += -Wno-error=cpp +CXX = g++ +CXXFLAGS += -Wno-error=cpp else - CXXFLAGS += -Wno-error=#warning +CXXFLAGS += -Wno-error=#warning endif ifeq ($(OS), Darwin) - LDLIBS += -L /opt/homebrew/lib -lSDL2 - CXXFLAGS += -I /opt/homebrew/include - NAME = libmlx.dylib +LDFLAGS += -L /opt/homebrew/lib -lSDL2 +CXXFLAGS += -I /opt/homebrew/include +NAME = libmlx.dylib endif ifeq ($(DEBUG), true) - CXXFLAGS += -g -D DEBUG - MODE = "debug" +CXXFLAGS += -g3 -D DEBUG +LDFLAGS += -rdynamic endif ifeq ($(FORCE_INTEGRATED_GPU), true) - CXXFLAGS += -D FORCE_INTEGRATED_GPU +_ENABLEDFLAGS += FORCE_INTEGRATED_GPU endif ifeq ($(IMAGES_OPTIMIZED), true) - CXXFLAGS += -D IMAGE_OPTIMIZED +_ENABLEDFLAGS += IMAGE_OPTIMIZED endif ifeq ($(GRAPHICS_MEMORY_DUMP), true) - CXXFLAGS += -D GRAPHICS_MEMORY_DUMP +_ENABLEDFLAGS += GRAPHICS_MEMORY_DUMP endif ifeq ($(PROFILER), true) - CXXFLAGS += -D PROFILER +_ENABLEDFLAGS += PROFILER endif +CXXFLAGS += $(addprefix -D, $(_ENABLEDFLAGS)) + RM = rm -rf +TPUT = tput -T xterm-256color +_RESET := $(shell $(TPUT) sgr0) +_BOLD := $(shell $(TPUT) bold) +_ITALIC := $(shell $(TPUT) sitm) +_UNDER := $(shell $(TPUT) smul) +_GREEN := $(shell $(TPUT) setaf 2) +_YELLOW := $(shell $(TPUT) setaf 3) +_RED := $(shell $(TPUT) setaf 1) +_GRAY := $(shell $(TPUT) setaf 8) +_PURPLE := $(shell $(TPUT) setaf 5) + +ifeq ($(DEBUG), true) +MODE := $(_RESET)$(_PURPLE)$(_BOLD)Debug$(_RESET)$(_PURPLE) +else +MODE := $(_RESET)$(_GREEN)$(_BOLD)Release$(_RESET)$(_GREEN) +endif + +OBJS_TOTAL = $(words $(OBJS)) +N_OBJS := $(shell find $(OBJ_DIR) -type f -name '*.o' 2>/dev/null | wc -l) +OBJS_TOTAL := $(shell echo $(OBJS_TOTAL) - $(N_OBJS) | bc) +CURR_OBJ = 0 + $(OBJ_DIR)/%.o: %.cpp - @printf "\033[1;32m[compiling... "$(MODE)" "$(CXX)"]\033[1;00m "$<"\n" - @$(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@ + mkdir -p $(dir $@) + $(eval CURR_OBJ=$(shell echo $(CURR_OBJ) + 1 | bc)) + $(eval PERCENT=$(shell echo $(CURR_OBJ) \* 100 / $(OBJS_TOTAL) | bc)) + printf "$(_GREEN)($(_BOLD)%3s%%$(_RESET)$(_GREEN)) $(_RESET)Compiling $(_BOLD)$<$(_RESET)\n" "$(PERCENT)" + $(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@ -all: $(NAME) +all: _printbuildinfos $(NAME) -$(NAME): $(OBJ_DIR) $(OBJS) - @printf "\033[1;32m[linking ... "$(MODE)"]\033[1;00m "$@"\n" - @$(CXX) -shared -o $(NAME) $(OBJS) $(LDLIBS) - @printf "\033[1;32m[build finished]\033[1;00m\n" +$(NAME): $(OBJS) + printf "Linking $(_BOLD)$(NAME)$(_RESET)\n" + $(CXX) -shared -o $(NAME) $(OBJS) $(LDFLAGS) + printf "$(_BOLD)$(NAME)$(_RESET) compiled $(_GREEN)$(_BOLD)successfully$(_RESET)\n" -$(OBJ_DIR): - @mkdir -p $(sort $(addprefix $(OBJ_DIR)/, $(dir $(SRCS)))) - @printf "\033[1;32m[created objs directory]\033[1;00m\n" +_printbuildinfos: + printf "$(_PURPLE)$(_BOLD)MacroLibX $(_RESET)Compiling in $(_BOLD)$(MODE)$(_RESET) mode on $(_BOLD)$(OS)$(_RESET) | Using $(_BOLD)$(CXX)$(_RESET), flags: $(_BOLD)$(_ENABLEDFLAGS)\n" + +debug: + $(MAKE) all DEBUG=true -j clean: - @$(RM) $(OBJ_DIR) - @printf "\033[1;32m[object files removed]\033[1;00m\n" + $(RM) $(OBJ_DIR) + printf "Cleaned $(_BOLD)$(OBJ_DIR)$(_RESET)\n" fclean: clean - @$(RM) $(NAME) - @printf "\033[1;32m["$(NAME)" removed]\033[1;00m\n" + $(RM) $(NAME) + printf "Cleaned $(_BOLD)$(NAME)$(_RESET)\n" re: fclean all -.PHONY: all clean fclean re +.PHONY: all clean debug fclean re + +.SILENT: diff --git a/src/renderer/core/render_core.cpp b/src/renderer/core/render_core.cpp index 1de3720..0a52b5c 100644 --- a/src/renderer/core/render_core.cpp +++ b/src/renderer/core/render_core.cpp @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/17 23:33:34 by maldavid #+# #+# */ -/* Updated: 2024/01/20 08:20:07 by maldavid ### ########.fr */ +/* Updated: 2024/04/23 20:32:54 by kiroussa ### ########.fr */ /* */ /* ************************************************************************** */