blob: 7b618e0b181565ae210b2f4f7b0031f7ecedd502 (
plain) (
blame)
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
|
# Containerfile for Forts Clone build environment
# Builds all C/C++ dependencies from source, installs to /usr/local.
# Usage:
# podman build -t forts-clone-dev .
# podman run -it --rm -v $(pwd):/src:Z --userns=keep-id forts-clone-dev
FROM docker.io/library/fedora:41
# =============================================================================
# All system packages in one layer
# =============================================================================
RUN dnf -y update && dnf -y install \
gcc-c++ clang lld meson ninja-build cmake git gdb valgrind \
SDL3-devel lua-devel glm-devel \
mesa-libGL-devel mesa-libEGL-devel \
libX11-devel libXcursor-devel libXi-devel libXinerama-devel libXrandr-devel \
wayland-devel libdrm-devel libxkbcommon-devel libxkbcommon-x11-devel \
vulkan-loader-devel \
pkg-config python3 which \
&& dnf clean all
# =============================================================================
# bgfx -- cross-platform GPU rendering
# =============================================================================
WORKDIR /tmp/bgfx_build
RUN git clone --recursive --depth 1 https://github.com/bkaradzic/bgfx.cmake.git . \
&& cmake -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DBGFX_BUILD_TOOLS=OFF \
-DBGFX_BUILD_EXAMPLES=OFF \
-DBGFX_BUILD_TESTS=OFF \
&& cmake --build build \
&& cmake --install build \
&& rm -rf /tmp/bgfx_build
# =============================================================================
# Box2D v3 -- deterministic 2D physics engine
# Built directly from source to avoid CMake FetchContent issues.
# =============================================================================
WORKDIR /tmp/box2d_build
RUN git clone --depth 1 --branch v3.1.1 https://github.com/erincatto/box2d.git . \
&& mkdir -p /usr/local/include/box2d \
&& cp -r include/box2d/*.h /usr/local/include/box2d/ \
&& cp -r include/box2d/*.h /usr/local/include/ \
&& gcc -c src/*.c -I include -I src -O2 -DBOX2D_ENABLE_ASSERT=0 \
&& ar rcs libbox2d.a *.o \
&& cp libbox2d.a /usr/local/lib/ \
&& rm -rf /tmp/box2d_build
# =============================================================================
# SoLoud -- game audio engine
# Built directly from source (contrib CMake is fragile).
# =============================================================================
RUN dnf -y install alsa-lib-devel pulseaudio-libs-devel && dnf clean all
WORKDIR /tmp/soloud_build
RUN git clone --depth 1 https://github.com/jarikomppa/soloud.git . \
&& mkdir -p /usr/local/include/soloud \
&& cp include/*.h /usr/local/include/soloud/ \
&& g++ -c src/core/*.cpp src/audiosource/*/*.cpp src/filter/*.cpp \
src/backend/alsa/*.cpp src/c_api/*.cpp \
-I include -O2 -fPIC -DWITH_ALSA \
&& ar rcs libsoloud.a *.o \
&& cp libsoloud.a /usr/local/lib/ \
&& rm -rf /tmp/soloud_build
# =============================================================================
# ENet -- UDP networking library
# =============================================================================
WORKDIR /tmp/enet_build
RUN git clone --depth 1 --branch v1.3.18 https://github.com/lsalzman/enet.git . \
&& cmake -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
&& cmake --build build \
&& cmake --install build \
&& rm -rf /tmp/enet_build
# =============================================================================
# =============================================================================
# sol2 -- Lua C++ bindings (header-only)
# =============================================================================
WORKDIR /tmp/sol2_build
RUN git clone --depth 1 --branch v3.5.0 https://github.com/ThePhD/sol2.git . \
&& cp -r include/sol /usr/local/include/ \
&& rm -rf /tmp/sol2_build
# =============================================================================
# EnTT -- ECS library (header-only)
# =============================================================================
WORKDIR /tmp/entt_build
RUN git clone --depth 1 --branch v3.14.0 https://github.com/skypjack/entt.git . \
&& cp -r src/entt /usr/local/include/ \
&& rm -rf /tmp/entt_build
# =============================================================================
# Lua 5.4 -- built as a STATIC archive (liblua.a) so the game binary carries
# Lua itself and needs no liblua .so at runtime. Fedora's shared soname
# (liblua-5.4.so) differs from other distros (liblua5.4.so), which breaks
# running the container-built binary on the host. Appended LAST so none of the
# cached dependency layers above have to rebuild.
# =============================================================================
WORKDIR /tmp/lua_build
RUN python3 -c "import urllib.request; urllib.request.urlretrieve('https://www.lua.org/ftp/lua-5.4.7.tar.gz','lua.tar.gz')" \
&& tar xf lua.tar.gz \
&& cd lua-5.4.7/src \
&& gcc -O2 -fPIC -DLUA_USE_LINUX -c $(ls *.c | grep -vE '^(lua|luac)\.c$') \
&& ar rcs liblua.a *.o \
&& install -m644 liblua.a /usr/local/lib/ \
&& install -m644 lua.h luaconf.h lualib.h lauxlib.h /usr/local/include/ \
&& printf 'extern "C" {\n#include "lua.h"\n#include "lualib.h"\n#include "lauxlib.h"\n}\n' \
> /usr/local/include/lua.hpp \
&& rm -rf /tmp/lua_build
# =============================================================================
# Ready
# =============================================================================
WORKDIR /src
CMD ["bash"]
|