Mirai's Miscellaneous Misadventures

M43 / meson.build

1# license: AGPLv3 or later
2# copyright 2023 zamfofex
3
4project('mimimi', 'c', default_options: ['c_std=c89', 'warning_level=3'])
5
6sources = [
7	'core/sprites.c',
8	'core/controls.c',
9	'core/cameras.c',
10	'core/animations.c',
11	'core/displays.c',
12	'core/font.c',
13	'core/text.c',
14	'core/collisions.c',
15	'core/video.c',
16	'core/effects.c',
17	'core/ground.c',
18	'core/dialogues.c',
19	'models/all.c',
20]
21
22possible_engines = ['fbdev']
23if host_machine.cpu() == 'wasm32'
24	possible_engines = ['wasm']
25endif
26
27# note: 'loader' must come last
28chapter_names = ['test', 'chapter-I', 'loader']
29engine_names = get_option('engines')
30
31foreach engine_name : engine_names
32	if engine_name not in possible_engines
33		error('engine ' + engine_name + ' is not allowed for the host machine')
34	endif
35endforeach
36
37c_args_dict = {
38	'fbdev': [
39		'-D_XOPEN_SOURCE=500',
40	],
41}
42
43link_args_dict = {
44	'wasm': [
45		'-Wl,--stack-first,-z,stack-size=0x100000',
46		'-Wl,--export=__heap_base,--export=main',
47		'-Wl,--export-table,--growable-table',
48		'-Wl,--export=mimimi_wasm_texture',
49		'-Wl,--export=mimimi_wasm_invalidate',
50		'-Wl,--export=mimimi_wasm_stamp',
51	],
52}
53
54install_headers('include/mimimi.h')
55mimimi = library('mimimi', sources,
56	include_directories: 'include',
57	install: true,
58)
59
60chapters = []
61
62foreach engine_name : engine_names
63	c_args = c_args_dict.get(engine_name, [])
64	link_args = link_args_dict.get(engine_name, [])
65	
66	engine = library('mimimi-' + engine_name, 'engines' / (engine_name + '.c'),
67		include_directories: 'include',
68		c_args: c_args,
69		install: true,
70	)
71	
72	if engine_name == 'wasm'
73		install_data('index.html', install_tag: 'runtime')
74	endif
75	
76	foreach chapter_name : chapter_names
77		name = 'mimimi-' + chapter_name + '-' + engine_name
78		
79		name_suffix = []
80		if engine_name == 'wasm'
81			name_suffix = 'wasm'
82			name = 'mimimi-' + chapter_name
83			install_symlink(name + '.wasm',
84				install_dir: get_option('prefix') / get_option('datadir') / 'mimimi',
85				pointing_to: get_option('prefix') / get_option('bindir') / (name + '.wasm'),
86				install_tag: 'runtime',
87			)
88		endif
89		
90		chapter = static_library(name, 'chapters' / chapter_name / 'setup.c',
91			include_directories: 'include',
92			link_args: link_args,
93			install: true,
94		)
95		
96		chapter_libraries = []
97		if chapter_name == 'loader'
98			chapter_libraries = chapters
99		else
100			chapters += chapter
101		endif
102		
103		executable(name, 'chapters/main.c',
104			include_directories: 'include',
105			c_args: c_args + [
106				'-DMIMIMI_ENGINE=mimimi_' + engine_name,
107				'-DMIMIMI_CHAPTER=mimimi_' + chapter_name.replace('-', '_'),
108				'-DMIMIMI_TICK=mimimi_' + chapter_name.replace('-', '_') + '_tick',
109			],
110			link_args: link_args,
111			link_with: [mimimi, engine, chapter] + chapter_libraries,
112			name_suffix: name_suffix,
113			install: true,
114		)
115	endforeach
116endforeach