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