protocol
meson.build
1project(
2 'Magnolia',
3 'c',
4 default_options: [
5 'c_std=c89',
6 'warning_level=3',
7 ],
8)
9
10cc = meson.get_compiler('c')
11math_dep = cc.find_library('m', required: false)
12sdl_dep = dependency('sdl2')
13zlib_dep = dependency('zlib')
14libtls_sp = subproject('libtls-bearssl', default_options: [ 'default_library=static' ])
15tls_dep = libtls_sp.get_variable('libtls_dep')
16bearssl_dep = cc.find_library('bearssl')
17renderer_backend = get_option('renderer')
18
19sources = [
20 'source/main.c',
21 'source/mg_random.c',
22 'source/config.c',
23 'source/util.c',
24 'source/world/chunk.c',
25 'source/client/camera.c',
26 'source/mcproto/auth.c',
27 'source/mcproto/buffer.c',
28 'source/mcproto/client.c',
29 'source/mcproto/crypto.c',
30 'source/platform/platform.c',
31 'vendor/stb_image_c89.c',
32]
33
34include_dirs = [
35 include_directories('include'),
36]
37
38vendor_inc = [
39 include_directories('vendor'),
40]
41
42mgmath_lib = static_library(
43 'mgmath',
44 'source/mgmath_handmade.c',
45 include_directories: include_dirs + vendor_inc,
46 dependencies: math_dep,
47 c_args: [ '-Wno-pedantic' ],
48 override_options: [ 'c_std=c99' ],
49)
50
51mgmath_dep = declare_dependency(
52 include_directories: include_dirs,
53 link_with: mgmath_lib,
54 dependencies: math_dep,
55)
56
57renderer_c_args = []
58renderer_sources = [
59 'source/renderer/renderer.c',
60]
61if renderer_backend == 'sokol'
62 opengl_dep = dependency('opengl', required: false)
63 if not opengl_dep.found() # fallback (at least for alpine)
64 opengl_dep = dependency('gl')
65 endif
66
67 sokol_gfx_lib = static_library(
68 'sokol_gfx',
69 'vendor/sokol_gfx.c',
70 include_directories: vendor_inc,
71 dependencies: opengl_dep,
72 override_options: [ 'c_std=c99' ],
73 )
74
75 renderer_backend_dep = declare_dependency(
76 include_directories: vendor_inc,
77 link_with: sokol_gfx_lib,
78 dependencies: [ opengl_dep, sdl_dep ],
79 )
80 renderer_sources += [ 'source/renderer/renderer_sokol.c' ]
81 renderer_c_args += [ '-DMG_RENDERER_SOKOL' ]
82else
83 renderer_backend_dep = declare_dependency(
84 include_directories: vendor_inc,
85 dependencies: sdl_dep,
86 )
87 renderer_sources += [ 'source/renderer/renderer_small3dlib.c' ]
88 renderer_c_args += [ '-DMG_RENDERER_SMALL3DLIB' ]
89endif
90
91renderer_lib = static_library(
92 'renderer',
93 renderer_sources,
94 include_directories: include_dirs,
95 dependencies: renderer_backend_dep,
96 c_args: renderer_c_args,
97 override_options: [ 'c_std=c99' ],
98)
99
100renderer_dep = declare_dependency(
101 include_directories: include_dirs,
102 link_with: renderer_lib,
103 dependencies: renderer_backend_dep,
104)
105
106deps = [
107 sdl_dep,
108 zlib_dep,
109 tls_dep,
110 bearssl_dep,
111 mgmath_dep,
112 renderer_dep,
113]
114
115executable(
116 'magnolia',
117 sources,
118 include_directories: include_dirs,
119 dependencies: deps,
120 c_args: renderer_c_args,
121 override_options: [ 'c_std=c99' ],
122)