libpldm_sources = files('control.c', 'responder.c', 'utils.c')

subdir('dsp')

if get_option('transport')
    subdir('requester')
    subdir('transport')
endif

if get_option('oem').contains('ibm')
    subdir('oem/ibm')
endif

if get_option('oem').contains('meta')
    subdir('oem/meta')
endif

subdir('firmware_device')

libpldm_link_args = []
foreach alias : libpldm_deprecated_aliases
    libpldm_link_args += '-Wl,--defsym=@0@=@1@'.format(alias[0], alias[1])
endforeach

libpldm = library(
    'pldm',
    libpldm_sources,
    implicit_include_directories: false,
    include_directories: [libpldm_include_dir, include_directories('.')],
    link_args: libpldm_link_args,
    version: meson.project_version(),
    gnu_symbol_visibility: 'hidden',
    install: true,
)

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')
    c_suite = meson.get_compiler('c').get_id()
    cpp_suite = meson.get_compiler('cpp').get_id()

    if get_option('abi-compliance-check') 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,
                    '-mixed-headers',
                    '-include-paths',
                    meson.project_source_root() / 'src',
                    '-public-headers',
                    meson.project_source_root() / 'include',
                    '-sort',
                    '@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
