Actualizado Makefile para crear releases. Ejecutable pasa a estar en la raíz

This commit is contained in:
2022-11-11 18:55:28 +01:00
parent 7ab81eaf29
commit a3599d2d3d
9 changed files with 271 additions and 117 deletions

15
.gitignore vendored
View File

@@ -1,6 +1,13 @@
.vscode .vscode
*config.txt
*.DS_Store *.DS_Store
bin thumbs.db
data/config/config.txt *.exe
data/config/config.bin *_macos
data/config/score.bin *_linux
*.dmg
*.tar.gz
*.zip
*.app
*config.bin
*score.bin

123
Makefile
View File

@@ -1,19 +1,118 @@
executable = coffee_crisis executable = coffee_crisis
source = source/*.cpp source/common/*.cpp source = source/*.cpp source/common/*.cpp
appName = Coffee Crisis
releaseFolder = cc_release
version = v2.1b
windows: windows:
@echo off @echo off
if not exist bin\ (mkdir bin) powershell if (Test-Path data\config\config.bin) {Remove-Item data\config\config.bin -Recurse -Force}
g++ $(source) -std=c++11 -Wall -O2 -lmingw32 -lSDL2main -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -static-libstdc++ -Wl,-subsystem,windows -o bin/$(executable).exe powershell if (Test-Path data\config\score.bin) {Remove-Item data\config\score.bin -Recurse -Force}
strip -s -R .comment -R .gnu.version bin/$(executable).exe --strip-unneeded g++ $(source) -std=c++11 -Wall -Os -lmingw32 -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_release:
@echo off
# Remove data
powershell if (Test-Path data\config\config.bin) {Remove-Item data\config\config.bin -Recurse -Force}
powershell if (Test-Path data\config\score.bin) {Remove-Item data\config\score.bin -Recurse -Force}
powershell if (Test-Path $(releaseFolder)) {Remove-Item $(releaseFolder) -Recurse -Force}
# Create folders
powershell if (-not (Test-Path $(releaseFolder))) {New-Item $(releaseFolder) -ItemType Directory}
# Copy data
powershell Copy-Item -Path "data" -Destination "$(releaseFolder)" -recurse -Force
powershell Copy-Item "LICENSE" -Destination "$(releaseFolder)"
powershell Copy-Item "README.md" -Destination "$(releaseFolder)"
powershell Copy-Item "release/SDL2.dll" -Destination "$(releaseFolder)"
# Build
g++ $(source) -D RELEASE -std=c++11 -Wall -Os -lmingw32 -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 $(executable)_win_$(version).zip) {Remove-Item $(executable)_win_$(version).zip}
powershell Compress-Archive -Path "$(releaseFolder)"/* -DestinationPath $(executable)_win_$(version).zip
# Remove folder
powershell if (Test-Path $(releaseFolder)) {Remove-Item $(releaseFolder) -Recurse -Force}
macos: macos:
mkdir -p bin rm -f data/config/config.bin
g++ $(source) -std=c++11 -Wall -O2 -lSDL2 -ffunction-sections -fdata-sections -o bin/$(executable)_macos rm -f data/config/score.bin
clang++ $(source) -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -o $(executable)_macos -target arm64-apple-macos11
macos_release:
# Remove data
rm -f data/config/config.bin
rm -f data/config/score.bin
rm -rdf "$(releaseFolder)"
# 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
cp -R data "$(releaseFolder)/$(appName).app/Contents/Resources"
cp -R /Library/Frameworks/SDL2.framework "$(releaseFolder)/$(appName).app/Contents/Frameworks"
cp -R /Library/Frameworks/SDL2.framework Frameworks
# Copy files
cp release/*.icns "$(releaseFolder)/$(appName).app/Contents/Resources"
cp release/Info.plist "$(releaseFolder)/$(appName).app/Contents"
# Build INTEL
clang++ $(source) -D RELEASE -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
rm -f "$(executable)_macos_intel_$(version).dmg"
hdiutil create tmp.dmg -ov -volname "$(appName)" -fs HFS+ -srcfolder "$(releaseFolder)"
hdiutil convert tmp.dmg -format UDZO -o "$(executable)_macos_intel_$(version).dmg"
rm tmp.dmg
# Build APPLE SILICON
clang++ $(source) -D RELEASE -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
rm -f "$(executable)_macos_apple_silicon_$(version).dmg"
hdiutil create tmp.dmg -ov -volname "$(appName)" -fs HFS+ -srcfolder "$(releaseFolder)"
hdiutil convert tmp.dmg -format UDZO -o "$(executable)_macos_apple_silicon_$(version).dmg"
rm tmp.dmg
# Remove data
rm -rdf Frameworks
rm -rdf "$(releaseFolder)"
linux: linux:
mkdir -p bin rm -f data/config/config.bin
g++ $(source) -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -o bin/$(executable)_linux rm -f data/config/score.bin
strip -s -R .comment -R .gnu.version bin/$(executable)_linux --strip-unneeded g++ $(source) -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -o $(executable)_linux
opendingux: strip -s -R .comment -R .gnu.version $(executable)_linux --strip-unneeded
mkdir -p bin
/opt/gcw0-toolchain/usr/bin/mipsel-linux-gcc -D GCWZERO -O2 -std=c++11 -I/opt/gcw0-toolchain/usr/mipsel-gcw0-linux-uclibc/sysroot/usr/include/SDL2 -D_GNU_SOURCE=1 -D_REENTRANT -lSDL2 -lSDL2_mixer -lstdc++ source/*.cpp -o bin/$(executable)_opendingux linux_release:
/opt/gcw0-toolchain/usr/bin/mksquashfs ./default.gcw0.desktop ./icon.png ./bin ./data ./media coffee_crisis.opk -all-root -noappend -no-exports -no-xattrs # Remove data
rm -f data/config/config.bin
rm -f data/config/score.bin
rm -rdf $(releaseFolder)
# Create folders
mkdir -p $(releaseFolder)
# Copy data
cp -R data $(releaseFolder)
cp LICENSE $(releaseFolder)
cp README.md $(releaseFolder)
# Build
g++ $(source) -D RELEASE -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
cd $(releaseFolder) && tar -czvf ../$(executable)_linux_$(version).tar.gz *
# Remove data
rm -rdf $(releaseFolder)

42
release/Info.plist Normal file
View File

@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>es</string>
<key>CFBundleDisplayName</key>
<string>coffee_crisis</string>
<key>CFBundleExecutable</key>
<string>coffee_crisis</string>
<key>CFBundleIconFile</key>
<string>coffee_crisis</string>
<key>CFBundleIconName</key>
<string>coffee_crisis</string>
<key>CFBundleIdentifier</key>
<string>org.jailgames.coffee_crisis</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>coffee_crisis</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0.0</string>
<key>CSResourcesFileMapped</key>
<true/>
<key>LSMinimumSystemVersion</key>
<string>10.12</string>
<key>NSHighResolutionCapable</key>
<true/>
<key>NSHumanReadableCopyright</key>
<string>Copyright 2022 JailDesigner</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>SUPublicDSAKeyFile</key>
<string>dsa_pub.pem</string>
</dict>
</plist>

BIN
release/SDL2.dll Executable file

Binary file not shown.

BIN
release/coffee_crisis.icns Normal file

Binary file not shown.

View File

@@ -1,9 +1,9 @@
#include "asset.h" #include "asset.h"
// Constructor // Constructor
Asset::Asset(std::string path) Asset::Asset(std::string executablePath)
{ {
executablePath = path; this->executablePath = executablePath.substr(0, executablePath.find_last_of("\\/"));
longestName = 0; longestName = 0;
} }

View File

@@ -46,7 +46,7 @@ private:
public: public:
// Constructor // Constructor
Asset(std::string path); Asset(std::string executablePath);
// Destructor // Destructor
~Asset(); ~Asset();

View File

@@ -11,7 +11,7 @@ Director::Director(std::string path)
section.name = PROG_SECTION_LOGO; section.name = PROG_SECTION_LOGO;
// Crea el objeto que controla los ficheros de recursos // Crea el objeto que controla los ficheros de recursos
asset = new Asset(path.substr(0, path.find_last_of("\\/")) + "/../"); asset = new Asset(path);
// Establece la lista de ficheros // Establece la lista de ficheros
if (!setFileList()) if (!setFileList())
@@ -160,122 +160,128 @@ bool Director::initSDL()
// Crea el indice de ficheros // Crea el indice de ficheros
bool Director::setFileList() bool Director::setFileList()
{ {
#ifdef MACOS_BUNDLE
const std::string prefix = "/../Resources";
#else
const std::string prefix = "";
#endif
// Ficheros de configuración // Ficheros de configuración
asset->add("data/config/score.bin", t_data, false); asset->add(prefix + "/data/config/score.bin", t_data, false);
asset->add("data/config/demo.bin", t_data); asset->add(prefix + "/data/config/demo.bin", t_data);
asset->add("data/config/config.bin", t_data, false); asset->add(prefix + "/data/config/config.bin", t_data, false);
asset->add("data/config/gamecontrollerdb.txt", t_data); asset->add(prefix + "/data/config/gamecontrollerdb.txt", t_data);
// Musicas // Musicas
asset->add("data/music/intro.ogg", t_music); asset->add(prefix + "/data/music/intro.ogg", t_music);
asset->add("data/music/playing.ogg", t_music); asset->add(prefix + "/data/music/playing.ogg", t_music);
asset->add("data/music/title.ogg", t_music); asset->add(prefix + "/data/music/title.ogg", t_music);
// Sonidos // Sonidos
asset->add("data/sound/balloon.wav", t_sound); asset->add(prefix + "/data/sound/balloon.wav", t_sound);
asset->add("data/sound/bubble1.wav", t_sound); asset->add(prefix + "/data/sound/bubble1.wav", t_sound);
asset->add("data/sound/bubble2.wav", t_sound); asset->add(prefix + "/data/sound/bubble2.wav", t_sound);
asset->add("data/sound/bubble3.wav", t_sound); asset->add(prefix + "/data/sound/bubble3.wav", t_sound);
asset->add("data/sound/bubble4.wav", t_sound); asset->add(prefix + "/data/sound/bubble4.wav", t_sound);
asset->add("data/sound/bullet.wav", t_sound); asset->add(prefix + "/data/sound/bullet.wav", t_sound);
asset->add("data/sound/coffeeout.wav", t_sound); asset->add(prefix + "/data/sound/coffeeout.wav", t_sound);
asset->add("data/sound/hiscore.wav", t_sound); asset->add(prefix + "/data/sound/hiscore.wav", t_sound);
asset->add("data/sound/itemdrop.wav", t_sound); asset->add(prefix + "/data/sound/itemdrop.wav", t_sound);
asset->add("data/sound/itempickup.wav", t_sound); asset->add(prefix + "/data/sound/itempickup.wav", t_sound);
asset->add("data/sound/menu_move.wav", t_sound); asset->add(prefix + "/data/sound/menu_move.wav", t_sound);
asset->add("data/sound/menu_select.wav", t_sound); asset->add(prefix + "/data/sound/menu_select.wav", t_sound);
asset->add("data/sound/player_collision.wav", t_sound); asset->add(prefix + "/data/sound/player_collision.wav", t_sound);
asset->add("data/sound/stage_change.wav", t_sound); asset->add(prefix + "/data/sound/stage_change.wav", t_sound);
asset->add("data/sound/title.wav", t_sound); asset->add(prefix + "/data/sound/title.wav", t_sound);
asset->add("data/sound/clock.wav", t_sound); asset->add(prefix + "/data/sound/clock.wav", t_sound);
asset->add("data/sound/powerball.wav", t_sound); asset->add(prefix + "/data/sound/powerball.wav", t_sound);
// Texturas // Texturas
asset->add("data/gfx/balloon1.png", t_bitmap); asset->add(prefix + "/data/gfx/balloon1.png", t_bitmap);
asset->add("data/gfx/balloon1.ani", t_data); asset->add(prefix + "/data/gfx/balloon1.ani", t_data);
asset->add("data/gfx/balloon2.png", t_bitmap); asset->add(prefix + "/data/gfx/balloon2.png", t_bitmap);
asset->add("data/gfx/balloon2.ani", t_data); asset->add(prefix + "/data/gfx/balloon2.ani", t_data);
asset->add("data/gfx/balloon3.png", t_bitmap); asset->add(prefix + "/data/gfx/balloon3.png", t_bitmap);
asset->add("data/gfx/balloon3.ani", t_data); asset->add(prefix + "/data/gfx/balloon3.ani", t_data);
asset->add("data/gfx/balloon4.png", t_bitmap); asset->add(prefix + "/data/gfx/balloon4.png", t_bitmap);
asset->add("data/gfx/balloon4.ani", t_data); asset->add(prefix + "/data/gfx/balloon4.ani", t_data);
asset->add("data/gfx/bullet.png", t_bitmap); asset->add(prefix + "/data/gfx/bullet.png", t_bitmap);
asset->add("data/gfx/game_buildings.png", t_bitmap); asset->add(prefix + "/data/gfx/game_buildings.png", t_bitmap);
asset->add("data/gfx/game_clouds.png", t_bitmap); asset->add(prefix + "/data/gfx/game_clouds.png", t_bitmap);
asset->add("data/gfx/game_grass.png", t_bitmap); asset->add(prefix + "/data/gfx/game_grass.png", t_bitmap);
asset->add("data/gfx/game_power_meter.png", t_bitmap); asset->add(prefix + "/data/gfx/game_power_meter.png", t_bitmap);
asset->add("data/gfx/game_sky_colors.png", t_bitmap); asset->add(prefix + "/data/gfx/game_sky_colors.png", t_bitmap);
asset->add("data/gfx/game_text.png", t_bitmap); asset->add(prefix + "/data/gfx/game_text.png", t_bitmap);
asset->add("data/gfx/intro.png", t_bitmap); asset->add(prefix + "/data/gfx/intro.png", t_bitmap);
asset->add("data/gfx/logo.png", t_bitmap); asset->add(prefix + "/data/gfx/logo.png", t_bitmap);
asset->add("data/gfx/menu_game_over.png", t_bitmap); asset->add(prefix + "/data/gfx/menu_game_over.png", t_bitmap);
asset->add("data/gfx/menu_game_over_end.png", t_bitmap); asset->add(prefix + "/data/gfx/menu_game_over_end.png", t_bitmap);
asset->add("data/gfx/item_points1_disk.png", t_bitmap); asset->add(prefix + "/data/gfx/item_points1_disk.png", t_bitmap);
asset->add("data/gfx/item_points1_disk.ani", t_data); asset->add(prefix + "/data/gfx/item_points1_disk.ani", t_data);
asset->add("data/gfx/item_points2_gavina.png", t_bitmap); asset->add(prefix + "/data/gfx/item_points2_gavina.png", t_bitmap);
asset->add("data/gfx/item_points2_gavina.ani", t_data); asset->add(prefix + "/data/gfx/item_points2_gavina.ani", t_data);
asset->add("data/gfx/item_points3_pacmar.png", t_bitmap); asset->add(prefix + "/data/gfx/item_points3_pacmar.png", t_bitmap);
asset->add("data/gfx/item_points3_pacmar.ani", t_data); asset->add(prefix + "/data/gfx/item_points3_pacmar.ani", t_data);
asset->add("data/gfx/item_clock.png", t_bitmap); asset->add(prefix + "/data/gfx/item_clock.png", t_bitmap);
asset->add("data/gfx/item_clock.ani", t_data); asset->add(prefix + "/data/gfx/item_clock.ani", t_data);
asset->add("data/gfx/item_coffee.png", t_bitmap); asset->add(prefix + "/data/gfx/item_coffee.png", t_bitmap);
asset->add("data/gfx/item_coffee.ani", t_data); asset->add(prefix + "/data/gfx/item_coffee.ani", t_data);
asset->add("data/gfx/item_coffee_machine.png", t_bitmap); asset->add(prefix + "/data/gfx/item_coffee_machine.png", t_bitmap);
asset->add("data/gfx/item_coffee_machine.ani", t_data); asset->add(prefix + "/data/gfx/item_coffee_machine.ani", t_data);
asset->add("data/gfx/title_bg_tile.png", t_bitmap); asset->add(prefix + "/data/gfx/title_bg_tile.png", t_bitmap);
asset->add("data/gfx/title_coffee.png", t_bitmap); asset->add(prefix + "/data/gfx/title_coffee.png", t_bitmap);
asset->add("data/gfx/title_crisis.png", t_bitmap); asset->add(prefix + "/data/gfx/title_crisis.png", t_bitmap);
asset->add("data/gfx/title_dust.png", t_bitmap); asset->add(prefix + "/data/gfx/title_dust.png", t_bitmap);
asset->add("data/gfx/title_dust.ani", t_data); asset->add(prefix + "/data/gfx/title_dust.ani", t_data);
asset->add("data/gfx/title_gradient.png", t_bitmap); asset->add(prefix + "/data/gfx/title_gradient.png", t_bitmap);
asset->add("data/gfx/player_head.ani", t_data); asset->add(prefix + "/data/gfx/player_head.ani", t_data);
asset->add("data/gfx/player_body.ani", t_data); asset->add(prefix + "/data/gfx/player_body.ani", t_data);
asset->add("data/gfx/player_legs.ani", t_data); asset->add(prefix + "/data/gfx/player_legs.ani", t_data);
asset->add("data/gfx/player_death.ani", t_data); asset->add(prefix + "/data/gfx/player_death.ani", t_data);
asset->add("data/gfx/player_fire.ani", t_data); asset->add(prefix + "/data/gfx/player_fire.ani", t_data);
asset->add("data/gfx/player_bal1_head.png", t_bitmap); asset->add(prefix + "/data/gfx/player_bal1_head.png", t_bitmap);
asset->add("data/gfx/player_bal1_body.png", t_bitmap); asset->add(prefix + "/data/gfx/player_bal1_body.png", t_bitmap);
asset->add("data/gfx/player_bal1_legs.png", t_bitmap); asset->add(prefix + "/data/gfx/player_bal1_legs.png", t_bitmap);
asset->add("data/gfx/player_bal1_death.png", t_bitmap); asset->add(prefix + "/data/gfx/player_bal1_death.png", t_bitmap);
asset->add("data/gfx/player_bal1_fire.png", t_bitmap); asset->add(prefix + "/data/gfx/player_bal1_fire.png", t_bitmap);
asset->add("data/gfx/player_arounder_head.png", t_bitmap); asset->add(prefix + "/data/gfx/player_arounder_head.png", t_bitmap);
asset->add("data/gfx/player_arounder_body.png", t_bitmap); asset->add(prefix + "/data/gfx/player_arounder_body.png", t_bitmap);
asset->add("data/gfx/player_arounder_legs.png", t_bitmap); asset->add(prefix + "/data/gfx/player_arounder_legs.png", t_bitmap);
asset->add("data/gfx/player_arounder_death.png", t_bitmap); asset->add(prefix + "/data/gfx/player_arounder_death.png", t_bitmap);
asset->add("data/gfx/player_arounder_fire.png", t_bitmap); asset->add(prefix + "/data/gfx/player_arounder_fire.png", t_bitmap);
// Fuentes // Fuentes
asset->add("data/font/8bithud.png", t_font); asset->add(prefix + "/data/font/8bithud.png", t_font);
asset->add("data/font/8bithud.txt", t_font); asset->add(prefix + "/data/font/8bithud.txt", t_font);
asset->add("data/font/nokia.png", t_font); asset->add(prefix + "/data/font/nokia.png", t_font);
asset->add("data/font/nokia_big2.png", t_font); asset->add(prefix + "/data/font/nokia_big2.png", t_font);
asset->add("data/font/nokia.txt", t_font); asset->add(prefix + "/data/font/nokia.txt", t_font);
asset->add("data/font/nokia2.png", t_font); asset->add(prefix + "/data/font/nokia2.png", t_font);
asset->add("data/font/nokia2.txt", t_font); asset->add(prefix + "/data/font/nokia2.txt", t_font);
asset->add("data/font/nokia_big2.txt", t_font); asset->add(prefix + "/data/font/nokia_big2.txt", t_font);
asset->add("data/font/smb2_big.png", t_font); asset->add(prefix + "/data/font/smb2_big.png", t_font);
asset->add("data/font/smb2_big.txt", t_font); asset->add(prefix + "/data/font/smb2_big.txt", t_font);
asset->add("data/font/smb2.png", t_font); asset->add(prefix + "/data/font/smb2.png", t_font);
asset->add("data/font/smb2.txt", t_font); asset->add(prefix + "/data/font/smb2.txt", t_font);
// Textos // Textos
asset->add("data/lang/es_ES.txt", t_lang); asset->add(prefix + "/data/lang/es_ES.txt", t_lang);
asset->add("data/lang/en_UK.txt", t_lang); asset->add(prefix + "/data/lang/en_UK.txt", t_lang);
asset->add("data/lang/ba_BA.txt", t_lang); asset->add(prefix + "/data/lang/ba_BA.txt", t_lang);
// Menus // Menus
asset->add("data/menu/title.men", t_data); asset->add(prefix + "/data/menu/title.men", t_data);
asset->add("data/menu/options.men", t_data); asset->add(prefix + "/data/menu/options.men", t_data);
asset->add("data/menu/pause.men", t_data); asset->add(prefix + "/data/menu/pause.men", t_data);
asset->add("data/menu/gameover.men", t_data); asset->add(prefix + "/data/menu/gameover.men", t_data);
asset->add("data/menu/player_select.men", t_data); asset->add(prefix + "/data/menu/player_select.men", t_data);
return asset->check(); return asset->check();
} }

View File

@@ -21,7 +21,7 @@
#define TITLE_H #define TITLE_H
// Textos // Textos
#define TEXT_COPYRIGHT "@2020,2022 JailDesigner (v2.1a)" #define TEXT_COPYRIGHT "@2020,2022 JailDesigner (v2.1b)"
// Contadores // Contadores
#define TITLE_COUNTER 800 #define TITLE_COUNTER 800