xref: /openbmc/libpldm/src/meson.build (revision e78035e88cba0506810a6e0cb704c43482ab3e7a)
1libpldm_sources = files('control.c', 'responder.c', 'utils.c')
2
3subdir('dsp')
4
5if get_option('transport')
6    subdir('requester')
7    subdir('transport')
8endif
9
10if get_option('oem').contains('ibm')
11    subdir('oem/ibm')
12endif
13
14if get_option('oem').contains('meta')
15    subdir('oem/meta')
16endif
17
18subdir('firmware_device')
19
20libpldm_link_args = []
21foreach alias : libpldm_deprecated_aliases
22    libpldm_link_args += '-Wl,--defsym=@0@=@1@'.format(alias[0], alias[1])
23endforeach
24
25libpldm = library(
26    'pldm',
27    libpldm_sources,
28    implicit_include_directories: false,
29    include_directories: [libpldm_include_dir, include_directories('.')],
30    link_args: libpldm_link_args,
31    version: meson.project_version(),
32    gnu_symbol_visibility: 'hidden',
33    install: true,
34)
35
36libpldm_dep = declare_dependency(
37    include_directories: libpldm_include_dir,
38    link_with: libpldm,
39)
40
41import('pkgconfig').generate(
42    name: 'libpldm',
43    description: 'PLDM protocol encode/decode C lib',
44    version: meson.project_version(),
45    libraries: libpldm,
46)
47
48if get_option('tests')
49    c_suite = meson.get_compiler('c').get_id()
50    cpp_suite = meson.get_compiler('cpp').get_id()
51
52    if get_option('abi-compliance-check') and c_suite == cpp_suite and c_suite == 'gcc'
53        host = host_machine.cpu_family()
54        baseline_dump = meson.project_source_root() / 'abi' / host / '@0@.dump'.format(
55            c_suite,
56        )
57
58        abi_dumper = find_program(
59            'abi-dumper',
60            native: true,
61            required: get_option('abi-compliance-check'),
62        )
63        abi_compliance_checker = find_program(
64            'abi-compliance-checker',
65            native: true,
66            required: get_option('abi-compliance-check'),
67        )
68
69        test_abi_compliance = abi_dumper.found() and \
70    abi_compliance_checker.found() and \
71    import('fs').is_file(baseline_dump)
72
73        if test_abi_compliance
74            current_dump = custom_target(
75                'abi-dump',
76                input: libpldm,
77                output: 'current.dump',
78                command: [
79                    abi_dumper,
80                    '-mixed-headers',
81                    '-include-paths',
82                    meson.project_source_root() / 'src',
83                    '-public-headers',
84                    meson.project_source_root() / 'include',
85                    '-sort',
86                    '@INPUT@',
87                    '-o',
88                    '@OUTPUT@',
89                    '-lver',
90                    meson.project_version(),
91                ],
92            )
93            abi_compliance = custom_target(
94                'abi-compliance',
95                input: [baseline_dump, current_dump],
96                output: 'abi-compliance',
97                command: [
98                    abi_compliance_checker,
99                    '-l',
100                    meson.project_name(),
101                    '-old',
102                    '@INPUT0@',
103                    '-new',
104                    '@INPUT1@',
105                ],
106                build_by_default: true,
107            )
108        endif
109    endif
110endif
111