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 )