commit 4fe2d81
shrub
·
2026-08-04 23:53:43 +0000 UTC
parent 971a236
auto select renderer+windowing, ran muon fmt
2 files changed,
+147,
-118
+137,
-108
1@@ -1,161 +1,190 @@
2-
3 project(
4- 'Magnolia',
5- 'c',
6- default_options: [
7- 'c_std=c89',
8- 'warning_level=3',
9- ],
10+ 'Magnolia',
11+ 'c',
12+ default_options: [
13+ 'c_std=c89',
14+ 'warning_level=3',
15+ ],
16 )
17
18 cc = meson.get_compiler('c')
19 math_dep = cc.find_library('m', required: false)
20 zlib_dep = dependency('zlib')
21-libtls_sp = subproject('libtls-bearssl', default_options: [ 'default_library=static' ])
22+libtls_sp = subproject('libtls-bearssl', default_options: ['default_library=static'])
23 tls_dep = libtls_sp.get_variable('libtls_dep')
24 bearssl_dep = cc.find_library('bearssl')
25
26+requested_renderer = get_option('renderer')
27+requested_window = get_option('windowing')
28+
29+# resolve windowing and renderer combo automatically
30+sdl_dep = dependency('sdl2', required: false)
31+opengl_dep = dependency('opengl', required: false)
32+if not opengl_dep.found()
33+ opengl_dep = dependency('gl', required: false)
34+endif
35
36-renderer_backend = get_option('renderer')
37-window_backend = get_option('windowing')
38-sdl_dep = dependency('sdl2', required: window_backend == 'sdl' or renderer_backend == 'sokol')
39+renderer_backend = requested_renderer
40+window_backend = requested_window
41+
42+if renderer_backend == 'auto'
43+ if window_backend == 'maus'
44+ renderer_backend = 'small3dlib'
45+ elif sdl_dep.found() and opengl_dep.found()
46+ renderer_backend = 'sokol'
47+ else
48+ renderer_backend = 'small3dlib'
49+ endif
50+endif
51+
52+if window_backend == 'auto'
53+ if renderer_backend == 'sokol'
54+ window_backend = 'sdl'
55+ elif sdl_dep.found()
56+ window_backend = 'sdl'
57+ else
58+ window_backend = 'maus'
59+ endif
60+endif
61+
62+if renderer_backend == 'sokol' and window_backend != 'sdl'
63+ error('sokol renderer requires -Dwindowing=sdl')
64+endif
65+if window_backend == 'sdl' and not sdl_dep.found()
66+ error('SDL windowing requires the sdl2 dependency')
67+endif
68+if renderer_backend == 'sokol' and not opengl_dep.found()
69+ error(
70+ 'sokol renderer requires an OpenGL development dependency (opengl or gl)',
71+ )
72+endif
73+
74+message('Selected renderer: ' + renderer_backend)
75+message('Selected windowing: ' + window_backend)
76
77 sources = [
78- 'source/main.c',
79- 'source/mg_random.c',
80- 'source/config.c',
81- 'source/util.c',
82- 'source/world/block.c',
83- 'source/world/chunk.c',
84- 'source/client/camera.c',
85- 'source/client/player.c',
86- 'source/mcproto/auth.c',
87- 'source/mcproto/buffer.c',
88- 'source/mcproto/client.c',
89- 'source/mcproto/crypto.c',
90- 'source/mcproto/packet.c',
91- 'vendor/stb_image_c89.c',
92- 'vendor/json.c',
93+ 'source/main.c',
94+ 'source/mg_random.c',
95+ 'source/config.c',
96+ 'source/util.c',
97+ 'source/world/block.c',
98+ 'source/world/chunk.c',
99+ 'source/client/camera.c',
100+ 'source/client/player.c',
101+ 'source/mcproto/auth.c',
102+ 'source/mcproto/buffer.c',
103+ 'source/mcproto/client.c',
104+ 'source/mcproto/crypto.c',
105+ 'source/mcproto/packet.c',
106+ 'vendor/stb_image_c89.c',
107+ 'vendor/json.c',
108 ]
109
110 include_dirs = [
111- include_directories('include', '/usr/local/include'),
112+ include_directories('include', '/usr/local/include'),
113 ]
114
115 vendor_inc = [
116- include_directories('vendor'),
117+ include_directories('vendor'),
118 ]
119
120 mgmath_lib = static_library(
121- 'mgmath',
122- 'source/mgmath_handmade.c',
123- include_directories: include_dirs + vendor_inc,
124- dependencies: math_dep,
125- c_args: [ '-Wno-pedantic' ],
126- override_options: [ 'c_std=c99' ],
127+ 'mgmath',
128+ 'source/mgmath_handmade.c',
129+ include_directories: include_dirs + vendor_inc,
130+ dependencies: math_dep,
131+ c_args: ['-Wno-pedantic'],
132+ override_options: ['c_std=c99'],
133 )
134
135 mgmath_dep = declare_dependency(
136- include_directories: include_dirs,
137- link_with: mgmath_lib,
138- dependencies: math_dep,
139+ include_directories: include_dirs,
140+ link_with: mgmath_lib,
141+ dependencies: math_dep,
142 )
143
144 renderer_c_args = []
145 platform_c_args = []
146 renderer_sources = [
147- 'source/renderer/renderer.c',
148+ 'source/renderer/renderer.c',
149 ]
150
151 if window_backend == 'sdl'
152- sources += [ 'source/platform/platform_sdl.c' ]
153- platform_c_args += [ '-DMG_PLATFORM_SDL' ]
154- platform_dep = declare_dependency(dependencies: sdl_dep)
155+ sources += ['source/platform/platform_sdl.c']
156+ platform_c_args += ['-DMG_PLATFORM_SDL']
157+ platform_dep = declare_dependency(dependencies: sdl_dep)
158 elif window_backend == 'maus'
159- if renderer_backend != 'small3dlib'
160- error('maus windowing requires -Drenderer=small3dlib')
161- endif
162- maus_sp = subproject('maus', default_options: [ 'default_library=static' ])
163- maus_dep = maus_sp.get_variable('maus_dep')
164- sources += [ 'source/platform/platform_maus.c' ]
165- platform_c_args += [ '-DMG_PLATFORM_MAUS' ]
166- platform_dep = maus_dep
167+ if renderer_backend != 'small3dlib'
168+ error('maus windowing requires -Drenderer=small3dlib')
169+ endif
170+ maus_sp = subproject('maus', default_options: ['default_library=static'])
171+ maus_dep = maus_sp.get_variable('maus_dep')
172+ sources += ['source/platform/platform_maus.c']
173+ platform_c_args += ['-DMG_PLATFORM_MAUS']
174+ platform_dep = maus_dep
175 endif
176
177 if renderer_backend == 'sokol'
178- opengl_dep = dependency('opengl', required: false)
179- if not opengl_dep.found() # fallback (at least for alpine)
180- opengl_dep = dependency('gl')
181- endif
182-
183- sokol_gfx_lib = static_library(
184- 'sokol_gfx',
185- 'vendor/sokol_gfx.c',
186- include_directories: vendor_inc,
187- dependencies: opengl_dep,
188- override_options: [ 'c_std=c99' ],
189- )
190-
191- renderer_backend_dep = declare_dependency(
192- include_directories: vendor_inc,
193- link_with: sokol_gfx_lib,
194- dependencies: [ opengl_dep, sdl_dep ],
195- )
196- renderer_sources += [ 'source/renderer/renderer_sokol.c' ]
197- renderer_c_args += [ '-DMG_RENDERER_SOKOL' ]
198+ sokol_gfx_lib = static_library(
199+ 'sokol_gfx',
200+ 'vendor/sokol_gfx.c',
201+ include_directories: vendor_inc,
202+ dependencies: opengl_dep,
203+ override_options: ['c_std=c99'],
204+ )
205+
206+ renderer_backend_dep = declare_dependency(
207+ include_directories: vendor_inc,
208+ link_with: sokol_gfx_lib,
209+ dependencies: [opengl_dep, sdl_dep],
210+ )
211+ renderer_sources += ['source/renderer/renderer_sokol.c']
212+ renderer_c_args += ['-DMG_RENDERER_SOKOL']
213 else
214- if window_backend == 'maus'
215- software_window_dep = platform_dep
216- else
217- software_window_dep = sdl_dep
218- endif
219- renderer_backend_dep = declare_dependency(
220- include_directories: vendor_inc,
221- dependencies: software_window_dep,
222- )
223- renderer_sources += [ 'source/renderer/renderer_small3dlib.c' ]
224- renderer_c_args += [ '-DMG_RENDERER_SMALL3DLIB' ]
225+ if window_backend == 'maus'
226+ software_window_dep = platform_dep
227+ else
228+ software_window_dep = sdl_dep
229+ endif
230+ renderer_backend_dep = declare_dependency(
231+ include_directories: vendor_inc,
232+ dependencies: software_window_dep,
233+ )
234+ renderer_sources += ['source/renderer/renderer_small3dlib.c']
235+ renderer_c_args += ['-DMG_RENDERER_SMALL3DLIB']
236 endif
237
238 renderer_lib = static_library(
239- 'renderer',
240- renderer_sources,
241- include_directories: include_dirs,
242- dependencies: renderer_backend_dep,
243- c_args: platform_c_args + renderer_c_args,
244- override_options: [ 'c_std=c99' ],
245+ 'renderer',
246+ renderer_sources,
247+ include_directories: include_dirs,
248+ dependencies: renderer_backend_dep,
249+ c_args: platform_c_args + renderer_c_args,
250+ override_options: ['c_std=c99'],
251 )
252
253 renderer_dep = declare_dependency(
254- include_directories: include_dirs,
255- link_with: renderer_lib,
256- dependencies: renderer_backend_dep,
257- compile_args: platform_c_args,
258+ include_directories: include_dirs,
259+ link_with: renderer_lib,
260+ dependencies: renderer_backend_dep,
261+ compile_args: platform_c_args,
262 )
263
264-deps = [
265- platform_dep,
266- zlib_dep,
267- tls_dep,
268- bearssl_dep,
269- mgmath_dep,
270- renderer_dep
271-]
272-
273+deps = [platform_dep, zlib_dep, tls_dep, bearssl_dep, mgmath_dep, renderer_dep]
274
275 # illumos needs extra libraries before it links
276 if host_machine.system() == 'sunos'
277- extra_libs = ['-lsocket', '-lnsl']
278+ extra_libs = ['-lsocket', '-lnsl']
279 else
280- extra_libs = []
281+ extra_libs = []
282 endif
283
284 executable(
285- 'magnolia',
286- sources,
287- include_directories: include_dirs + vendor_inc,
288- dependencies: deps,
289- c_args: platform_c_args + renderer_c_args,
290- link_args: extra_libs,
291- override_options: [ 'c_std=c99' ],
292+ 'magnolia',
293+ sources,
294+ include_directories: include_dirs + vendor_inc,
295+ dependencies: deps,
296+ c_args: platform_c_args + renderer_c_args,
297+ link_args: extra_libs,
298+ override_options: ['c_std=c99'],
299 )
+10,
-10
1@@ -1,15 +1,15 @@
2 option(
3- 'renderer',
4- type: 'combo',
5- choices: [ 'sokol', 'small3dlib' ],
6- value: 'sokol',
7- description: '3D renderer backend',
8+ 'renderer',
9+ type: 'combo',
10+ choices: ['auto', 'sokol', 'small3dlib'],
11+ value: 'auto',
12+ description: '3D renderer backend',
13 )
14
15 option(
16- 'windowing',
17- type: 'combo',
18- choices: [ 'sdl', 'maus' ],
19- value: 'sdl',
20- description: 'Windowing backend',
21+ 'windowing',
22+ type: 'combo',
23+ choices: ['auto', 'sdl', 'maus'],
24+ value: 'auto',
25+ description: 'Windowing backend',
26 )