fonts
meson.build
1project(
2 'Magnolia',
3 'c',
4 meson_version: '>=1.1',
5 default_options: [
6 'c_std=c89',
7 'warning_level=3',
8 ],
9)
10
11cc = meson.get_compiler('c')
12math_dep = cc.find_library('m', required: false)
13zlib_dep = dependency('zlib')
14crypto_enabled = get_option('crypto')
15
16if crypto_enabled
17 libtls_sp = subproject('libtls-bearssl', default_options: ['default_library=static'])
18 tls_dep = libtls_sp.get_variable('libtls_dep')
19 bearssl_dep = cc.find_library('bearssl')
20else
21 tls_dep = declare_dependency()
22 bearssl_dep = declare_dependency()
23endif
24
25requested_renderer = get_option('renderer')
26requested_window = get_option('windowing')
27
28# resolve windowing and renderer combo automatically
29sdl_dep = dependency('sdl2', required: false)
30opengl_dep = dependency('opengl', required: false)
31if not opengl_dep.found()
32 opengl_dep = dependency('gl', required: false)
33endif
34
35renderer_backend = requested_renderer
36window_backend = requested_window
37
38if renderer_backend == 'auto'
39 if window_backend == 'maus'
40 renderer_backend = 'small3dlib'
41 elif sdl_dep.found() and opengl_dep.found()
42 renderer_backend = 'sokol'
43 else
44 renderer_backend = 'small3dlib'
45 endif
46endif
47
48if window_backend == 'auto'
49 if renderer_backend == 'sokol'
50 window_backend = 'sdl'
51 elif sdl_dep.found()
52 window_backend = 'sdl'
53 else
54 window_backend = 'maus'
55 endif
56endif
57
58if renderer_backend == 'sokol' and window_backend != 'sdl'
59 error('sokol renderer requires -Dwindowing=sdl')
60endif
61if window_backend == 'sdl' and not sdl_dep.found()
62 error('SDL windowing requires the sdl2 dependency')
63endif
64if renderer_backend == 'sokol' and not opengl_dep.found()
65 error(
66 'sokol renderer requires an OpenGL development dependency (opengl or gl)',
67 )
68endif
69
70message('Selected renderer: ' + renderer_backend)
71message('Selected windowing: ' + window_backend)
72
73sources = [
74 'source/main.c',
75 'source/config.c',
76 'source/utils.c',
77 'source/world/block.c',
78 'source/world/chunk.c',
79 'source/client/camera.c',
80 'source/client/font.c',
81 'source/client/player.c',
82 'source/client/world.c',
83 'source/net/mc_chunk.c',
84 'source/net/mc_buffer.c',
85 'source/net/mc_client.c',
86 'source/net/packet.c',
87 'vendor/stb_image_c89.c',
88 'vendor/json.c',
89]
90
91if crypto_enabled
92 sources += [
93 'source/mgrandom.c',
94 'source/net/mc_auth.c',
95 'source/net/mc_crypto.c',
96 ]
97endif
98
99include_dirs = [
100 include_directories('include', '/usr/local/include'),
101]
102
103vendor_inc = [
104 include_directories('vendor'),
105]
106
107mgmath_lib = static_library(
108 'mgmath',
109 'source/mgmath_handmade.c',
110 include_directories: include_dirs + vendor_inc,
111 dependencies: math_dep,
112 c_args: ['-Wno-pedantic'],
113 override_options: ['c_std=c99'],
114)
115
116mgmath_dep = declare_dependency(
117 include_directories: include_dirs,
118 link_with: mgmath_lib,
119 dependencies: math_dep,
120)
121
122renderer_c_args = []
123platform_c_args = []
124renderer_sources = []
125
126if window_backend == 'sdl'
127 sources += ['source/platform/platform_sdl.c']
128 platform_c_args += ['-DMG_PLATFORM_SDL']
129 platform_dep = declare_dependency(dependencies: sdl_dep)
130elif window_backend == 'maus'
131 if renderer_backend != 'small3dlib'
132 error('maus windowing requires -Drenderer=small3dlib')
133 endif
134 maus_sp = subproject('maus', default_options: ['default_library=static'])
135 maus_dep = maus_sp.get_variable('maus_dep')
136 sources += ['source/platform/platform_maus.c']
137 platform_c_args += ['-DMG_PLATFORM_MAUS']
138 platform_dep = maus_dep
139endif
140
141if renderer_backend == 'sokol'
142 sokol_gfx_lib = static_library(
143 'sokol_gfx',
144 'vendor/sokol_gfx.c',
145 include_directories: vendor_inc,
146 dependencies: opengl_dep,
147 override_options: ['c_std=c99'],
148 )
149
150 renderer_backend_dep = declare_dependency(
151 include_directories: vendor_inc,
152 link_with: sokol_gfx_lib,
153 dependencies: [opengl_dep, sdl_dep],
154 )
155 renderer_sources += ['source/renderer/renderer_sokol.c']
156 renderer_c_args += ['-DMG_RENDERER_SOKOL']
157else
158 if window_backend == 'maus'
159 software_window_dep = platform_dep
160 else
161 software_window_dep = sdl_dep
162 endif
163 renderer_backend_dep = declare_dependency(
164 include_directories: vendor_inc,
165 dependencies: software_window_dep,
166 )
167 renderer_sources += ['source/renderer/renderer_small3dlib.c']
168 renderer_c_args += ['-DMG_RENDERER_SMALL3DLIB']
169endif
170
171renderer_lib = static_library(
172 'renderer',
173 renderer_sources,
174 include_directories: include_dirs,
175 dependencies: renderer_backend_dep,
176 c_args: platform_c_args + renderer_c_args,
177 override_options: ['c_std=c99'],
178)
179
180renderer_dep = declare_dependency(
181 include_directories: include_dirs,
182 link_with: renderer_lib,
183 dependencies: renderer_backend_dep,
184 compile_args: platform_c_args,
185)
186
187deps = [platform_dep, zlib_dep, tls_dep, bearssl_dep, mgmath_dep, renderer_dep]
188
189crypto_c_args = []
190if crypto_enabled
191 crypto_c_args += ['-DMG_ENABLE_CRYPTO']
192 message('crypto: on')
193else
194 message('crypto: off')
195endif
196
197# illumos needs extra libraries before it links
198if host_machine.system() == 'sunos'
199 extra_libs = ['-lsocket', '-lnsl']
200else
201 extra_libs = []
202endif
203
204executable(
205 'magnolia',
206 sources,
207 include_directories: include_dirs + vendor_inc,
208 dependencies: deps,
209 c_args: platform_c_args + renderer_c_args + crypto_c_args,
210 link_args: extra_libs,
211 override_options: ['c_std=c99'],
212)