# OpenBMC openpower-libhei project, see README.md for details.
project('openpower-libhei', 'cpp',
        version: '0.1', meson_version: '>=0.51.0',
        default_options: [
            'warning_level=3',
            'werror=true',
            'cpp_std=c++14',
       ])

#-------------------------------------------------------------------------------
# Versioning
#-------------------------------------------------------------------------------
buildinfo = vcs_tag(command: ['git', 'describe', '--always', '--long'],
                  input: 'buildinfo.hpp.in',
                  output: 'buildinfo.hpp',
                  replace_string:'@BUILDINFO@',
                  fallback: '0')

#-------------------------------------------------------------------------------
# libhei library
#-------------------------------------------------------------------------------

incdir = include_directories('src')

libhei_src = [
    'src/chip_data/hei_chip_data.cpp',
    'src/isolator/hei_isolator.cpp',
    'src/isolator/hei_isolation_chip.cpp',
    'src/isolator/hei_isolation_node.cpp',
    'src/register/hei_hardware_register.cpp',
    'src/util/hei_bit_string.cpp',
]

libhei_dep = declare_dependency(include_directories : incdir,
                                sources : [libhei_src, buildinfo])

# build static library libhei.a (note that the libray name is hei, the
# resulting filename will be libhei.a)
libhei_static = static_library('hei',
                                dependencies: libhei_dep,
                                install: true)

install_headers(
    'src/hei_buildinfo.hpp',
    'src/hei_chip.hpp',
    'src/hei_isolation_data.hpp',
    'src/hei_main.hpp',
    'src/hei_signature.hpp',
    'src/hei_types.hpp',
    'src/hei_user_interface.hpp',
    'src/hei_util.hpp',
    subdir : 'libhei'
)

install_headers(
    'src/util/hei_bit_string.hpp',
    'src/util/hei_flyweight.hpp',
    subdir : 'libhei/util'
)

pkg_mod = import('pkgconfig')

pkg_mod.generate(libraries : libhei_static,
                 version : '0.1',
                 name : 'libhei',
                 subdirs: 'libhei',
                 filebase : 'hei',
                 description : 'Openpower Hardware Error Isolator')

#-------------------------------------------------------------------------------
# Chip Data Files
#-------------------------------------------------------------------------------

subdir('chip_data')

#-------------------------------------------------------------------------------
# Test
#-------------------------------------------------------------------------------

build_tests = get_option('tests')

if not build_tests.disabled()
  subdir('test')
endif

