small3dlib 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')
 13renderer_backend = get_option('renderer')
 14
 15sources = [
 16	'source/main.c',
 17	'source/util.c',
 18	'source/client/camera.c',
 19	'source/platform/platform.c',
 20        'vendor/stb_image_c89.c',
 21]
 22
 23include_dirs = [
 24	include_directories('include'),
 25]
 26
 27vendor_inc = [
 28	include_directories('vendor'),
 29]
 30
 31mgmath_lib = static_library(
 32	'mgmath',
 33	'source/mgmath_handmade.c',
 34	include_directories: include_dirs + vendor_inc,
 35	dependencies: math_dep,
 36	c_args: [ '-Wno-pedantic' ],
 37	override_options: [ 'c_std=c99' ],
 38)
 39
 40mgmath_dep = declare_dependency(
 41	include_directories: include_dirs,
 42	link_with: mgmath_lib,
 43	dependencies: math_dep,
 44)
 45
 46renderer_c_args = []
 47renderer_sources = [
 48	'source/renderer/renderer.c',
 49]
 50if renderer_backend == 'sokol'
 51	opengl_dep = dependency('opengl', required: false)
 52	if not opengl_dep.found() # fallback (at least for alpine)
 53		opengl_dep = dependency('gl')
 54	endif
 55
 56	sokol_gfx_lib = static_library(
 57		'sokol_gfx',
 58		'vendor/sokol_gfx.c',
 59		include_directories: vendor_inc,
 60		dependencies: opengl_dep,
 61		override_options: [ 'c_std=c99' ],
 62	)
 63
 64	renderer_backend_dep = declare_dependency(
 65		include_directories: vendor_inc,
 66		link_with: sokol_gfx_lib,
 67		dependencies: [ opengl_dep, sdl_dep ],
 68	)
 69	renderer_sources += [ 'source/renderer/renderer_sokol.c' ]
 70	renderer_c_args += [ '-DMG_RENDERER_SOKOL' ]
 71else
 72	renderer_backend_dep = declare_dependency(
 73		include_directories: vendor_inc,
 74		dependencies: sdl_dep,
 75	)
 76	renderer_sources += [ 'source/renderer/renderer_small3dlib.c' ]
 77	renderer_c_args += [ '-DMG_RENDERER_SMALL3DLIB' ]
 78endif
 79
 80renderer_lib = static_library(
 81	'renderer',
 82	renderer_sources,
 83	include_directories: include_dirs,
 84	dependencies: renderer_backend_dep,
 85	c_args: renderer_c_args,
 86	override_options: [ 'c_std=c99' ],
 87)
 88
 89renderer_dep = declare_dependency(
 90	include_directories: include_dirs,
 91	link_with: renderer_lib,
 92	dependencies: renderer_backend_dep,
 93)
 94
 95deps = [
 96	sdl_dep,
 97	mgmath_dep,
 98	renderer_dep,
 99]
100
101executable(
102	'magnolia',
103	sources,
104	include_directories: include_dirs,
105	dependencies: deps,
106	c_args: renderer_c_args,
107)