1project('libpldm', ['c','cpp'], 2 default_options: [ 3 'debug=true', 4 'optimization=g', 5 'warning_level=3', 6 'werror=true', 7 'cpp_std=c++20', 8 'c_std=c17', 9 'b_ndebug=if-release', 10 'tests=' + (meson.is_subproject() ? 'disabled' : 'enabled'), 11 ], 12 version: '0.7.0', 13 meson_version: '>=1.1.0', 14) 15 16add_project_arguments('-D_DEFAULT_SOURCE', language: ['c']) 17 18compiler = meson.get_compiler('c') 19conf = configuration_data() 20if compiler.has_header('poll.h') 21 conf.set('PLDM_HAS_POLL', 1) 22endif 23 24# ABI control 25visible = '__attribute__((visibility("default")))' 26if get_option('abi').contains('deprecated') 27 conf.set('LIBPLDM_ABI_DEPRECATED', visible) 28 add_project_arguments('-DLIBPLDM_API_DEPRECATED', language: ['c', 'cpp']) 29else 30 conf.set('LIBPLDM_ABI_DEPRECATED', '') 31endif 32conf.set('LIBPLDM_ABI_STABLE', visible) # Always expose the stable symbols 33if get_option('abi').contains('testing') 34 conf.set('LIBPLDM_ABI_TESTING', visible) 35 add_project_arguments('-DLIBPLDM_API_TESTING', language: ['c', 'cpp']) 36else 37 conf.set('LIBPLDM_ABI_TESTING', '') 38endif 39 40config = configure_file(output: 'config.h', 41 configuration: conf 42) 43 44add_project_arguments('-include', '@0@'.format(config), language: 'c') 45 46libpldm_include_dir = include_directories('include', is_system: true) 47libpldm_headers = files() 48libpldm_transport_headers = files() 49subdir('include') 50 51libpldm_sources = files() 52subdir('src') 53 54libpldm = library( 55 'pldm', 56 libpldm_sources, 57 implicit_include_directories: false, 58 include_directories: [ 59 libpldm_include_dir, 60 include_directories('src') 61 ], 62 version: meson.project_version(), 63 gnu_symbol_visibility: 'hidden', 64 install: true 65 ) 66 67install_headers( 68 libpldm_headers, 69 subdir:'libpldm' 70 ) 71 72install_headers( 73 libpldm_transport_headers, 74 subdir:'libpldm/transport' 75 ) 76 77libpldm_dep = declare_dependency( 78 include_directories: libpldm_include_dir 79, 80 link_with: libpldm) 81 82import('pkgconfig').generate( 83 name: 'libpldm', 84 description: 'PLDM protocol encode/decode C lib', 85 version: meson.project_version(), 86 libraries: libpldm) 87 88if get_option('tests').enabled() 89 subdir('tests') 90 91 c_suite = meson.get_compiler('c').get_id() 92 cpp_suite = meson.get_compiler('cpp').get_id() 93 94 if get_option('abi-compliance-check').allowed() and c_suite == cpp_suite and c_suite == 'gcc' 95 host = host_machine.cpu_family() 96 baseline_dump = meson.project_source_root() / 'abi' / host / '@0@.dump'.format(c_suite) 97 98 abi_dumper = find_program('abi-dumper', 99 native: true, 100 required: get_option('abi-compliance-check')) 101 abi_compliance_checker = find_program('abi-compliance-checker', 102 native: true, 103 required: get_option('abi-compliance-check')) 104 105 test_abi_compliance = abi_dumper.found() and \ 106 abi_compliance_checker.found() and \ 107 import('fs').is_file(baseline_dump) 108 109 if test_abi_compliance 110 current_dump = custom_target('abi-dump', 111 input: libpldm, 112 output: 'current.dump', 113 command: [ abi_dumper, 114 '-public-headers', 115 meson.project_source_root() / 'include', 116 '@INPUT@', 117 '-o', 118 '@OUTPUT@', 119 '-lver', 120 meson.project_version()]) 121 abi_compliance = custom_target('abi-compliance', 122 input: [baseline_dump, current_dump], 123 output: 'abi-compliance', 124 command: [ abi_compliance_checker, 125 '-l', 126 meson.project_name(), 127 '-old', 128 '@INPUT0@', 129 '-new', 130 '@INPUT1@' ], 131 build_by_default: true) 132 endif 133 endif 134endif 135 136install_subdir('instance-db', 137 install_mode: 'r--r--r--', 138 install_dir: get_option('datadir') / meson.project_name()) 139