blob: 6e35406823cc06aa77223eb9a2b85174823963ea [file] [log] [blame]
John Chung197ea122024-05-03 19:57:55 +08001project(
Ed Tanousa5b3d492024-06-18 13:24:05 -07002 'libcper',
3 ['c', 'cpp'],
4 version: '0.1',
5 meson_version: '>=1.1.1',
6 default_options: [
7 'c_std=c18',
8 'cpp_std=c++23',
9 'tests=' + (meson.is_subproject() ? 'disabled' : 'enabled'),
10 'werror=true',
11 'warning_level=2',
12 ],
13)
John Chung197ea122024-05-03 19:57:55 +080014
Karthik Rajagopalan45e73322024-07-26 14:27:24 -070015add_project_arguments(
Ed Tanous358c7e12024-07-15 13:54:57 -070016 '-DLIBCPER_JSON_SPEC="'
17 + meson.current_source_dir()
18 + '/specification/json/cper-json.json"',
19 language: ['c', 'cpp'],
20)
21
Andrew Adriance1a908982024-07-02 14:26:10 -070022library_is_share = get_option('default_library') == 'shared'
Karthik Rajagopalan45e73322024-07-26 14:27:24 -070023add_project_arguments('-D_POSIX_C_SOURCE=200809L', language : 'c')
Andrew Adriance1a908982024-07-02 14:26:10 -070024
John Chung197ea122024-05-03 19:57:55 +080025project_description = 'libcper library'
26
Ed Tanousa84fc932024-07-15 13:48:35 -070027section_sources = files(
Ed Tanousa5b3d492024-06-18 13:24:05 -070028 'sections/cper-section-arm.c',
29 'sections/cper-section-ccix-per.c',
30 'sections/cper-section-cxl-component.c',
31 'sections/cper-section-cxl-protocol.c',
32 'sections/cper-section-dmar-generic.c',
33 'sections/cper-section-dmar-iommu.c',
34 'sections/cper-section-dmar-vtd.c',
35 'sections/cper-section-firmware.c',
36 'sections/cper-section-generic.c',
37 'sections/cper-section-ia32x64.c',
38 'sections/cper-section-ipf.c',
39 'sections/cper-section-memory.c',
Karthik Rajagopalan683e0552024-03-07 12:30:43 -080040 'sections/cper-section-nvidia.c',
Ed Tanousa5b3d492024-06-18 13:24:05 -070041 'sections/cper-section-pci-bus.c',
42 'sections/cper-section-pci-dev.c',
43 'sections/cper-section-pcie.c',
44 'sections/cper-section.c',
Dung Cao04f57712024-08-29 08:03:59 +000045 'sections/cper-section-ampere.c',
John Chung197ea122024-05-03 19:57:55 +080046)
47
Ed Tanousa84fc932024-07-15 13:48:35 -070048edk_sources = files('edk/Cper.c')
John Chung197ea122024-05-03 19:57:55 +080049
Ed Tanousa84fc932024-07-15 13:48:35 -070050generator_section_sources = files(
Ed Tanousa5b3d492024-06-18 13:24:05 -070051 'generator/sections/gen-section-arm.c',
52 'generator/sections/gen-section-ccix-per.c',
53 'generator/sections/gen-section-cxl-component.c',
54 'generator/sections/gen-section-cxl-protocol.c',
55 'generator/sections/gen-section-dmar.c',
56 'generator/sections/gen-section-firmware.c',
57 'generator/sections/gen-section-generic.c',
58 'generator/sections/gen-section-ia32x64.c',
59 'generator/sections/gen-section-memory.c',
Karthik Rajagopalan683e0552024-03-07 12:30:43 -080060 'generator/sections/gen-section-nvidia.c',
Ed Tanousa5b3d492024-06-18 13:24:05 -070061 'generator/sections/gen-section-pci-bus.c',
62 'generator/sections/gen-section-pci-dev.c',
63 'generator/sections/gen-section-pcie.c',
64 'generator/sections/gen-section.c',
Dung Cao04f57712024-08-29 08:03:59 +000065 'generator/sections/gen-section-ampere.c',
John Chung197ea122024-05-03 19:57:55 +080066)
67
John Chungabc62b82024-05-22 22:45:36 +080068cc = meson.get_compiler('c')
John Chung197ea122024-05-03 19:57:55 +080069
Ed Tanouseed88bb2024-10-03 17:18:20 -070070json_c_dep = dependency('json-c', required: false)
71if not json_c_dep.found()
72 json_c = subproject('json-c', required: true, default_options: ['warning_level=0'])
73 json_c_dep = json_c.get_variable('json_c_dep')
74endif
John Chung197ea122024-05-03 19:57:55 +080075
John Chung197ea122024-05-03 19:57:55 +080076libcper_parse_sources = [
Ed Tanousa7d2cdd2024-07-15 11:07:27 -070077 'base64.c',
Ed Tanousa5b3d492024-06-18 13:24:05 -070078 'cper-parse.c',
79 'ir-parse.c',
80 'cper-utils.c',
81 'common-utils.c',
82 'json-schema.c',
John Chung197ea122024-05-03 19:57:55 +080083]
84
85libcper_include = ['.']
86
87libcper_parse = library(
Ed Tanousa5b3d492024-06-18 13:24:05 -070088 'cper-parse',
89 libcper_parse_sources,
Ed Tanousa84fc932024-07-15 13:48:35 -070090 section_sources,
91 edk_sources,
Ed Tanousa5b3d492024-06-18 13:24:05 -070092 version: meson.project_version(),
93 include_directories: include_directories(libcper_include),
94 c_args: '-Wno-address-of-packed-member',
95 dependencies: [
96 json_c_dep,
Ed Tanousa5b3d492024-06-18 13:24:05 -070097 ],
98 install: true,
99 install_dir: get_option('libdir'),
John Chung197ea122024-05-03 19:57:55 +0800100)
Karthik Rajagopalan9fe2cb52024-08-08 15:12:29 -0700101libcper_parse_dep = declare_dependency(
Ed Tanousa5b3d492024-06-18 13:24:05 -0700102 include_directories: include_directories(libcper_include),
103 link_with: libcper_parse,
John Chung197ea122024-05-03 19:57:55 +0800104)
105
Ed Tanousa5b3d492024-06-18 13:24:05 -0700106libcper_generate_sources = ['generator/cper-generate.c', 'generator/gen-utils.c', 'common-utils.c']
John Chung197ea122024-05-03 19:57:55 +0800107
108libcper_generate = library(
Ed Tanousa5b3d492024-06-18 13:24:05 -0700109 'cper-generate',
110 libcper_generate_sources,
Ed Tanousa84fc932024-07-15 13:48:35 -0700111 generator_section_sources,
Ed Tanousa5b3d492024-06-18 13:24:05 -0700112 version: meson.project_version(),
113 include_directories: include_directories(libcper_include),
114 dependencies: [
Karthik Rajagopalan9fe2cb52024-08-08 15:12:29 -0700115 libcper_parse_dep,
Ed Tanousa5b3d492024-06-18 13:24:05 -0700116 json_c_dep,
Ed Tanousa5b3d492024-06-18 13:24:05 -0700117 ],
118 install: true,
119 install_dir: get_option('libdir'),
John Chung197ea122024-05-03 19:57:55 +0800120)
Karthik Rajagopalan9fe2cb52024-08-08 15:12:29 -0700121libcper_generate_dep = declare_dependency(
Ed Tanousa5b3d492024-06-18 13:24:05 -0700122 include_directories: include_directories(libcper_include),
123 link_with: libcper_generate,
John Chung197ea122024-05-03 19:57:55 +0800124)
125
Karthik Rajagopalan9fe2cb52024-08-08 15:12:29 -0700126import('pkgconfig').generate(
127 libcper_parse,
128 name: meson.project_name(),
129 version: meson.project_version(),
130 description: 'C bindings for parsing CPER'
131)
132
John Chungabc62b82024-05-22 22:45:36 +0800133install_headers('cper-parse.h')
Karthik Rajagopalan5220c9b2024-08-08 00:24:44 -0700134install_headers('cper-parse-str.h')
John Chungabc62b82024-05-22 22:45:36 +0800135install_headers('cper-utils.h')
136install_headers('common-utils.h')
137install_headers('generator/cper-generate.h', subdir: 'generator')
138install_headers('edk/Cper.h', subdir: 'edk')
139install_headers('edk/BaseTypes.h', subdir: 'edk')
John Chung197ea122024-05-03 19:57:55 +0800140
John Chungabc62b82024-05-22 22:45:36 +0800141if get_option('utility').allowed()
Ed Tanousa5b3d492024-06-18 13:24:05 -0700142 executable(
143 'cper-convert',
144 'cli-app/cper-convert.c',
145 include_directories: include_directories(libcper_include),
146 dependencies: [
Karthik Rajagopalan9fe2cb52024-08-08 15:12:29 -0700147 libcper_parse_dep,
Ed Tanousa5b3d492024-06-18 13:24:05 -0700148 json_c_dep,
149 ],
150 install: true,
151 install_dir: get_option('bindir'),
152 )
John Chungabc62b82024-05-22 22:45:36 +0800153
Ed Tanousa5b3d492024-06-18 13:24:05 -0700154 executable(
155 'cper-generate',
156 'generator/cper-generate-cli.c',
Ed Tanousa84fc932024-07-15 13:48:35 -0700157 edk_sources,
Ed Tanousa5b3d492024-06-18 13:24:05 -0700158 include_directories: include_directories(libcper_include),
159 dependencies: [
Karthik Rajagopalan9fe2cb52024-08-08 15:12:29 -0700160 libcper_generate_dep,
Ed Tanousa5b3d492024-06-18 13:24:05 -0700161 ],
162 install: true,
163 install_dir: get_option('bindir'),
164 )
John Chungabc62b82024-05-22 22:45:36 +0800165endif
John Chung197ea122024-05-03 19:57:55 +0800166
John Chung197ea122024-05-03 19:57:55 +0800167if get_option('tests').allowed()
Ed Tanousa5b3d492024-06-18 13:24:05 -0700168 subdir('tests')
Karthik Rajagopalan5220c9b2024-08-08 00:24:44 -0700169endif