# Directorios DIR_ROOT := $(dir $(abspath $(MAKEFILE_LIST))) DIR_SOURCES:= $(addsuffix /, $(DIR_ROOT)source) DIR_BIN := $(addsuffix /, $(DIR_ROOT)) DIR_BUILD := $(addsuffix /, $(DIR_ROOT)build) # Variables TARGET_NAME := coffee_crisis_arcade_edition TARGET_FILE := $(DIR_BIN)$(TARGET_NAME) APP_NAME := Coffee Crisis Arcade Edition RELEASE_FOLDER:= ccae_release RELEASE_FILE := $(RELEASE_FOLDER)/$(TARGET_NAME) VERSION := v0.01 # Nombres para los ficheros de lanzamiento WINDOWS_RELEASE := $(TARGET_FILE)-$(VERSION)-win32-x64.zip MACOS_INTEL_RELEASE := $(TARGET_FILE)-$(VERSION)-macos-intel.dmg MACOS_APPLE_SILICON_RELEASE:= $(TARGET_FILE)-$(VERSION)-macos-apple-silicon.dmg LINUX_RELEASE := $(TARGET_FILE)-$(VERSION)-linux.tar.gz # Includes INCLUDES:= -I$(DIR_SOURCES) # Variables según el sistema operativo ifeq ($(OS),Windows_NT) FixPath = $(subst /,\,$1) SOURCES := source/*.cpp CXXFLAGS:= -std=c++20 -Wall -Os -ffunction-sections -fdata-sections -Wl,--gc-sections -static-libstdc++ -Wl,-subsystem,windows CXXFLAGS_DEBUG:= -std=c++20 -Wall -g LDFLAGS := -lmingw32 -lws2_32 -lSDL2main -lSDL2 -lopengl32 RM = del /Q MKD:= mkdir else FixPath = $1 SOURCES := $(shell find $(DIR_SOURCES) -name '*.cpp') SOURCES := source/*.cpp CXXFLAGS:= -std=c++20 -Wall -Os -ffunction-sections -fdata-sections CXXFLAGS_DEBUG:= -std=c++20 -Wall -g LDFLAGS := -lSDL2 RM = rm -f MKD:= mkdir -p UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Linux) LDFLAGS += -lGL endif ifeq ($(UNAME_S),Darwin) CXXFLAGS += -Wno-deprecated CXXFLAGS_DEBUG += -Wno-deprecated LDFLAGS += -framework OpenGL endif endif OBJECTS := $(subst $(DIR_SOURCES), $(DIR_BUILD), $(SOURCES)) OBJECTS := $(OBJECTS:.cpp=.o) DEPENDENCIES:= $(OBJECTS:.o=.d) ############################################################################### # # # RULES # # # ############################################################################### .PHONY: all a1 all: a1 a1: $(TARGET_FILE) $(TARGET_FILE): $(OBJECTS) $(MKD) $(@D) $(CXX) $(OBJECTS) $(LDFLAGS) -o $(TARGET_FILE) $(DIR_BUILD)%.o: $(DIR_SOURCES)%.cpp $(MKD) $(@D) $(CXX) -c $< $(CXXFLAGS) $(INCLUDES) -o $@ -include $(DEPENDENCIES) ############################################################################### # # # CLEAN # # # ############################################################################### .PHONY: clean clean: $(RM) $(call FixPath,$(DIR_BUILD)) ############################################################################### # # # PRINT-VARIABLES # # # ############################################################################### .PHONY: print-variables print-variables: @echo MAKEFILE_LIST: $(MAKEFILE_LIST) @echo "DIR_ROOT :" $(DIR_ROOT) @echo "DIR_SOURCES:" $(DIR_SOURCES) @echo "DIR_BIN :" $(DIR_BIN) @echo "DIR_BUILD :" $(DIR_BUILD) @echo "DIR_IMGUI :" $(DIR_IMGUI) @echo "DIR_IMGUI_SFML:" $(DIR_IMGUI_SFML) @echo "INCLUDES :" $(INCLUDES) @echo CXX: $(CXX) @echo CXXFLAGS: $(CXXFLAGS) @echo LDFLAGS: $(LDFLAGS) @echo SOURCES: $(SOURCES) @echo OBJECTS: $(OBJECTS) @echo DEPENDENCIES: $(DEPENDENCIES) @echo TARGET_NAME: $(TARGET_NAME) @echo TARGET_FILE: $(TARGET_FILE) @echo RM: $(RM) raspi: $(CXX) $(SOURCES) -D ARCADE -D VERBOSE $(CXXFLAGS) $(LDFLAGS) -o $(TARGET_FILE) strip -s -R .comment -R .gnu.version $(TARGET_FILE) --strip-unneeded raspi_debug: $(CXX) $(SOURCES) -D ARCADE -D VERBOSE -D DEBUG $(CXXFLAGS_DEBUG) $(LDFLAGS) -o "$(TARGET_FILE)_debug" windows: @echo off $(CXX) $(SOURCES) $(CXXFLAGS) $(LDFLAGS) -o "$(TARGET_FILE).exe" strip -s -R .comment -R .gnu.version "$(TARGET_FILE).exe" --strip-unneeded windows_rec: @echo off $(CXX) $(SOURCES) -D RECORDING $(CXXFLAGS) $(LDFLAGS) -o "$(TARGET_FILE)_rec.exe" windows_debug: @echo off $(CXX) $(SOURCES) -D DEBUG -D VERBOSE $(CXXFLAGS_DEBUG) $(LDFLAGS) -o "$(TARGET_FILE)_debug.exe" windows_release: @echo off # Crea carpeta temporal 'RELEASE_FOLDER' powershell if (Test-Path "$(RELEASE_FOLDER)") {Remove-Item "$(RELEASE_FOLDER)" -Recurse -Force} powershell if (-not (Test-Path "$(RELEASE_FOLDER)")) {New-Item "$(RELEASE_FOLDER)" -ItemType Directory} # Copia la carpeta 'data' powershell Copy-Item -Path "data" -Destination "$(RELEASE_FOLDER)" -recurse -Force # Copia los ficheros que estan en la raíz del proyecto powershell Copy-Item "LICENSE" -Destination "$(RELEASE_FOLDER)" powershell Copy-Item "README.md" -Destination "$(RELEASE_FOLDER)" powershell Copy-Item "release\*.dll" -Destination "$(RELEASE_FOLDER)" # Compila $(CXX) $(SOURCES) $(CXXFLAGS) $(LDFLAGS) -o "$(RELEASE_FILE).exe" strip -s -R .comment -R .gnu.version "$(RELEASE_FOLDER)/$(TARGET_FILE).exe" --strip-unneeded # Crea el fichero .zip powershell if (Test-Path $(WINDOWS_RELEASE)) {Remove-Item $(WINDOWS_RELEASE)} powershell Compress-Archive -Path "$(RELEASE_FOLDER)"/* -DestinationPath $(WINDOWS_RELEASE) # Elimina la carpeta temporal 'RELEASE_FOLDER' powershell if (Test-Path "$(RELEASE_FOLDER)") {Remove-Item "$(RELEASE_FOLDER)" -Recurse -Force} macos: $(CXX) $(SOURCES) $(CXXFLAGS) $(LDFLAGS) -o "$(TARGET_FILE)" macos_debug: $(CXX) $(SOURCES) -D DEBUG -D VERBOSE $(CXXFLAGS_DEBUG) $(LDFLAGS) -o "$(TARGET_FILE)_debug" macos_release: # Elimina datos de compilaciones anteriores rm -rdf "$(RELEASE_FOLDER)" rm -rdf Frameworks rm -f tmp.dmg rm -f "$(MACOS_INTEL_RELEASE)" rm -f "$(MACOS_APPLE_SILICON_RELEASE)" # Crea la carpeta temporal para hacer el trabajo y las carpetas obligatorias para crear una app de macos mkdir -p "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Frameworks" mkdir -p "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/MacOS" mkdir -p "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources" mkdir -p Frameworks # Copia carpetas y ficheros cp -R data "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources" cp -R release/SDL2.framework "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Frameworks" cp -R release/SDL2.framework Frameworks cp release/*.icns "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources" cp release/Info.plist "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents" cp LICENSE "$(RELEASE_FOLDER)" cp README.md "$(RELEASE_FOLDER)" # Crea enlaces ln -s /Applications "$(RELEASE_FOLDER)"/Applications # Compila la versión para procesadores Intel $(CXX) $(SOURCES) -D MACOS_BUNDLE $(CXXFLAGS) $(LDFLAGS) -o "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/MacOS/$(TARGET_FILE)" -rpath @executable_path/../Frameworks/ -target x86_64-apple-macos10.12 # Empaqueta el .dmg de la versión Intel hdiutil create tmp.dmg -ov -volname "$(APP_NAME)" -fs HFS+ -srcfolder "$(RELEASE_FOLDER)" hdiutil convert tmp.dmg -format UDZO -o "$(MACOS_INTEL_RELEASE)" rm -f tmp.dmg # Compila la versión para procesadores Apple Silicon $(CXX) $(SOURCES) -D MACOS_BUNDLE $(CXXFLAGS) $(LDFLAGS) -o "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/MacOS/$(TARGET_FILE)" -rpath @executable_path/../Frameworks/ -target arm64-apple-macos11 # Empaqueta el .dmg de la versión Apple Silicon hdiutil create tmp.dmg -ov -volname "$(APP_NAME)" -fs HFS+ -srcfolder "$(RELEASE_FOLDER)" hdiutil convert tmp.dmg -format UDZO -o "$(MACOS_APPLE_SILICON_RELEASE)" rm -f tmp.dmg # Elimina las carpetas temporales $(RM) Frameworks $(RM) "$(RELEASE_FOLDER)" linux: $(CXX) $(SOURCES) $(CXXFLAGS) $(LDFLAGS) -o "$(TARGET_FILE)" strip -s -R .comment -R .gnu.version "$(TARGET_FILE)" --strip-unneeded linux_debug: $(CXX) $(SOURCES) -D DEBUG -D VERBOSE $(CXXFLAGS_DEBUG) $(LDFLAGS) -o "$(TARGET_FILE)_debug" linux_release: # Elimina carpetas previas $(RM) "$(RELEASE_FOLDER)" # Crea la carpeta temporal para realizar el lanzamiento mkdir -p "$(RELEASE_FOLDER)" # Copia ficheros cp -R data "$(RELEASE_FOLDER)" cp LICENSE "$(RELEASE_FOLDER)" cp README.md "$(RELEASE_FOLDER)" # Complia $(CXX) $(SOURCES) $(CXXFLAGS) $(LDFLAGS) -o "$(RELEASE_FILE)" strip -s -R .comment -R .gnu.version "$(RELEASE_FILE)" --strip-unneeded # Empaqueta ficheros $(RM) "$(LINUX_RELEASE)" cd "$(RELEASE_FOLDER)" && tar -czvf "../$(LINUX_RELEASE)" * # Elimina la carpeta temporal $(RM) "$(RELEASE_FOLDER)" anbernic: # Elimina carpetas previas $(RM) "$(RELEASE_FOLDER)"_anbernic # Crea la carpeta temporal para realizar el lanzamiento mkdir -p "$(RELEASE_FOLDER)"_anbernic # Copia ficheros cp -R data "$(RELEASE_FOLDER)"_anbernic # Complia $(CXX) $(SOURCES) -D ANBERNIC -D NO_SHADERS -D ARCADE -D VERBOSE $(CXXFLAGS) $(LDFLAGS) -o $(RELEASE_FOLDER)_anbernic/$(TARGET_NAME) $(CXX) $(SOURCES) -D ANBERNIC -D ARCADE -D VERBOSE $(CXXFLAGS) $(LDFLAGS) -o $(RELEASE_FOLDER)_anbernic/$(TARGET_NAME).shaders