blob: cc58516ae77d76f0cbb4f225e3086a911eef45bb [file] [log] [blame]
project('libpldm', ['c','cpp'],
default_options: [
'debug=true',
'optimization=g',
'warning_level=3',
'werror=true',
'cpp_std=c++20',
'c_std=c17',
'b_ndebug=if-release',
'tests=' + (meson.is_subproject() ? 'disabled' : 'enabled'),
],
version: '0.6.0',
meson_version: '>=1.1.0',
)
add_project_arguments('-D_DEFAULT_SOURCE', language: ['c'])
compiler = meson.get_compiler('c')
conf = configuration_data()
if compiler.has_header('poll.h')
conf.set('PLDM_HAS_POLL', 1)
endif
# ABI control
visible = '__attribute__((visibility("default")))'
if get_option('abi').contains('deprecated')
conf.set('LIBPLDM_ABI_DEPRECATED', visible)
add_project_arguments('-DLIBPLDM_API_DEPRECATED', language: ['c', 'cpp'])
else
conf.set('LIBPLDM_ABI_DEPRECATED', '')
endif
conf.set('LIBPLDM_ABI_STABLE', visible) # Always expose the stable symbols
if get_option('abi').contains('testing')
conf.set('LIBPLDM_ABI_TESTING', visible)
add_project_arguments('-DLIBPLDM_API_TESTING', language: ['c', 'cpp'])
else
conf.set('LIBPLDM_ABI_TESTING', '')
endif
config = configure_file(output: 'config.h',
configuration: conf
)
add_project_arguments('-include', '@0@'.format(config), language: 'c')
libpldm_sources = files()
subdir('src')
libpldm_include_dir = ['.', 'include', 'src']
libpldm_headers = files()
libpldm_transport_headers = files()
subdir('include/libpldm')
libpldm = library(
'pldm',
libpldm_sources,
implicit_include_directories: false,
include_directories: libpldm_include_dir,
version: meson.project_version(),
gnu_symbol_visibility: 'hidden',
install: true
)
install_headers(
libpldm_headers,
subdir:'libpldm'
)
install_headers(
libpldm_transport_headers,
subdir:'libpldm/transport'
)
libpldm_dep = declare_dependency(
include_directories: libpldm_include_dir,
link_with: libpldm)
import('pkgconfig').generate(
name: 'libpldm',
description: 'PLDM protocol encode/decode C lib',
version: meson.project_version(),
libraries: libpldm)
if get_option('tests').enabled()
subdir('tests')
c_suite = meson.get_compiler('c').get_id()
cpp_suite = meson.get_compiler('cpp').get_id()
if get_option('abi-compliance-check').allowed() and c_suite == cpp_suite and c_suite == 'gcc'
host = host_machine.cpu_family()
baseline_dump = meson.project_source_root() / 'abi' / host / '@0@.dump'.format(c_suite)
abi_dumper = find_program('abi-dumper',
native: true,
required: get_option('abi-compliance-check'))
abi_compliance_checker = find_program('abi-compliance-checker',
native: true,
required: get_option('abi-compliance-check'))
test_abi_compliance = abi_dumper.found() and \
abi_compliance_checker.found() and \
import('fs').is_file(baseline_dump)
if test_abi_compliance
current_dump = custom_target('abi-dump',
input: libpldm,
output: 'current.dump',
command: [ abi_dumper,
'-public-headers',
meson.project_source_root() / 'include',
'@INPUT@',
'-o',
'@OUTPUT@',
'-lver',
meson.project_version()])
abi_compliance = custom_target('abi-compliance',
input: [baseline_dump, current_dump],
output: 'abi-compliance',
command: [ abi_compliance_checker,
'-l',
meson.project_name(),
'-old',
'@INPUT0@',
'-new',
'@INPUT1@' ],
build_by_default: true)
endif
endif
endif
install_subdir('instance-db',
install_mode: 'r--r--r--',
install_dir: get_option('datadir') / meson.project_name())