blob: 2f19d99381c73ef4f00ed40cdb8bd6870500ba73 [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
Andrew Adriance1a908982024-07-02 14:26:10 -070015library_is_share = get_option('default_library') == 'shared'
16
John Chung197ea122024-05-03 19:57:55 +080017project_description = 'libcper library'
18
Ed Tanousa84fc932024-07-15 13:48:35 -070019section_sources = files(
Ed Tanousa5b3d492024-06-18 13:24:05 -070020 'sections/cper-section-arm.c',
21 'sections/cper-section-ccix-per.c',
22 'sections/cper-section-cxl-component.c',
23 'sections/cper-section-cxl-protocol.c',
24 'sections/cper-section-dmar-generic.c',
25 'sections/cper-section-dmar-iommu.c',
26 'sections/cper-section-dmar-vtd.c',
27 'sections/cper-section-firmware.c',
28 'sections/cper-section-generic.c',
29 'sections/cper-section-ia32x64.c',
30 'sections/cper-section-ipf.c',
31 'sections/cper-section-memory.c',
32 'sections/cper-section-pci-bus.c',
33 'sections/cper-section-pci-dev.c',
34 'sections/cper-section-pcie.c',
35 'sections/cper-section.c',
John Chung197ea122024-05-03 19:57:55 +080036)
37
Ed Tanousa84fc932024-07-15 13:48:35 -070038edk_sources = files('edk/Cper.c')
John Chung197ea122024-05-03 19:57:55 +080039
Ed Tanousa84fc932024-07-15 13:48:35 -070040generator_section_sources = files(
Ed Tanousa5b3d492024-06-18 13:24:05 -070041 'generator/sections/gen-section-arm.c',
42 'generator/sections/gen-section-ccix-per.c',
43 'generator/sections/gen-section-cxl-component.c',
44 'generator/sections/gen-section-cxl-protocol.c',
45 'generator/sections/gen-section-dmar.c',
46 'generator/sections/gen-section-firmware.c',
47 'generator/sections/gen-section-generic.c',
48 'generator/sections/gen-section-ia32x64.c',
49 'generator/sections/gen-section-memory.c',
50 'generator/sections/gen-section-pci-bus.c',
51 'generator/sections/gen-section-pci-dev.c',
52 'generator/sections/gen-section-pcie.c',
53 'generator/sections/gen-section.c',
John Chung197ea122024-05-03 19:57:55 +080054)
55
John Chungabc62b82024-05-22 22:45:36 +080056cc = meson.get_compiler('c')
John Chung197ea122024-05-03 19:57:55 +080057
Ed Tanousa5b3d492024-06-18 13:24:05 -070058json_c_dep = dependency('json-c', required: true, fallback: ['json-c', 'json_c_dep'])
John Chung197ea122024-05-03 19:57:55 +080059
John Chung197ea122024-05-03 19:57:55 +080060libcper_parse_sources = [
Ed Tanousa7d2cdd2024-07-15 11:07:27 -070061 'base64.c',
Ed Tanousa5b3d492024-06-18 13:24:05 -070062 'cper-parse.c',
63 'ir-parse.c',
64 'cper-utils.c',
65 'common-utils.c',
66 'json-schema.c',
John Chung197ea122024-05-03 19:57:55 +080067]
68
69libcper_include = ['.']
70
71libcper_parse = library(
Ed Tanousa5b3d492024-06-18 13:24:05 -070072 'cper-parse',
73 libcper_parse_sources,
Ed Tanousa84fc932024-07-15 13:48:35 -070074 section_sources,
75 edk_sources,
Ed Tanousa5b3d492024-06-18 13:24:05 -070076 version: meson.project_version(),
77 include_directories: include_directories(libcper_include),
78 c_args: '-Wno-address-of-packed-member',
79 dependencies: [
80 json_c_dep,
Ed Tanousa5b3d492024-06-18 13:24:05 -070081 ],
82 install: true,
83 install_dir: get_option('libdir'),
John Chung197ea122024-05-03 19:57:55 +080084)
85libcper_parse = declare_dependency(
Ed Tanousa5b3d492024-06-18 13:24:05 -070086 include_directories: include_directories(libcper_include),
87 link_with: libcper_parse,
John Chung197ea122024-05-03 19:57:55 +080088)
89
Ed Tanousa5b3d492024-06-18 13:24:05 -070090libcper_generate_sources = ['generator/cper-generate.c', 'generator/gen-utils.c', 'common-utils.c']
John Chung197ea122024-05-03 19:57:55 +080091
92libcper_generate = library(
Ed Tanousa5b3d492024-06-18 13:24:05 -070093 'cper-generate',
94 libcper_generate_sources,
Ed Tanousa84fc932024-07-15 13:48:35 -070095 generator_section_sources,
Ed Tanousa5b3d492024-06-18 13:24:05 -070096 version: meson.project_version(),
97 include_directories: include_directories(libcper_include),
98 dependencies: [
99 libcper_parse,
100 json_c_dep,
Ed Tanousa5b3d492024-06-18 13:24:05 -0700101 ],
102 install: true,
103 install_dir: get_option('libdir'),
John Chung197ea122024-05-03 19:57:55 +0800104)
105libcper_generate = declare_dependency(
Ed Tanousa5b3d492024-06-18 13:24:05 -0700106 include_directories: include_directories(libcper_include),
107 link_with: libcper_generate,
John Chung197ea122024-05-03 19:57:55 +0800108)
109
John Chungabc62b82024-05-22 22:45:36 +0800110install_headers('cper-parse.h')
111install_headers('cper-utils.h')
112install_headers('common-utils.h')
113install_headers('generator/cper-generate.h', subdir: 'generator')
114install_headers('edk/Cper.h', subdir: 'edk')
115install_headers('edk/BaseTypes.h', subdir: 'edk')
John Chung197ea122024-05-03 19:57:55 +0800116
John Chungabc62b82024-05-22 22:45:36 +0800117if get_option('utility').allowed()
Ed Tanousa5b3d492024-06-18 13:24:05 -0700118 executable(
119 'cper-convert',
120 'cli-app/cper-convert.c',
121 include_directories: include_directories(libcper_include),
122 dependencies: [
123 libcper_parse,
124 json_c_dep,
125 ],
126 install: true,
127 install_dir: get_option('bindir'),
128 )
John Chungabc62b82024-05-22 22:45:36 +0800129
Ed Tanousa5b3d492024-06-18 13:24:05 -0700130 executable(
131 'cper-generate',
132 'generator/cper-generate-cli.c',
Ed Tanousa84fc932024-07-15 13:48:35 -0700133 edk_sources,
Ed Tanousa5b3d492024-06-18 13:24:05 -0700134 include_directories: include_directories(libcper_include),
135 dependencies: [
136 libcper_generate,
137 ],
138 install: true,
139 install_dir: get_option('bindir'),
140 )
John Chungabc62b82024-05-22 22:45:36 +0800141endif
John Chung197ea122024-05-03 19:57:55 +0800142
Ed Tanous1e267b62024-06-18 13:20:42 -0700143run_command('cp', '-r', 'specification/json/', meson.current_build_dir(), check: true)
Ed Tanousa5b3d492024-06-18 13:24:05 -0700144run_command(
145 'mv',
146 meson.current_build_dir() / 'json',
147 meson.current_build_dir() / 'specification',
148)
John Chung197ea122024-05-03 19:57:55 +0800149
150if get_option('tests').allowed()
Ed Tanousa5b3d492024-06-18 13:24:05 -0700151 subdir('tests')
John Chung197ea122024-05-03 19:57:55 +0800152endif