blob: 31d28c53c558756d5e20cd75d7dd33304a86868a [file] [log] [blame]
Ed Tanousb3ef7f22022-03-30 14:03:41 -07001project('dbus-sensor-tester', 'cpp',
2 version : '1.0',
3 meson_version: '>=0.57.0',
4 default_options: [
5 'b_lto_mode=default',
6 'b_lto_threads=0',
7 'b_lto=true',
8 'b_ndebug=if-release',
9 'buildtype=debugoptimized',
10 'cpp_rtti=false',
11 'cpp_std=c++20',
12 'warning_level=3',
13 'werror=true',
14 ])
15
16# Project related links
17
18project_pretty_name = 'dbus-sensor-tester'
19
20# Validate the c++ Standard
21
22if get_option('cpp_std') != 'c++20'
23 error('This project requires c++20 support')
24endif
25
26# Get compiler and default build type
27
28cxx = meson.get_compiler('cpp')
29build = get_option('buildtype')
30optimization = get_option('optimization')
31summary('Build Type',build, section : 'Build Info')
32summary('Optimization',optimization, section : 'Build Info')
33
34# Disable lto when compiling with no optimization
35if(get_option('optimization') == '0')
36 add_project_arguments('-fno-lto', language: 'cpp')
37 message('Disabling lto & its supported features as optimization is disabled')
38endif
39
40# Add compiler arguments
41
42# -Wpedantic, -Wextra comes by default with warning level
43add_project_arguments(
44 cxx.get_supported_arguments([
45 '-Wcast-align',
46 '-Wconversion',
47 '-Wformat=2',
48 '-Wold-style-cast',
49 '-Woverloaded-virtual',
50 '-Wsign-conversion',
51 '-Wunused',
52 '-Wno-attributes',
53 ]),
54 language: 'cpp'
55)
56
57if (cxx.get_id() == 'clang' and cxx.version().version_compare('>9.0'))
58add_project_arguments(
59 cxx.get_supported_arguments([
60 '-Weverything',
61 '-Wno-c++98-compat-pedantic',
62 '-Wno-c++98-compat',
63 '-Wno-documentation-unknown-command',
64 '-Wno-documentation',
65 '-Wno-exit-time-destructors',
66 '-Wno-global-constructors',
67 '-Wno-newline-eof',
68 '-Wno-padded',
69 '-Wno-shadow',
70 '-Wno-used-but-marked-unused',
71 '-Wno-weak-vtables',
72 ]),
73 language:'cpp')
74endif
75
76# if compiler is gnu-gcc , and version is > 8.0 then we add few more
77# compiler arguments , we know that will pass
78
79if (cxx.get_id() == 'gcc' and cxx.version().version_compare('>8.0'))
80 add_project_arguments(
81 cxx.get_supported_arguments([
82 '-Wduplicated-cond',
83 '-Wduplicated-branches',
84 '-Wlogical-op',
85 '-Wunused-parameter',
86 '-Wnull-dereference',
87 '-Wdouble-promotion',
88 ]),
89 language:'cpp')
90endif
91
92# Find the dependency modules, if not found use meson wrap to get them
93# automatically during the configure step
94dependencies = []
95
96sdbusplus = dependency('sdbusplus', required : false, include_type: 'system')
97if not sdbusplus.found()
98 sdbusplus_proj = subproject('sdbusplus', required: true)
99 sdbusplus = sdbusplus_proj.get_variable('sdbusplus_dep')
100 sdbusplus = sdbusplus.as_system('system')
101endif
102dependencies += sdbusplus
103
104cli11 = dependency('cli11', required : false, include_type: 'system')
105if not cli11.found()
106 cli11_proj = subproject('cli11', required: true)
107 cli11 = cli11_proj.get_variable('CLI11_dep')
108 cli11 = cli11.as_system('system')
109endif
110dependencies += cli11
111
112systemd = dependency('systemd')
113dependencies += [systemd]
114
115boost = dependency('boost', version : '>=1.78.0', required : false, include_type: 'system')
116if not boost.found()
117 subproject('boost', required: false)
118 boost_inc = include_directories('subprojects/boost_1_78_0/', is_system:true)
119 boost = declare_dependency(include_directories : boost_inc)
120 boost = boost.as_system('system')
121endif
122dependencies += boost
123
124srcfiles_sensortest = [
125]
126
127systemd_system_unit_dir = systemd.get_variable(pkgconfig: 'systemdsystemunitdir')
128bindir = get_option('prefix') + '/' +get_option('bindir')
129
130# Generate the executable
131executable(
132 'sensortest',
133 srcfiles_sensortest + ['main.cpp'],
134 dependencies: dependencies,
135 link_args: '-Wl,--gc-sections',
136 install: true,
137 install_dir: bindir
138)