xref: /openbmc/libcper/meson.build (revision 398899a0e68a00262f863530fd94b8e1881fff2e)
1project(
2    'libcper',
3    'c',
4    version: '0.1',
5    meson_version: '>=1.2.0',
6    default_options: [
7        'c_std=c18',
8        'tests=' + (meson.is_subproject() ? 'disabled' : 'enabled'),
9        'warning_level=2',
10        'werror=true',
11    ],
12)
13
14spec_dir = meson.current_source_dir() + '/specification/json'
15example_dir = meson.current_source_dir() + '/examples'
16add_project_arguments(
17    [
18        '-DLIBCPER_EXAMPLES="' + example_dir + '"',
19        '-DLIBCPER_JSON_SPEC="' + spec_dir + '"',
20        '-D_POSIX_C_SOURCE=200809L',
21        '-Wno-gnu-statement-expression-from-macro-expansion',
22    ],
23    language: 'c',
24)
25
26library_is_share = get_option('default_library') == 'shared'
27
28if get_option('output-all-properties').enabled()
29    add_project_arguments('-DOUTPUT_ALL_PROPERTIES', language: 'c')
30endif
31
32project_description = 'libcper library'
33
34libcper_parse_sources = files(
35    'sections/cper-section-ampere.c',
36    'sections/cper-section-arm.c',
37    'sections/cper-section-ccix-per.c',
38    'sections/cper-section-cxl-component.c',
39    'sections/cper-section-cxl-protocol.c',
40    'sections/cper-section-dmar-generic.c',
41    'sections/cper-section-dmar-iommu.c',
42    'sections/cper-section-dmar-vtd.c',
43    'sections/cper-section-firmware.c',
44    'sections/cper-section-generic.c',
45    'sections/cper-section-ia32x64.c',
46    'sections/cper-section-ipf.c',
47    'sections/cper-section-memory.c',
48    'sections/cper-section-nvidia.c',
49    'sections/cper-section-pci-bus.c',
50    'sections/cper-section-pci-dev.c',
51    'sections/cper-section-pcie.c',
52    'sections/cper-section.c',
53)
54
55edk_sources = files('Cper.c')
56
57libcper_generate_sources = files(
58    'generator/sections/gen-section-ampere.c',
59    'generator/sections/gen-section-arm.c',
60    'generator/sections/gen-section-ccix-per.c',
61    'generator/sections/gen-section-cxl-component.c',
62    'generator/sections/gen-section-cxl-protocol.c',
63    'generator/sections/gen-section-dmar.c',
64    'generator/sections/gen-section-firmware.c',
65    'generator/sections/gen-section-generic.c',
66    'generator/sections/gen-section-ia32x64.c',
67    'generator/sections/gen-section-memory.c',
68    'generator/sections/gen-section-nvidia.c',
69    'generator/sections/gen-section-pci-bus.c',
70    'generator/sections/gen-section-pci-dev.c',
71    'generator/sections/gen-section-pcie.c',
72    'generator/sections/gen-section.c',
73)
74
75cc = meson.get_compiler('c')
76
77json_c = dependency('json-c', default_options: {'warning_level': '0'})
78json_c_dep = declare_dependency(
79    include_directories: include_directories('subprojects'),
80    dependencies: json_c,
81)
82libcper_include = ['include']
83libcper_include_dir = include_directories(libcper_include, is_system: true)
84
85libcper_parse_sources += files(
86    'base64.c',
87    'common-utils.c',
88    'cper-parse.c',
89    'cper-utils.c',
90    'ir-parse.c',
91    'log.c',
92)
93
94subdir('include')
95
96install = get_option('install').allowed()
97
98libcper_parse = library(
99    'cper-parse',
100    libcper_parse_sources,
101    edk_sources,
102    version: meson.project_version(),
103    include_directories: libcper_include_dir,
104    c_args: '-Wno-address-of-packed-member',
105    dependencies: [json_c_dep],
106    install: install,
107)
108libcper_parse_dep = declare_dependency(
109    include_directories: libcper_include_dir,
110    link_with: [libcper_parse],
111)
112
113libcper_generate_sources += files(
114    'generator/cper-generate.c',
115    'generator/gen-utils.c',
116)
117
118libcper_generate = library(
119    'cper-generate',
120    libcper_generate_sources,
121    version: meson.project_version(),
122    include_directories: libcper_include_dir,
123    dependencies: [json_c_dep],
124    link_with: [libcper_parse],
125    install: install,
126)
127libcper_generate_dep = declare_dependency(
128    include_directories: libcper_include_dir,
129    link_with: libcper_generate,
130)
131
132if get_option('pkgconfig').allowed()
133    import('pkgconfig').generate(
134        libcper_parse,
135        name: meson.project_name(),
136        version: meson.project_version(),
137        description: 'C bindings for parsing CPER',
138    )
139endif
140
141if get_option('utility').allowed()
142    executable(
143        'cper-convert',
144        'cli-app/cper-convert.c',
145        include_directories: libcper_include_dir,
146        dependencies: [json_c_dep],
147        link_with: [libcper_parse, libcper_generate],
148        install: install,
149        install_dir: get_option('bindir'),
150    )
151
152    executable(
153        'cper-generate',
154        'generator/cper-generate-cli.c',
155        edk_sources,
156        include_directories: libcper_include_dir,
157        link_with: [libcper_parse, libcper_generate],
158        install: install,
159        install_dir: get_option('bindir'),
160    )
161endif
162
163# Disable unit tests when output-all-properties is enabled
164# because it changes CPER-IR output format.
165if get_option('output-all-properties').disabled()
166    if get_option('tests').allowed()
167        subdir('tests')
168    endif
169endif
170
171if get_option('python').allowed()
172    py = import('python').find_installation(pure: false)
173    py.extension_module(
174        'cper',
175        'pycper.c',
176        c_args: ['-DLIBCPER_PYTHON'],
177        dependencies: [libcper_parse_dep, json_c_dep],
178        install: true,
179    )
180endif
181