Move to meson build configuration
cmake is Deprecated
Signed-off-by: John Chung <john.chung@arm.com>
Change-Id: I9d08b087828aa5a16f601785dcb7868704ec73a3
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..a379481
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,161 @@
+project(
+ 'libcper', ['c', 'cpp'],
+ version: '0.1',
+ meson_version: '>=1.1.1',
+ default_options: [
+ 'c_std=c18',
+ 'cpp_std=c++23',
+ 'tests=' + (meson.is_subproject() ? 'disabled' : 'enabled'),
+ 'werror=true',
+ 'warning_level=2',
+ ])
+
+project_description = 'libcper library'
+
+SectionSources = files(
+ 'sections/cper-section-arm.c',
+ 'sections/cper-section.c',
+ 'sections/cper-section-ccix-per.c',
+ 'sections/cper-section-cxl-component.c',
+ 'sections/cper-section-cxl-protocol.c',
+ 'sections/cper-section-dmar-generic.c',
+ 'sections/cper-section-dmar-iommu.c',
+ 'sections/cper-section-dmar-vtd.c',
+ 'sections/cper-section-firmware.c',
+ 'sections/cper-section-generic.c',
+ 'sections/cper-section-ia32x64.c',
+ 'sections/cper-section-ipf.c',
+ 'sections/cper-section-memory.c',
+ 'sections/cper-section-pci-bus.c',
+ 'sections/cper-section-pci-dev.c',
+ 'sections/cper-section-pcie.c'
+)
+
+EDKSources = files(
+ 'edk/Cper.c'
+)
+
+GeneratorSectionSources = files(
+ 'generator/sections/gen-section-arm.c',
+ 'generator/sections/gen-section.c',
+ 'generator/sections/gen-section-ccix-per.c',
+ 'generator/sections/gen-section-cxl-component.c',
+ 'generator/sections/gen-section-cxl-protocol.c',
+ 'generator/sections/gen-section-dmar.c',
+ 'generator/sections/gen-section-firmware.c',
+ 'generator/sections/gen-section-generic.c',
+ 'generator/sections/gen-section-ia32x64.c',
+ 'generator/sections/gen-section-memory.c',
+ 'generator/sections/gen-section-pci-bus.c',
+ 'generator/sections/gen-section-pci-dev.c',
+ 'generator/sections/gen-section-pcie.c'
+)
+
+cmake = import('cmake')
+
+json_c_dep = dependency(
+ 'json-c',
+ required: true,
+ fallback : ['json-c', 'json_c_dep'])
+
+libb64 = dependency('base64', required: false)
+if not libb64.found()
+ opt_var = cmake.subproject_options()
+ opt_var.add_cmake_defines({
+ 'BUILD_SHARED_LIBS': true,
+ 'BASE64_WITH_AVX': false,
+ 'BASE64_WITH_AVX2': false,
+ 'BASE64_WITH_AVX512': false,
+ 'BASE64_WITH_SSSE3': false,
+ 'BASE64_WITH_SSE41': false,
+ 'BASE64_WITH_SSE42': false})
+
+ libb64_ex = cmake.subproject('libb64', options: opt_var)
+ libb64 = libb64_ex.dependency('base64')
+endif
+
+libcper_parse_sources = [
+ 'cper-parse.c',
+ 'ir-parse.c',
+ 'cper-utils.c',
+ 'common-utils.c',
+ 'json-schema.c'
+]
+
+libcper_include = ['.']
+
+libcper_parse = library(
+ 'cper-parse',
+ libcper_parse_sources,
+ SectionSources,
+ EDKSources,
+ version: meson.project_version(),
+ include_directories:include_directories(libcper_include),
+ c_args: '-Wno-address-of-packed-member',
+ dependencies: [
+ json_c_dep,
+ libb64,
+ ],
+ install: true,
+ install_dir: get_option('libdir')
+)
+libcper_parse = declare_dependency(
+ include_directories: include_directories(libcper_include),
+ link_with: libcper_parse
+)
+
+
+libcper_generate_sources = [
+ 'generator/cper-generate.c',
+ 'generator/gen-utils.c',
+ 'common-utils.c'
+]
+
+libcper_generate = library(
+ 'cper-generate',
+ libcper_generate_sources,
+ GeneratorSectionSources,
+ version: meson.project_version(),
+ include_directories:include_directories(libcper_include),
+ dependencies: [
+ libcper_parse,
+ json_c_dep,
+ libb64,
+ ],
+ install: true,
+ install_dir: get_option('libdir')
+)
+libcper_generate = declare_dependency(
+ include_directories: include_directories(libcper_include),
+ link_with: libcper_generate
+)
+
+executable(
+ 'cper-convert',
+ 'cli-app/cper-convert.c',
+ include_directories:include_directories(libcper_include),
+ dependencies: [
+ libcper_parse,
+ json_c_dep,
+ ],
+ install: true
+)
+
+executable(
+ 'cper-generate',
+ 'generator/cper-generate-cli.c',
+ EDKSources,
+ include_directories:include_directories(libcper_include),
+ dependencies: [
+ libcper_generate,
+ ],
+ install: true
+)
+
+run_command('cp', '-r', 'specification/json/', meson.current_build_dir())
+run_command('mv', meson.current_build_dir() / 'json', meson.current_build_dir() / 'specification')
+
+if get_option('tests').allowed()
+ subdir('tests')
+endif
+