forked from lovebrew/lovepotion
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathDockerfile.wiiu
More file actions
128 lines (116 loc) · 5.83 KB
/
Copy pathDockerfile.wiiu
File metadata and controls
128 lines (116 loc) · 5.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# Dockerfile
FROM devkitpro/devkitppc:latest
# Build type argument (Debug or Release)
ARG BUILD_TYPE=Debug
#install dependencies
RUN echo "=== Installing dependencies ===" && \
apt-get update && apt-get upgrade -y && \
apt-get install -y git build-essential python3 python3-pip cmake git dos2unix wget python3-setuptools python3-mako bison flex meson && \
dkp-pacman -S --needed --noconfirm \
wut-tools \
wut \
ppc-zlib \
ppc-libpng \
ppc-libjpeg-turbo \
ppc-freetype \
ppc-brotli \
ppc-libogg \
ppc-libvorbis \
ppc-libvorbisidec \
ppc-bzip2
#BOOTSOUND NOT WORKING
# Install OpenJDK for wav2btsnd.jar
#RUN apt-get update && apt-get install -y openjdk-11-jre-headless
# Download wav2btsnd.jar
#RUN mkdir -p /opt/wav2btsnd && \
# wget -O /opt/wav2btsnd/wav2btsnd.jar https://bitbucket.org/timogus/wav2btsnd/raw/master/wav2btsnd.jar
# Convert bootSound.wav to bootSound.btsnd if present
#RUN if [ -f /project/platform/cafe/bootSound.wav ]; then \
# echo "=== Converting bootSound.wav to bootSound.btsnd using wav2btsnd.jar ===" && \
# java -jar /opt/wav2btsnd/wav2btsnd.jar /project/platform/cafe/bootSound.wav /project/platform/cafe/bootSound.btsnd; \
# else echo "No bootSound.wav found, skipping btsnd conversion."; fi
# Download precompiled CafeGLSL since building requires special WUT fork
RUN echo "=== Downloading precompiled CafeGLSL ===" && \
mkdir -p /opt/CafeGLSL && \
cd /opt/CafeGLSL && \
wget -O glslcompiler.rpl https://github.com/Exzap/CafeGLSL/releases/download/v0.2.0/glslcompiler.rpl && \
echo "=== CafeGLSL downloaded ===" && \
ls -la glslcompiler.rpl
WORKDIR /project
# Copy project
COPY . .
# Convert line endings and skip luasocket patches (luasocket is disabled for Wii U)
RUN find /project -name '*.cpp' -o -name '*.hpp' -o -name '*.c' -o -name '*.h' | xargs dos2unix || true
# Note: Shaders (.fs files) are in Love2D format and compiled at runtime by ShaderCompiler.cpp
# Pre-compiling them with CafeGLSL doesn't work because they use Love2D syntax (extern, effect(), etc.)
RUN echo "Found GLSL shaders:" && \
find game/resources/shaders -name "*.fs" 2>/dev/null | while read shader; do \
echo " - $(basename "$shader")"; \
done || echo "No game/resources/shaders directory found"
# Build
RUN echo "=== Cleaning old build directory ===" && \
rm -rf build && \
mkdir -p build && cd build && \
echo "=== Creating game.love from game folder (without glslcompiler.rpl) ===" && \
cd /project/game && \
zip -r /project/build/game.love . && \
echo "=== game.love created successfully ===" && \
ls -la /project/build/game.love && \
cd /project/build && \
echo "=== Adding CafeGLSL runtime library ONLY to content folder ===" && \
mkdir -p /project/platform/cafe/content && \
cp /opt/CafeGLSL/glslcompiler.rpl /project/platform/cafe/content/glslcompiler.rpl && \
echo "=== CafeGLSL runtime library added to content (will be in .wuhb) ===" && \
ls -la /project/platform/cafe/content/ && \
ls -lh /project/platform/cafe/ && \
echo "=== Starting fresh CMake configuration ===" && \
echo "=== Shaders will be compiled at runtime by ShaderCompiler.cpp ===" && \
echo "=== Listing actual source files to debug case sensitivity issues ===" && \
find /project/source -name "*.cpp" | sort > /tmp/actual_files.txt && \
echo "=== First 30 actual files found ===" && \
head -30 /tmp/actual_files.txt && \
cmake .. -DNINTENDO_WIIU=ON -DUSE_CAFEGLSL=ON -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_TOOLCHAIN_FILE=$DEVKITPRO/cmake/WiiU.cmake -G "Unix Makefiles" || { echo "=== CMake failed ==="; cat /tmp/actual_files.txt; exit 1; } && \
echo "=== CMake configuration completed ===" && \
echo "=== Starting make build ===" && \
make -j4 || { echo "=== Make failed, showing build directory contents ==="; ls -la; exit 1; } && \
echo "=== Make build completed ===" && \
echo "=== BUILD OUTPUT DEBUG ===" && \
ls -la && \
echo "=== FUSING GAME DATA INTO WUHB ===" && \
if [ -f lovepotion.wuhb ] && [ -f /project/build/game.love ]; then \
cat lovepotion.wuhb /project/build/game.love > balatro.wuhb && \
echo "=== GAME FUSED SUCCESSFULLY ===" && \
ls -la balatro.wuhb; \
else \
echo "=== FUSING FAILED - Missing files ==="; \
echo "lovepotion.wuhb exists: $(test -f lovepotion.wuhb && echo yes || echo no)"; \
echo "game.love exists: $(test -f /project/build/game.love && echo yes || echo no)"; \
exit 1; \
fi && \
echo "=== FIND ALL RPX/WUHB/ELF FILES IN PROJECT ===" && \
find /project -name "*.rpx" -o -name "*.wuhb" -o -name "*.elf" | head -20 && \
echo "=== FIND ALL EXECUTABLE FILES ===" && \
find /project -name "*lovepotion*" -type f | head -20 && \
echo "=== COPYING FILES TO OUTPUT ===" && \
mkdir -p /output && \
echo "Current working directory: $(pwd)" && \
echo "Files in current directory:" && \
ls -la && \
if [ -f balatro.wuhb ]; then \
echo "Found balatro.wuhb, copying to /output/" && \
cp -v balatro.wuhb /output/; \
else \
echo "balatro.wuhb not found in build directory"; \
exit 1; \
fi && \
echo "=== COPYING ALL BUILD ARTIFACTS ===" && \
cp -v lovepotion.elf /output/ 2>/dev/null || echo "lovepotion.elf not found" && \
cp -v lovepotion.rpx /output/ 2>/dev/null || echo "lovepotion.rpx not found" && \
cp -v lovepotion.wuhb /output/ 2>/dev/null || echo "lovepotion.wuhb not found" && \
cp -v game.love /output/ 2>/dev/null || echo "game.love not found" && \
cp -v /opt/CafeGLSL/glslcompiler.rpl /output/ 2>/dev/null || echo "glslcompiler.rpl not found" && \
echo "=== CafeGLSL copied both as packaged content and as sidecar fallback ===" && \
echo "=== OUTPUT DIRECTORY CONTENTS ===" && \
ls -la /output/
# Export output directory
VOLUME ["/output"]