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)