1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
project('themes', 'cpp',
version: '1.0.0',
default_options: [
'cpp_std=c++17',
'buildtype=release',
'warning_level=2'
]
)
# Emscripten link flags
emscripten_link_args = [
'-s', 'ALLOW_MEMORY_GROWTH=1',
'-s', 'USE_WEBGL2=1',
'-s', 'FULL_ES3=1',
'-s', 'WASM=1',
'-s', 'NO_EXIT_RUNTIME=1',
'-s', 'FETCH'
]
# Source files
sources = files(
# Main
'src/main.cpp',
'src/main_loop.cpp',
'src/mathlib.cpp',
'src/logger.cpp',
'src/shader.cpp',
'src/shader_fetcher.cpp',
'src/shapes_2d.cpp',
'src/webgl_context.cpp',
'src/renderer_2d.cpp',
'src/renderer_3d.cpp',
# Shaders
'src/shaders/renderer2d_frag.cpp',
'src/shaders/renderer2d_vert.cpp',
'src/shaders/renderer3d_frag.cpp',
'src/shaders/renderer3d_vert.cpp',
'src/shaders/sun_frag.cpp',
'src/shaders/sun_vert.cpp',
# Autumn theme
'src/autumn/autumn_theme.cpp',
'src/autumn/leaf_particle_render.cpp',
'src/autumn/tree_shape.cpp',
# Winter theme
'src/winter/winter_theme.cpp',
'src/winter/snowflake.cpp',
'src/winter/windfield.cpp',
# Spring theme
'src/spring/spring_theme.cpp',
'src/spring/grass_renderer.cpp',
# Summer theme
'src/summer/summer_theme.cpp'
)
# Include directories
inc = include_directories(
'src',
'src/autumn',
'src/winter',
'src/spring',
'src/summer',
'src/shaders',
'src/_shaders',
'src/tools'
)
# Custom target to build shaders from GLSL files
node = find_program('node')
shader_script = meson.project_source_root() + '/src/tools/shader.js'
# List all GLSL shader files as inputs
shader_inputs = files(
'src/_shaders/renderer2d.frag',
'src/_shaders/renderer2d.vert',
'src/_shaders/renderer3d.frag',
'src/_shaders/renderer3d.vert',
'src/_shaders/sun.frag',
'src/_shaders/sun.vert'
)
# Custom target that runs whenever shader files change
sh = find_program('sh')
build_shaders = custom_target('build_shaders',
input: shader_inputs,
output: 'shaders.stamp',
command: [sh, '-c', node.full_path() + ' ' + shader_script + ' && touch @OUTPUT@'],
build_always_stale: true,
build_by_default: true
)
# Build the executable
output_exe = executable('output',
sources,
include_directories: inc,
link_args: emscripten_link_args,
name_suffix: 'js'
)
# Custom target to copy output files to dist directory
copy_script = find_program('sh')
copy_to_dist = custom_target('copy_to_dist',
output: ['copy_to_dist.stamp'],
input: output_exe,
command: [
copy_script, '-c',
'mkdir -p ' + meson.project_source_root() + '/dist && ' +
'cp $1 ' + meson.project_source_root() + '/dist/output.js && ' +
'cp $2/output.wasm ' + meson.project_source_root() + '/dist/output.wasm && ' +
'touch $3',
'--', '@INPUT@', meson.current_build_dir(), '@OUTPUT@'
],
build_by_default: true,
install: false
)
# Add an alias target for convenience
alias_target('copy-dist', copy_to_dist)
|