commit 3fd894c
Merge remote-tracking branch 'origin/master' into formatting-and-others # Conflicts: # meson.build
2 files changed,
+148,
-119
+138,
-109
1@@ -1,66 +1,108 @@
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/mgrandom.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/client/world.c',
87- 'source/net/mc_auth.c',
88- 'source/net/mc_chunk.c',
89- 'source/net/mc_buffer.c',
90- 'source/net/mc_client.c',
91- 'source/net/mc_crypto.c',
92- 'source/net/packet.c',
93- 'vendor/stb_image_c89.c',
94- 'vendor/json.c',
95+ 'source/main.c',
96+ 'source/mgrandom.c',
97+ 'source/config.c',
98+ 'source/util.c',
99+ 'source/world/block.c',
100+ 'source/world/chunk.c',
101+ 'source/client/camera.c',
102+ 'source/client/player.c',
103+ 'source/client/world.c',
104+ 'source/net/mc_auth.c',
105+ 'source/net/mc_chunk.c',
106+ 'source/net/mc_buffer.c',
107+ 'source/net/mc_client.c',
108+ 'source/net/mc_crypto.c',
109+ 'source/net/packet.c',
110+ 'vendor/stb_image_c89.c',
111+ 'vendor/json.c',
112 ]
113
114 include_dirs = [
115- include_directories('include', '/usr/local/include'),
116+ include_directories('include', '/usr/local/include'),
117 ]
118
119 vendor_inc = [
120- include_directories('vendor'),
121+ include_directories('vendor'),
122 ]
123
124 mgmath_lib = static_library(
125- 'mgmath',
126- 'source/mgmath_handmade.c',
127- include_directories: include_dirs + vendor_inc,
128- dependencies: math_dep,
129- c_args: [ '-Wno-pedantic' ],
130- override_options: [ 'c_std=c99' ],
131+ 'mgmath',
132+ 'source/mgmath_handmade.c',
133+ include_directories: include_dirs + vendor_inc,
134+ dependencies: math_dep,
135+ c_args: ['-Wno-pedantic'],
136+ override_options: ['c_std=c99'],
137 )
138
139 mgmath_dep = declare_dependency(
140- include_directories: include_dirs,
141- link_with: mgmath_lib,
142- dependencies: math_dep,
143+ include_directories: include_dirs,
144+ link_with: mgmath_lib,
145+ dependencies: math_dep,
146 )
147
148 renderer_c_args = []
149@@ -68,94 +110,81 @@ platform_c_args = []
150 renderer_sources = []
151
152 if window_backend == 'sdl'
153- sources += [ 'source/platform/platform_sdl.c' ]
154- platform_c_args += [ '-DMG_PLATFORM_SDL' ]
155- platform_dep = declare_dependency(dependencies: sdl_dep)
156+ sources += ['source/platform/platform_sdl.c']
157+ platform_c_args += ['-DMG_PLATFORM_SDL']
158+ platform_dep = declare_dependency(dependencies: sdl_dep)
159 elif window_backend == 'maus'
160- if renderer_backend != 'small3dlib'
161- error('maus windowing requires -Drenderer=small3dlib')
162- endif
163- maus_sp = subproject('maus', default_options: [ 'default_library=static' ])
164- maus_dep = maus_sp.get_variable('maus_dep')
165- sources += [ 'source/platform/platform_maus.c' ]
166- platform_c_args += [ '-DMG_PLATFORM_MAUS' ]
167- platform_dep = maus_dep
168+ if renderer_backend != 'small3dlib'
169+ error('maus windowing requires -Drenderer=small3dlib')
170+ endif
171+ maus_sp = subproject('maus', default_options: ['default_library=static'])
172+ maus_dep = maus_sp.get_variable('maus_dep')
173+ sources += ['source/platform/platform_maus.c']
174+ platform_c_args += ['-DMG_PLATFORM_MAUS']
175+ platform_dep = maus_dep
176 endif
177
178 if renderer_backend == 'sokol'
179- opengl_dep = dependency('opengl', required: false)
180- if not opengl_dep.found() # fallback (at least for alpine)
181- opengl_dep = dependency('gl')
182- endif
183-
184- sokol_gfx_lib = static_library(
185- 'sokol_gfx',
186- 'vendor/sokol_gfx.c',
187- include_directories: vendor_inc,
188- dependencies: opengl_dep,
189- override_options: [ 'c_std=c99' ],
190- )
191-
192- renderer_backend_dep = declare_dependency(
193- include_directories: vendor_inc,
194- link_with: sokol_gfx_lib,
195- dependencies: [ opengl_dep, sdl_dep ],
196- )
197- renderer_sources += [ 'source/renderer/renderer_sokol.c' ]
198- renderer_c_args += [ '-DMG_RENDERER_SOKOL' ]
199+ sokol_gfx_lib = static_library(
200+ 'sokol_gfx',
201+ 'vendor/sokol_gfx.c',
202+ include_directories: vendor_inc,
203+ dependencies: opengl_dep,
204+ override_options: ['c_std=c99'],
205+ )
206+
207+ renderer_backend_dep = declare_dependency(
208+ include_directories: vendor_inc,
209+ link_with: sokol_gfx_lib,
210+ dependencies: [opengl_dep, sdl_dep],
211+ )
212+ renderer_sources += ['source/renderer/renderer_sokol.c']
213+ renderer_c_args += ['-DMG_RENDERER_SOKOL']
214 else
215- if window_backend == 'maus'
216- software_window_dep = platform_dep
217- else
218- software_window_dep = sdl_dep
219- endif
220- renderer_backend_dep = declare_dependency(
221- include_directories: vendor_inc,
222- dependencies: software_window_dep,
223- )
224- renderer_sources += [ 'source/renderer/renderer_small3dlib.c' ]
225- renderer_c_args += [ '-DMG_RENDERER_SMALL3DLIB' ]
226+ if window_backend == 'maus'
227+ software_window_dep = platform_dep
228+ else
229+ software_window_dep = sdl_dep
230+ endif
231+ renderer_backend_dep = declare_dependency(
232+ include_directories: vendor_inc,
233+ dependencies: software_window_dep,
234+ )
235+ renderer_sources += ['source/renderer/renderer_small3dlib.c']
236+ renderer_c_args += ['-DMG_RENDERER_SMALL3DLIB']
237 endif
238
239 renderer_lib = static_library(
240- 'renderer',
241- renderer_sources,
242- include_directories: include_dirs,
243- dependencies: renderer_backend_dep,
244- c_args: platform_c_args + renderer_c_args,
245- override_options: [ 'c_std=c99' ],
246+ 'renderer',
247+ renderer_sources,
248+ include_directories: include_dirs,
249+ dependencies: renderer_backend_dep,
250+ c_args: platform_c_args + renderer_c_args,
251+ override_options: ['c_std=c99'],
252 )
253
254 renderer_dep = declare_dependency(
255- include_directories: include_dirs,
256- link_with: renderer_lib,
257- dependencies: renderer_backend_dep,
258- compile_args: platform_c_args,
259+ include_directories: include_dirs,
260+ link_with: renderer_lib,
261+ dependencies: renderer_backend_dep,
262+ compile_args: platform_c_args,
263 )
264
265-deps = [
266- platform_dep,
267- zlib_dep,
268- tls_dep,
269- bearssl_dep,
270- mgmath_dep,
271- renderer_dep
272-]
273-
274+deps = [platform_dep, zlib_dep, tls_dep, bearssl_dep, mgmath_dep, renderer_dep]
275
276 # illumos needs extra libraries before it links
277 if host_machine.system() == 'sunos'
278- extra_libs = ['-lsocket', '-lnsl']
279+ extra_libs = ['-lsocket', '-lnsl']
280 else
281- extra_libs = []
282+ extra_libs = []
283 endif
284
285 executable(
286- 'magnolia',
287- sources,
288- include_directories: include_dirs + vendor_inc,
289- dependencies: deps,
290- c_args: platform_c_args + renderer_c_args,
291- link_args: extra_libs,
292- override_options: [ 'c_std=c99' ],
293+ 'magnolia',
294+ sources,
295+ include_directories: include_dirs + vendor_inc,
296+ dependencies: deps,
297+ c_args: platform_c_args + renderer_c_args,
298+ link_args: extra_libs,
299+ override_options: ['c_std=c99'],
300 )
+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 )