xref: /openbmc/libpldm/meson.build (revision 6409c8a0240defcc96a680fac427199d51c188ef)
1project('libpldm', ['c','cpp'],
2    default_options: [
3      'debug=true',
4      'optimization=g',
5      'warning_level=3',
6      'werror=true',
7      'cpp_std=c++20',
8      'c_std=c17',
9      'tests=' + (meson.is_subproject() ? 'disabled' : 'enabled'),
10    ],
11    version: '0.3.0',
12    meson_version: '>=0.63.0',
13)
14
15add_project_arguments('-D_DEFAULT_SOURCE', language: ['c'])
16
17compiler = meson.get_compiler('c')
18conf = configuration_data()
19if compiler.has_header('poll.h')
20  conf.set('PLDM_HAS_POLL', 1)
21endif
22
23# ABI control
24visible =  '__attribute__((visibility("default")))'
25if get_option('abi').contains('deprecated')
26  conf.set('LIBPLDM_ABI_DEPRECATED', visible)
27  add_project_arguments('-DLIBPLDM_API_DEPRECATED', language: ['c', 'cpp'])
28else
29  conf.set('LIBPLDM_ABI_DEPRECATED', '')
30endif
31conf.set('LIBPLDM_ABI_STABLE', visible) # Always expose the stable symbols
32if get_option('abi').contains('testing')
33  conf.set('LIBPLDM_ABI_TESTING', visible)
34  add_project_arguments('-DLIBPLDM_API_TESTING', language: ['c', 'cpp'])
35else
36  conf.set('LIBPLDM_ABI_TESTING', '')
37endif
38
39config = configure_file(output: 'config.h',
40  configuration: conf
41)
42
43add_project_arguments('-include', '@0@'.format(config), language: 'c')
44
45libpldm_sources = files()
46subdir('src')
47
48libpldm_include_dir = ['.', 'include', 'src']
49libpldm_headers = files()
50libpldm_transport_headers = files()
51
52subdir('include/libpldm')
53
54libpldm = library(
55  'pldm',
56   libpldm_sources,
57   implicit_include_directories: false,
58   include_directories: libpldm_include_dir,
59   version: meson.project_version(),
60   gnu_symbol_visibility: 'hidden',
61   install: true
62   )
63
64install_headers(
65  libpldm_headers,
66  subdir:'libpldm'
67  )
68
69install_headers(
70  libpldm_transport_headers,
71  subdir:'libpldm/transport'
72  )
73
74libpldm_dep = declare_dependency(
75  include_directories: libpldm_include_dir,
76  link_with: libpldm)
77
78import('pkgconfig').generate(
79  name: 'libpldm',
80  description: 'PLDM protocol encode/decode C lib',
81  version: meson.project_version(),
82  libraries: libpldm)
83
84if get_option('tests').enabled()
85  subdir('tests')
86
87  c_suite = meson.get_compiler('c').get_id()
88  cpp_suite = meson.get_compiler('cpp').get_id()
89
90  if get_option('abi-compliance-check').allowed() and c_suite == cpp_suite and c_suite == 'gcc'
91    host = host_machine.cpu_family()
92    baseline_dump = meson.project_source_root() / 'abi' / host / '@0@.dump'.format(c_suite)
93
94    abi_dumper = find_program('abi-dumper',
95                              native: true,
96                              required: get_option('abi-compliance-check'))
97    abi_compliance_checker = find_program('abi-compliance-checker',
98                                          native: true,
99                                          required: get_option('abi-compliance-check'))
100
101    test_abi_compliance = abi_dumper.found() and \
102                          abi_compliance_checker.found() and \
103                          import('fs').is_file(baseline_dump)
104
105    if test_abi_compliance
106      current_dump = custom_target('abi-dump',
107                               input: libpldm,
108                               output: 'current.dump',
109                               command: [ abi_dumper,
110                                          '-public-headers',
111                                          meson.project_source_root() / 'include',
112                                          '@INPUT@',
113                                          '-o',
114                                          '@OUTPUT@',
115                                          '-lver',
116                                          meson.project_version()])
117      abi_compliance = custom_target('abi-compliance',
118                                     input: [baseline_dump, current_dump],
119                                     output: 'abi-compliance',
120                                     command: [ abi_compliance_checker,
121                                                '-l',
122                                                meson.project_name(),
123                                                '-old',
124                                                '@INPUT0@',
125                                                '-new',
126                                                '@INPUT1@' ],
127                                                build_by_default: true)
128    endif
129  endif
130endif
131
132install_subdir('instance-db',
133               install_mode: 'r--r--r--',
134               install_dir: get_option('datadir') / meson.project_name())
135