xref: /openbmc/libpldm/meson.build (revision d05ac25f8ee35d1f082ba21343ae8f053c24e46d)
1e984a461SAndrew Jefferyproject(
2e984a461SAndrew Jeffery    'libpldm',
3e984a461SAndrew Jeffery    'c',
4a93ec075SAndrew Jeffery    default_options: {
5a93ec075SAndrew Jeffery        'debug': true,
6a93ec075SAndrew Jeffery        'optimization': 'g',
7a93ec075SAndrew Jeffery        'warning_level': '3',
8a93ec075SAndrew Jeffery        'werror': true,
9a93ec075SAndrew Jeffery        'cpp_std': 'c++23',
10a93ec075SAndrew Jeffery        'c_std': 'c17',
11a93ec075SAndrew Jeffery        'b_ndebug': 'if-release',
1265c64099SAndrew Jeffery        'tests': not meson.is_subproject(),
13a93ec075SAndrew Jeffery    },
140612d988SAndrew Jeffery    version: '0.11.0',
15*d05ac25fSAndrew Jeffery    meson_version: '>=1.4.0',
169c766792SAndrew Jeffery)
179c766792SAndrew Jeffery
1865c64099SAndrew Jefferyif get_option('tests')
19fdc4dcc1SAndrew Jeffery    add_languages('cpp', native: false)
20aa16a0d9SAndrew Jefferyendif
21aa16a0d9SAndrew Jeffery
222b440d4cSAndrew Jeffery# For memmem() in src/msgbuf.h
232b440d4cSAndrew Jefferyadd_project_arguments('-D_GNU_SOURCE', language: ['c'])
249c766792SAndrew Jeffery
259d2a1c6aSAndrew Jefferycompiler = meson.get_compiler('c')
265c49f162SAndrew Jefferyif compiler.has_argument('-Wvla')
275c49f162SAndrew Jeffery    add_project_arguments('-Wvla', language: ['c'])
285c49f162SAndrew Jefferyendif
295c49f162SAndrew Jeffery
309d2a1c6aSAndrew Jefferyconf = configuration_data()
319d2a1c6aSAndrew Jefferyif compiler.has_header('poll.h')
329d2a1c6aSAndrew Jeffery    conf.set('PLDM_HAS_POLL', 1)
339d2a1c6aSAndrew Jefferyendif
349d2a1c6aSAndrew Jeffery
359d2a1c6aSAndrew Jeffery# ABI control
3636324f6bSAndrew Jefferycompiler.has_function_attribute('visibility:default', required: true)
3736324f6bSAndrew Jefferyentrypoint = '__attribute__((visibility("default")))'
3836324f6bSAndrew Jeffery
3936324f6bSAndrew Jeffery## Compile test until meson supports it via compiler.has_function_attribute()
4036324f6bSAndrew Jefferyhave_tainted_args_test = '#if !__has_attribute(tainted_args)\n#error\n#endif'
4136324f6bSAndrew Jefferyif compiler.compiles(
4236324f6bSAndrew Jeffery    have_tainted_args_test,
4336324f6bSAndrew Jeffery    args: '-E',
4436324f6bSAndrew Jeffery    name: 'compiler supports function attribute tainted_args',
4536324f6bSAndrew Jeffery)
4636324f6bSAndrew Jeffery    entrypoint += ' __attribute__((tainted_args))'
4736324f6bSAndrew Jefferyendif
4836324f6bSAndrew Jeffery
49d9b70ba7SAndrew Jefferylibpldm_deprecated_aliases = []
509d2a1c6aSAndrew Jefferyif get_option('abi').contains('deprecated')
5136324f6bSAndrew Jeffery    conf.set('LIBPLDM_ABI_DEPRECATED', entrypoint)
5236324f6bSAndrew Jeffery    conf.set(
5336324f6bSAndrew Jeffery        'LIBPLDM_ABI_DEPRECATED_UNSAFE',
5436324f6bSAndrew Jeffery        '__attribute((visibility("default")))',
5536324f6bSAndrew Jeffery    )
569d2a1c6aSAndrew Jeffery    add_project_arguments('-DLIBPLDM_API_DEPRECATED', language: ['c', 'cpp'])
579d2a1c6aSAndrew Jefferyelse
589d2a1c6aSAndrew Jeffery    conf.set('LIBPLDM_ABI_DEPRECATED', '')
599d2a1c6aSAndrew Jefferyendif
6036324f6bSAndrew Jefferyconf.set('LIBPLDM_ABI_STABLE', entrypoint)  # Always expose the stable symbols
619d2a1c6aSAndrew Jefferyif get_option('abi').contains('testing')
6236324f6bSAndrew Jeffery    conf.set('LIBPLDM_ABI_TESTING', entrypoint)
639d2a1c6aSAndrew Jeffery    add_project_arguments('-DLIBPLDM_API_TESTING', language: ['c', 'cpp'])
649d2a1c6aSAndrew Jefferyelse
659d2a1c6aSAndrew Jeffery    conf.set('LIBPLDM_ABI_TESTING', '')
669d2a1c6aSAndrew Jefferyendif
679d2a1c6aSAndrew Jeffery
68e984a461SAndrew Jefferyconfig = configure_file(output: 'config.h', configuration: conf)
69f89befe3SAndrew Jeffery
70*d05ac25fSAndrew Jefferyadd_project_arguments('-include', config.full_path(), language: 'c')
71f89befe3SAndrew Jeffery
72b0c1d20aSAndrew Jefferylibpldm_include_dir = include_directories('include', is_system: true)
73a7989cd6SPavithra Barithaya
74b0c1d20aSAndrew Jefferysubdir('include')
75b0c1d20aSAndrew Jefferysubdir('src')
769c766792SAndrew Jeffery
7765c64099SAndrew Jefferyif get_option('tests')
789c766792SAndrew Jeffery    subdir('tests')
799c766792SAndrew Jefferyendif
806af2a293SRashmica Gupta
81e984a461SAndrew Jefferyinstall_subdir(
82e984a461SAndrew Jeffery    'instance-db',
836af2a293SRashmica Gupta    install_mode: 'r--r--r--',
84e984a461SAndrew Jeffery    install_dir: get_option('datadir') / meson.project_name(),
85e984a461SAndrew Jeffery)
86