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)