diff options
Diffstat (limited to 'tomlplusplus/meson.build')
| -rw-r--r-- | tomlplusplus/meson.build | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/tomlplusplus/meson.build b/tomlplusplus/meson.build new file mode 100644 index 0000000000..4848773279 --- /dev/null +++ b/tomlplusplus/meson.build @@ -0,0 +1,212 @@ +# This file is a part of toml++ and is subject to the the terms of the MIT license. +# Copyright (c) Mark Gillard <mark.gillard@outlook.com.au> +# See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. +# SPDX-License-Identifier: MIT + +project( + 'tomlplusplus', + 'cpp', + license: 'MIT', + version: '3.4.0', + meson_version: '>=0.61.0', + default_options: [ + # https://mesonbuild.com/Builtin-options.html + # core options + 'buildtype=release', + 'default_library=shared', + # base options + 'b_lto=false', + 'b_ndebug=if-release', + # compiler options + 'cpp_std=c++17' + ] +) + +#----------------------------------------------------------------------------------------------------------------------- +# global vars + imports +#----------------------------------------------------------------------------------------------------------------------- + +compiler = meson.get_compiler('cpp') +message('target cpu_family: @0@'.format(host_machine.cpu_family())) +message('target cpu: @0@'.format(host_machine.cpu())) +message('target system: @0@'.format(host_machine.system())) +message('target endian: @0@'.format(host_machine.endian())) + +is_devel = get_option('devel') +is_debug = get_option('debug') +is_release = not is_debug +is_pedantic = get_option('pedantic') or is_devel +is_permissive = get_option('permissive') +is_windows = host_machine.system() == 'windows' +is_x64 = host_machine.cpu_family() == 'x86_64' +is_subproject = meson.is_subproject() + +cpp = meson.get_compiler('cpp') +is_gcc = cpp.get_id() == 'gcc' +is_clang = cpp.get_id() == 'clang' +is_msvc = cpp.get_id() == 'msvc' +is_icc_cl = cpp.get_id() == 'intel-cl' +is_icc = is_icc_cl or cpp.get_id() == 'intel' +is_lld = cpp.get_linker_id() == 'ld.lld' +has_exceptions = get_option('cpp_eh') != 'none' +unreleased_features = get_option('unreleased_features') + +build_tests = (get_option('build_tests') or is_devel) and not is_subproject +build_examples = (get_option('build_examples') or is_devel) and not is_subproject +build_tt = (get_option('build_tt') or is_devel) and not is_subproject and has_exceptions and not unreleased_features +build_lib = get_option('build_lib') or get_option('compile_library') or build_tests or build_examples or build_tt + +#----------------------------------------------------------------------------------------------------------------------- +# global_args +# +# these are the arguments common to everything in the project +# *** they are not forwarded to dependents when using this as a submodule. *** +#----------------------------------------------------------------------------------------------------------------------- + +global_args = cpp.get_supported_arguments( + # clang/gcc + '-ferror-limit=5', + '-fmax-errors=5', + '-Wno-unused-command-line-argument', + '-Wno-reserved-macro-identifier', + '-Wno-init-list-lifetime', + '-fchar8_t', + # msvc + '/bigobj', + '/Gy', # function-level linking + '/GF', # string pooling + '/openmp-', + '/utf-8', + '/volatile:iso', + '/Zc:__cplusplus', + '/Zc:inline', + '/Zc:externConstexpr', + '/Zc:preprocessor' +) +if has_exceptions + global_args += cpp.get_supported_arguments('/Zc:throwingNew', '-D_HAS_EXCEPTIONS=1') +else + global_args += cpp.get_supported_arguments('-D_HAS_EXCEPTIONS=0') +endif +if is_permissive + global_args += cpp.get_supported_arguments('/permissive', '-DTOML_DISABLE_CONDITIONAL_NOEXCEPT_LAMBDA=1') +else + global_args += cpp.get_supported_arguments('/permissive-') +endif +if is_pedantic + global_args += cpp.get_supported_arguments( + # clang + '-Weverything', + # gcc + '-Wcast-align', + '-Wcast-qual', + '-Wctor-dtor-privacy', + '-Wdisabled-optimization', + '-Wfloat-equal', + '-Wimport', + '-Winit-self', + '-Wlogical-op', + '-Wmissing-declarations', + '-Wmissing-field-initializers', + '-Wmissing-format-attribute', + '-Wmissing-include-dirs', + '-Wmissing-noreturn', + '-Wold-style-cast', + '-Woverloaded-virtual', + '-Wpacked', + '-Wpointer-arith', + '-Wredundant-decls', + '-Wshadow', + '-Wsign-conversion', + '-Wsign-promo', + '-Wstack-protector', + '-Wstrict-null-sentinel', + '-Wswitch-default', + '-Wswitch-enum', + '-Wundef', + '-Wunreachable-code', + '-Wunused', + '-Wunused-parameter', + '-Wuseless-cast', + '-Wvariadic-macros', + '-Wwrite-strings', + '-Wmissing-noreturn' + ) +endif +# unnecessary pedantry: +global_args += cpp.get_supported_arguments( + '-Wno-c++98-compat', + '-Wno-c++98-compat-pedantic', + '-Wno-documentation', + '-Wno-documentation-unknown-command', + '-Wno-switch-enum', + '-Wno-covered-switch-default', + '-Wno-padded', + '-Wno-float-equal' +) +if get_option('time_trace') + global_args += cpp.get_supported_arguments('-ftime-trace') +endif + +#----------------------------------------------------------------------------------------------------------------------- +# global_link_args +# +# these are the linker arguments common to everything in the projectwhen compiling shared libraries and executables. +# *** they are not forwarded to dependents when using this as a submodule. *** +#----------------------------------------------------------------------------------------------------------------------- + +global_link_args = [] + +if is_release + global_link_args += cpp.get_supported_link_arguments( + # msvc + '/OPT:REF,ICF=3', + '/INCREMENTAL:NO', + ) +endif + +#----------------------------------------------------------------------------------------------------------------------- +# global_overrides +# +# these are the meson overrides common to everything in the project +# *** they are not forwarded to dependents when using this as a submodule. *** +#----------------------------------------------------------------------------------------------------------------------- + +global_overrides = [ ] +if is_pedantic + global_overrides += [ + 'warning_level=3', + 'werror=true', + ] +endif + +#----------------------------------------------------------------------------------------------------------------------- +# subdirectories + files +#----------------------------------------------------------------------------------------------------------------------- + +public_headers = [] +internal_headers = [] + +# Empty dependency that will be filled either in src/ or include/ +tomlplusplus_dep = dependency('', required: false) + +subdir('include') + +if build_lib + subdir('src') +endif + +if build_tests + subdir('tests') +endif + +if build_examples + subdir('examples') +endif + +if build_tt + subdir('toml-test') +endif + +# Allow subproject usage +meson.override_dependency(meson.project_name(), tomlplusplus_dep) |
