# Build folder BUILD_DIR = build # Source files SOURCES := \ src/main.cpp \ src/game_data/game_data.cpp \ src/game_data/maps.cpp \ src/game_data/textures.cpp # Assets files ASSETS := \ assets/tileset/tileset.png \ assets/player-sheets/player_idle_sheet.png \ assets/player-sheets/player_walk_sheet.png \ assets/player-sheets/player_run_sheet.png \ assets/props-sheets/barred_door_sheet.png \ assets/props-sheets/lever_sheet.png \ assets/props-sheets/small_chest_sheet.png \ assets/props-sheets/big_chest_sheet.png \ assets/maps/example.json # Output target name OUTPUT := 2D_Engine_Casio_Tool # Compiler and flags CXX = ccache g++ CXXFLAGS = -m32 -Wall -Wextra -std=c++17 -g -no-pie INCLUDE_DIRS = 3rd_party LDFLAGS = -m32 -no-pie # Converter flags FXCONV_FLAGS = --cg --toolchain= --arch=i386 --outputtarget=elf32-x86-64 FXCONV_CONVERTERS = assets/maps/map_converter.py # Change output location OUTPUT := $(BUILD_DIR)/$(OUTPUT) # Deduce objects OBJECTS = $(SOURCES:%.cpp=$(BUILD_DIR)/%.o) $(ASSETS:%=$(BUILD_DIR)/%.o) # Verbose mode ifeq ($(VERBOSE), 1) Q := else Q := @ endif # Colors GREEN := \033[0;32m YELLOW := \033[1;33m RESET := \033[0m # Current file nb to process CURRENT_FILE := 0 # Default targets all: count_build build_dir end # Create build directory build_dir: $(Q)mkdir -p $(dir $(OBJECTS)) # Link target $(OUTPUT): $(OBJECTS) @echo "[100%] $(YELLOW)Linking $(OUTPUT)$(RESET)" $(Q)$(CXX) $(LDFLAGS) -o $@ $(OBJECTS) # Build .o files from .cpp $(BUILD_DIR)/%.o: %.cpp $(eval CURRENT_FILE := $(shell echo $$(($(CURRENT_FILE)+1)))) $(eval PERCENTAGE := $(shell echo $$(($(CURRENT_FILE)*100/$(TOTAL_FILES))))) @echo "[$(PERCENTAGE)%] $(GREEN)Building CXX object $@$(RESET)" $(Q)$(CXX) $(CXXFLAGS) $(INCLUDE_DIRS:%=-I%) -MMD -MP -c $< -o $@ # Convert .*.o from .* (png files for example) $(BUILD_DIR)/%.o: % $(eval CURRENT_FILE := $(shell echo $$(($(CURRENT_FILE)+1)))) $(eval PERCENTAGE := $(shell echo $$(($(CURRENT_FILE)*100/$(TOTAL_FILES))))) @echo "[$(PERCENTAGE)%] $(GREEN)Building FXCONV object $@$(RESET)" $(Q)fxconv $(FXCONV_FLAGS) --converter=$(FXCONV_CONVERTERS) $< -o $@ $(Q)objcopy --add-section .note.GNU-stack=/dev/null $@ # Source files dependencies -include $(OBJECTS:.o=.d) count_build: $(eval export TOTAL_FILES := $(shell echo $$(($$(make -n $(OBJECTS) 2>/dev/null | grep -c "Building") + 1)))) # Print ending message end: $(OUTPUT) @echo "Built target $(OUTPUT)" # Clean .PHONY: clean clean: $(Q)rm -rf $(BUILD_DIR)