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)