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