1 # Copyright 2018-2022 Emil Dotchevski and Reverge Studios, Inc.
3 # Distributed under the Boost Software License, Version 1.0. (See accompanying
4 # file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 project('leaf', 'cpp', default_options : ['cpp_std=c++17', 'b_pch=false'], license : 'boost')
8 option_leaf_hpp = get_option('leaf_hpp')
9 option_boost = get_option('leaf_boost_examples')
10 option_lua = get_option('leaf_lua_examples')
11 option_diagnostics = get_option('leaf_diagnostics')
12 option_exceptions = (get_option('cpp_eh')!='none')
13 option_enable_unit_tests = get_option('leaf_enable_unit_tests')
14 option_enable_examples = get_option('leaf_enable_examples')
15 option_enable_benchmarks = get_option('leaf_enable_benchmarks')
16 option_embedded = get_option('leaf_embedded')
18 if not option_enable_examples
20 error('The option leaf_boost_examples requires leaf_enable_examples. Aborting.')
23 error('The option leaf_lua_examples requires leaf_enable_examples. Aborting.')
27 compiler = meson.get_compiler('cpp')
28 compiler_id = compiler.get_id()
29 if not meson.is_subproject()
32 '-DBOOST_LEAF_BOOST_AVAILABLE',
35 if compiler_id=='clang'
36 if get_option('buildtype')!='debug'
38 '-Wno-unused-variable',
42 '-fdiagnostics-absolute-paths',
44 '-Wno-non-virtual-dtor',
45 '-Wno-delete-non-abstract-non-virtual-dtor',
47 elif compiler_id=='gcc'
48 if get_option('buildtype')!='debug'
50 '-Wno-unused-variable',
55 '-Wno-non-virtual-dtor',
56 '-Wno-misleading-indentation',
58 elif host_machine.system()=='emscripten'
61 '-s', 'USE_PTHREADS=1',
62 '-s', 'EXIT_RUNTIME=1',
63 '-s', 'PROXY_TO_PTHREAD=1',
64 '-s', 'DISABLE_EXCEPTION_CATCHING=0',
66 add_global_link_arguments(
69 '-s', 'USE_PTHREADS=1',
70 '-s', 'EXIT_RUNTIME=1',
71 '-s', 'PROXY_TO_PTHREAD=1',
72 '-s', 'DISABLE_EXCEPTION_CATCHING=0',
73 '-s', 'INITIAL_MEMORY=268435456',
79 if option_boost # Requires that LEAF resides under boost_root/libs/leaf.
80 dep_boost = declare_dependency(include_directories: '../..')
85 dep_lua = subproject('lua').get_variable('all')
88 defines = [ '-DBOOST_LEAF_CFG_DIAGNOSTICS=' + option_diagnostics.to_string() ]
91 defines += '-DBOOST_LEAF_EMBEDDED'
94 dep_thread = dependency('threads')
96 leaf = declare_dependency( include_directories: 'include', compile_args: defines )
98 #################################
100 if option_enable_unit_tests
103 'accumulate_basic_test',
104 'accumulate_nested_error_exception_test',
105 'accumulate_nested_error_result_test',
106 'accumulate_nested_new_error_exception_test',
107 'accumulate_nested_new_error_result_test',
108 'accumulate_nested_success_exception_test',
109 'accumulate_nested_success_result_test',
110 'BOOST_LEAF_AUTO_test',
111 'BOOST_LEAF_ASSIGN_test',
112 'BOOST_LEAF_CHECK_test',
113 'capture_exception_async_test',
114 'capture_exception_result_async_test',
115 'capture_exception_state_test',
116 'capture_exception_unload_test',
117 'capture_result_async_test',
118 'capture_result_state_test',
119 'context_activator_test',
120 'context_deduction_test',
121 'capture_result_unload_test',
122 'ctx_handle_all_test',
123 'ctx_handle_some_test',
124 'ctx_remote_handle_all_test',
125 'ctx_remote_handle_some_test',
127 'defer_nested_error_exception_test',
128 'defer_nested_error_result_test',
129 'defer_nested_new_error_exception_test',
130 'defer_nested_new_error_result_test',
131 'defer_nested_success_exception_test',
132 'defer_nested_success_result_test',
133 'diagnostic_info_test',
134 'diagnostic_info_test2',
140 'exception_to_result_test',
141 'function_traits_test',
142 'handle_all_other_result_test',
145 'handle_some_other_result_test',
150 'multiple_errors_test',
152 'preload_basic_test',
153 'preload_exception_test',
154 'preload_nested_error_exception_test',
155 'preload_nested_error_result_test',
156 'preload_nested_new_error_exception_test',
157 'preload_nested_new_error_result_test',
158 'preload_nested_success_exception_test',
159 'preload_nested_success_result_test',
161 'result_bad_result_test',
162 'result_implicit_conversion_test',
166 'tls_array_alloc_test1',
167 'tls_array_alloc_test2',
168 'tls_array_alloc_test3',
171 'try_catch_error_id_test',
172 'try_catch_system_error_test',
174 'try_exception_and_result_test',
176 if option_boost and option_exceptions
178 'boost_exception_test'
182 dep_test_single_header = []
184 dep_test_single_header = declare_dependency(compile_args: ['-DBOOST_LEAF_TEST_SINGLE_HEADER'])
188 test(t, executable(t, 'test/'+t+'.cpp', dependencies: [leaf, dep_thread, dep_boost, dep_test_single_header]) )
197 '_hpp_exception_test',
198 '_hpp_handle_errors_test',
199 '_hpp_on_error_test',
202 '_hpp_to_variant_test',
205 foreach t : header_tests
206 test(t, executable(t, 'test/'+t+'.cpp', dependencies: [leaf, dep_thread, dep_boost]) )
211 #################################
213 if option_enable_examples
215 print_file_examples = [
219 print_file_examples += [
224 print_file_examples += [
225 'print_file_outcome_result'
229 foreach e : print_file_examples
230 executable(e, 'example/print_file/'+e+'.cpp', dependencies: [leaf, dep_thread, dep_boost] )
235 #################################
237 if option_enable_examples
247 'capture_in_exception',
248 'exception_to_result'
257 # 'asio_beast_leaf_rpc' #FIXME
263 'lua_callback_result'
268 executable(e, 'example/'+e+'.cpp', dependencies: [leaf, dep_thread, dep_boost, dep_lua] )
273 #################################
275 if option_enable_benchmarks
277 if get_option('optimization')=='0'
278 error('The option leaf_enable_benchmarks requires optimizations to be enabled. Aborting.')
282 error('The option leaf_enable_benchmarks requires the built-in option cpp_eh set to none. Aborting.')
285 dep_tl_expected = subproject('tl_expected').get_variable('headers')
286 executable('deep_stack_tl', 'benchmark/deep_stack_other.cpp', override_options: ['cpp_std=c++17'], cpp_args: '-DBENCHMARK_WHAT=0', dependencies: [dep_tl_expected] )
287 executable('deep_stack_leaf', 'benchmark/deep_stack_leaf.cpp', dependencies: [leaf], override_options: ['cpp_std=c++17'], cpp_args: '-DBOOST_LEAF_CFG_DIAGNOSTICS=0')
289 executable('deep_stack_result', 'benchmark/deep_stack_other.cpp', dependencies: [dep_boost], override_options: ['cpp_std=c++17'], cpp_args: '-DBENCHMARK_WHAT=1' )
290 executable('deep_stack_outcome', 'benchmark/deep_stack_other.cpp', dependencies: [dep_boost], override_options: ['cpp_std=c++17'], cpp_args: '-DBENCHMARK_WHAT=2' )