Actualizado a makefile de Mon

This commit is contained in:
2024-06-14 22:24:36 +02:00
parent 6953f34966
commit 9d84dfe38e
3 changed files with 352 additions and 102 deletions

197
Makefile
View File

@@ -1,132 +1,125 @@
executable = coffee_crisis_arcade_edition ###############################################################################
source = source/*.cpp source/common/*.cpp # #
appName = Coffee Crisis Arcade Edition # DIRECTORIES #
releaseFolder = ccae_release # #
version = v0.01 ###############################################################################
# Release names # Project root directory, so everything will be relative to it:
windowsRelease = $(executable)-$(version)-win32-x64.zip DIR_ROOT:= $(dir $(abspath $(MAKEFILE_LIST)))
macosIntelRelease = $(executable)-$(version)-macos-intel.dmg
macosAppleSiliconRelease = $(executable)-$(version)-macos-apple-silicon.dmg
linuxRelease = $(executable)-$(version)-linux.tar.gz
windows: # Root directory for the source code:
@echo off DIR_SOURCES:= $(addsuffix /, $(DIR_ROOT)source)
g++ $(source) -std=c++11 -Wall -Os -lmingw32 -lws2_32 -lSDL2main -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -static-libstdc++ -Wl,-subsystem,windows -o "$(executable).exe"
strip -s -R .comment -R .gnu.version "$(executable).exe" --strip-unneeded
windows_debug: # Executables will be here.
@echo off DIR_BIN:= $(addsuffix /, $(DIR_ROOT))
g++ $(source) -D DEBUG -std=c++11 -Wall -Os -lmingw32 -lws2_32 -lSDL2main -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -static-libstdc++ -Wl,-subsystem,windows -o "$(executable)_debug.exe"
strip -s -R .comment -R .gnu.version "$(executable)_debug.exe" --strip-unneeded
windows_release: # Directories for build artifacts (.o and .d files):
@echo off DIR_BUILD:= $(addsuffix /, $(DIR_ROOT)build)
# Create release folder INCLUDES:= -I$(DIR_SOURCES)
powershell if (Test-Path "$(releaseFolder)") {Remove-Item "$(releaseFolder)" -Recurse -Force}
powershell if (-not (Test-Path "$(releaseFolder)")) {New-Item "$(releaseFolder)" -ItemType Directory}
# Prepare data folder ###############################################################################
powershell Copy-Item -Path "data" -Destination "$(releaseFolder)" -recurse -Force # #
# FLAGS #
# #
###############################################################################
# Copy root files # Compiler flags (for the C++ compiler):
powershell Copy-Item "LICENSE" -Destination "$(releaseFolder)" CXXFLAGS:= -std=c++11 -Wall -Os -ffunction-sections -fdata-sections
powershell Copy-Item "README.md" -Destination "$(releaseFolder)"
powershell Copy-Item "release\*.dll" -Destination "$(releaseFolder)"
# Build # Linker flags (SFML libraries):
g++ $(source) -std=c++11 -Wall -Os -lmingw32 -lws2_32 -lSDL2main -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -static-libstdc++ -Wl,-subsystem,windows -o "$(releaseFolder)/$(executable).exe" LDFLAGS:= -lSDL2
strip -s -R .comment -R .gnu.version "$(releaseFolder)/$(executable).exe" --strip-unneeded
# Create ZIP ###############################################################################
powershell if (Test-Path $(windowsRelease)) {Remove-Item $(windowsRelease)} # #
powershell Compress-Archive -Path "$(releaseFolder)"/* -DestinationPath $(windowsRelease) # FILES #
# #
###############################################################################
# Remove folder SOURCES := $(shell find $(DIR_SOURCES) -name '*.cpp')
powershell if (Test-Path "$(releaseFolder)") {Remove-Item "$(releaseFolder)" -Recurse -Force} OBJECTS := $(subst $(DIR_SOURCES), $(DIR_BUILD), $(SOURCES))
OBJECTS := $(OBJECTS:.cpp=.o)
DEPENDENCIES:= $(OBJECTS:.o=.d)
macos: ###############################################################################
clang++ $(source) -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -o "$(executable)" # #
# TARGETS #
# #
###############################################################################
macos_debug: TARGET_NAME:= coffee_crisis_arcade_edition
clang++ $(source) -D DEBUG -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -o "$(executable)_debug" TARGET_FILE:= $(DIR_BIN)$(TARGET_NAME)
macos_release: ###############################################################################
# Remove data and possible data from previous builds # #
rm -rdf "$(releaseFolder)" # OTHER COMMANDS #
rm -rdf Frameworks # #
rm -f tmp.dmg ###############################################################################
rm -f "$(macosIntelRelease)"
rm -f "$(macosAppleSiliconRelease)"
# Create folders RM:= rm -rf
mkdir -p "$(releaseFolder)/$(appName).app/Contents/Frameworks"
mkdir -p "$(releaseFolder)/$(appName).app/Contents/MacOS"
mkdir -p "$(releaseFolder)/$(appName).app/Contents/Resources"
mkdir -p Frameworks
# Copy folders and files ###############################################################################
cp -R data "$(releaseFolder)/$(appName).app/Contents/Resources" # #
cp -R release/SDL2.framework "$(releaseFolder)/$(appName).app/Contents/Frameworks" # RULES #
cp -R release/SDL2.framework Frameworks # #
###############################################################################
# Copy files .PHONY: all a1
cp release/*.icns "$(releaseFolder)/$(appName).app/Contents/Resources"
cp release/Info.plist "$(releaseFolder)/$(appName).app/Contents"
cp LICENSE "$(releaseFolder)"
cp README.md "$(releaseFolder)"
# Create links all: a1
ln -s /Applications "$(releaseFolder)"/Applications
# Build INTEL a1: $(TARGET_FILE)
clang++ $(source) -D MACOS_BUNDLE -std=c++11 -Wall -Os -framework SDL2 -F ./Frameworks -ffunction-sections -fdata-sections -o "$(releaseFolder)/$(appName).app/Contents/MacOS/$(executable)" -rpath @executable_path/../Frameworks/ -target x86_64-apple-macos10.12
# Build INTEL DMG $(TARGET_FILE): $(OBJECTS)
hdiutil create tmp.dmg -ov -volname "$(appName)" -fs HFS+ -srcfolder "$(releaseFolder)" mkdir -p $(@D)
hdiutil convert tmp.dmg -format UDZO -o "$(macosIntelRelease)" $(CXX) $(OBJECTS) $(LDFLAGS) -o $(TARGET_FILE)
rm -f tmp.dmg
# Build APPLE SILICON $(DIR_BUILD)%.o: $(DIR_SOURCES)%.cpp
clang++ $(source) -D MACOS_BUNDLE -std=c++11 -Wall -Os -framework SDL2 -F ./Frameworks -ffunction-sections -fdata-sections -o "$(releaseFolder)/$(appName).app/Contents/MacOS/$(executable)" -rpath @executable_path/../Frameworks/ -target arm64-apple-macos11 mkdir -p $(@D)
$(CXX) -c $< $(CXXFLAGS) $(INCLUDES) -o $@
# Build APPLE SILICON DMG -include $(DEPENDENCIES)
hdiutil create tmp.dmg -ov -volname "$(appName)" -fs HFS+ -srcfolder "$(releaseFolder)"
hdiutil convert tmp.dmg -format UDZO -o "$(macosAppleSiliconRelease)"
rm -f tmp.dmg
# Remove data ###############################################################################
rm -rdf Frameworks # #
rm -rdf "$(releaseFolder)" # CLEAN #
# #
###############################################################################
linux: .PHONY: clean
g++ $(source) -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -o "$(executable)"
strip -s -R .comment -R .gnu.version "$(executable)" --strip-unneeded
linux_debug: clean:
g++ $(source) -D DEBUG -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -o "$(executable)_debug" $(RM) $(DIR_BIN) $(DIR_BUILD)
strip -s -R .comment -R .gnu.version "$(executable)_debug" --strip-unneeded
linux_release: ###############################################################################
# Remove data # #
rm -rdf "$(releaseFolder)" # PRINT-VARIABLES #
# #
###############################################################################
# Create folders .PHONY: print-variables
mkdir -p "$(releaseFolder)"
# Copy data print-variables:
cp -R data "$(releaseFolder)" @echo MAKEFILE_LIST: $(MAKEFILE_LIST)
cp LICENSE "$(releaseFolder)"
cp README.md "$(releaseFolder)" @echo "DIR_ROOT :" $(DIR_ROOT)
@echo "DIR_SOURCES:" $(DIR_SOURCES)
@echo "DIR_BIN :" $(DIR_BIN)
@echo "DIR_BUILD :" $(DIR_BUILD)
# Build @echo "DIR_IMGUI :" $(DIR_IMGUI)
g++ $(source) -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -o "$(releaseFolder)/$(executable)" @echo "DIR_IMGUI_SFML:" $(DIR_IMGUI_SFML)
strip -s -R .comment -R .gnu.version "$(releaseFolder)/$(executable)" --strip-unneeded @echo "INCLUDES :" $(INCLUDES)
# Pack files @echo CXX: $(CXX)
rm -f "$(linuxRelease)" @echo CXXFLAGS: $(CXXFLAGS)
cd "$(releaseFolder)" && tar -czvf "../$(linuxRelease)" * @echo LDFLAGS: $(LDFLAGS)
# Remove data @echo SOURCES: $(SOURCES)
rm -rdf "$(releaseFolder)" @echo OBJECTS: $(OBJECTS)
@echo DEPENDENCIES: $(DEPENDENCIES)
@echo TARGET_NAME: $(TARGET_NAME)
@echo TARGET_FILE: $(TARGET_FILE)
@echo RM: $(RM)

132
Makefile.old Normal file
View File

@@ -0,0 +1,132 @@
executable = coffee_crisis_arcade_edition
source = source/*.cpp source/common/*.cpp
appName = Coffee Crisis Arcade Edition
releaseFolder = ccae_release
version = v0.01
# Release names
windowsRelease = $(executable)-$(version)-win32-x64.zip
macosIntelRelease = $(executable)-$(version)-macos-intel.dmg
macosAppleSiliconRelease = $(executable)-$(version)-macos-apple-silicon.dmg
linuxRelease = $(executable)-$(version)-linux.tar.gz
windows:
@echo off
g++ $(source) -std=c++11 -Wall -Os -lmingw32 -lws2_32 -lSDL2main -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -static-libstdc++ -Wl,-subsystem,windows -o "$(executable).exe"
strip -s -R .comment -R .gnu.version "$(executable).exe" --strip-unneeded
windows_debug:
@echo off
g++ $(source) -D DEBUG -std=c++11 -Wall -Os -lmingw32 -lws2_32 -lSDL2main -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -static-libstdc++ -Wl,-subsystem,windows -o "$(executable)_debug.exe"
strip -s -R .comment -R .gnu.version "$(executable)_debug.exe" --strip-unneeded
windows_release:
@echo off
# Create release folder
powershell if (Test-Path "$(releaseFolder)") {Remove-Item "$(releaseFolder)" -Recurse -Force}
powershell if (-not (Test-Path "$(releaseFolder)")) {New-Item "$(releaseFolder)" -ItemType Directory}
# Prepare data folder
powershell Copy-Item -Path "data" -Destination "$(releaseFolder)" -recurse -Force
# Copy root files
powershell Copy-Item "LICENSE" -Destination "$(releaseFolder)"
powershell Copy-Item "README.md" -Destination "$(releaseFolder)"
powershell Copy-Item "release\*.dll" -Destination "$(releaseFolder)"
# Build
g++ $(source) -std=c++11 -Wall -Os -lmingw32 -lws2_32 -lSDL2main -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -static-libstdc++ -Wl,-subsystem,windows -o "$(releaseFolder)/$(executable).exe"
strip -s -R .comment -R .gnu.version "$(releaseFolder)/$(executable).exe" --strip-unneeded
# Create ZIP
powershell if (Test-Path $(windowsRelease)) {Remove-Item $(windowsRelease)}
powershell Compress-Archive -Path "$(releaseFolder)"/* -DestinationPath $(windowsRelease)
# Remove folder
powershell if (Test-Path "$(releaseFolder)") {Remove-Item "$(releaseFolder)" -Recurse -Force}
macos:
clang++ $(source) -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -o "$(executable)"
macos_debug:
clang++ $(source) -D DEBUG -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -o "$(executable)_debug"
macos_release:
# Remove data and possible data from previous builds
rm -rdf "$(releaseFolder)"
rm -rdf Frameworks
rm -f tmp.dmg
rm -f "$(macosIntelRelease)"
rm -f "$(macosAppleSiliconRelease)"
# Create folders
mkdir -p "$(releaseFolder)/$(appName).app/Contents/Frameworks"
mkdir -p "$(releaseFolder)/$(appName).app/Contents/MacOS"
mkdir -p "$(releaseFolder)/$(appName).app/Contents/Resources"
mkdir -p Frameworks
# Copy folders and files
cp -R data "$(releaseFolder)/$(appName).app/Contents/Resources"
cp -R release/SDL2.framework "$(releaseFolder)/$(appName).app/Contents/Frameworks"
cp -R release/SDL2.framework Frameworks
# Copy files
cp release/*.icns "$(releaseFolder)/$(appName).app/Contents/Resources"
cp release/Info.plist "$(releaseFolder)/$(appName).app/Contents"
cp LICENSE "$(releaseFolder)"
cp README.md "$(releaseFolder)"
# Create links
ln -s /Applications "$(releaseFolder)"/Applications
# Build INTEL
clang++ $(source) -D MACOS_BUNDLE -std=c++11 -Wall -Os -framework SDL2 -F ./Frameworks -ffunction-sections -fdata-sections -o "$(releaseFolder)/$(appName).app/Contents/MacOS/$(executable)" -rpath @executable_path/../Frameworks/ -target x86_64-apple-macos10.12
# Build INTEL DMG
hdiutil create tmp.dmg -ov -volname "$(appName)" -fs HFS+ -srcfolder "$(releaseFolder)"
hdiutil convert tmp.dmg -format UDZO -o "$(macosIntelRelease)"
rm -f tmp.dmg
# Build APPLE SILICON
clang++ $(source) -D MACOS_BUNDLE -std=c++11 -Wall -Os -framework SDL2 -F ./Frameworks -ffunction-sections -fdata-sections -o "$(releaseFolder)/$(appName).app/Contents/MacOS/$(executable)" -rpath @executable_path/../Frameworks/ -target arm64-apple-macos11
# Build APPLE SILICON DMG
hdiutil create tmp.dmg -ov -volname "$(appName)" -fs HFS+ -srcfolder "$(releaseFolder)"
hdiutil convert tmp.dmg -format UDZO -o "$(macosAppleSiliconRelease)"
rm -f tmp.dmg
# Remove data
rm -rdf Frameworks
rm -rdf "$(releaseFolder)"
linux:
g++ $(source) -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -o "$(executable)"
strip -s -R .comment -R .gnu.version "$(executable)" --strip-unneeded
linux_debug:
g++ $(source) -D DEBUG -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -o "$(executable)_debug"
strip -s -R .comment -R .gnu.version "$(executable)_debug" --strip-unneeded
linux_release:
# Remove data
rm -rdf "$(releaseFolder)"
# Create folders
mkdir -p "$(releaseFolder)"
# Copy data
cp -R data "$(releaseFolder)"
cp LICENSE "$(releaseFolder)"
cp README.md "$(releaseFolder)"
# Build
g++ $(source) -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -o "$(releaseFolder)/$(executable)"
strip -s -R .comment -R .gnu.version "$(releaseFolder)/$(executable)" --strip-unneeded
# Pack files
rm -f "$(linuxRelease)"
cd "$(releaseFolder)" && tar -czvf "../$(linuxRelease)" *
# Remove data
rm -rdf "$(releaseFolder)"

125
Makefile_no Normal file
View File

@@ -0,0 +1,125 @@
###############################################################################
# #
# DIRECTORIES #
# #
###############################################################################
# Project root directory, so everything will be relative to it:
DIR_ROOT:= $(dir $(abspath $(MAKEFILE_LIST)))
# Root directory for the source code:
DIR_SOURCES:= $(addsuffix /, $(DIR_ROOT)source)
# Executables will be here.
DIR_BIN:= $(addsuffix /, $(DIR_ROOT))
# Directories for build artifacts (.o and .d files):
DIR_BUILD:= $(addsuffix /, $(DIR_ROOT)build)
INCLUDES:= -I$(DIR_SOURCES)
###############################################################################
# #
# FLAGS #
# #
###############################################################################
# Compiler flags (for the C++ compiler):
CXXFLAGS:= -std=c++11 -Wall -Os -ffunction-sections -fdata-sections
# Linker flags (SFML libraries):
LDFLAGS:= -lSDL2
###############################################################################
# #
# FILES #
# #
###############################################################################
SOURCES := $(shell find $(DIR_SOURCES) -name '*.cpp')
OBJECTS := $(subst $(DIR_SOURCES), $(DIR_BUILD), $(SOURCES))
OBJECTS := $(OBJECTS:.cpp=.o)
DEPENDENCIES:= $(OBJECTS:.o=.d)
###############################################################################
# #
# TARGETS #
# #
###############################################################################
TARGET_NAME:= coffee_crisis_arcade_edition
TARGET_FILE:= $(DIR_BIN)$(TARGET_NAME)
###############################################################################
# #
# OTHER COMMANDS #
# #
###############################################################################
RM:= rm -rf
###############################################################################
# #
# RULES #
# #
###############################################################################
.PHONY: all a1
all: a1
a1: $(TARGET_FILE)
$(TARGET_FILE): $(OBJECTS)
mkdir -p $(@D)
$(CXX) $(SOURCES) $(CXXFLAGS) $(INCLUDES) $(LDFLAGS) -o $(TARGET_FILE)
$(DIR_BUILD)%.o: $(DIR_SOURCES)%.cpp
mkdir -p $(@D)
$(CXX) -c $< $(CXXFLAGS) $(INCLUDES) -o $@
-include $(DEPENDENCIES)
###############################################################################
# #
# CLEAN #
# #
###############################################################################
.PHONY: clean
clean:
$(RM) $(DIR_BIN) $(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)