# async gpio monitor needs boost library
boost_args = ['-DBOOST_ASIO_DISABLE_THREADS',
              '-DBOOST_ERROR_CODE_HEADER_ONLY',
              '-DBOOST_SYSTEM_NO_DEPRECATED']

# dependency to link gpiod support
libgpiod = dependency('libgpiod', version : '>=1.4.1')

# get openpower-hw-diags build configuration
attn_conf = configuration_data()

# conditionally define ENABLE_PHAL_TRUE
if (get_option('phal').allowed())
    attn_conf.set('ENABLE_PHAL_TRUE', '')
else
    attn_conf.set('ENABLE_PHAL_TRUE', '#')
endif

# attention handler default config override
attn_conf.set('ATTN_CONFIG', get_option('attn_config'))

# install attention handler unit file
configure_file(
    configuration: attn_conf,
    input: 'attn_handler.service.in',
    output: 'attn_handler.service',
    install: true,
    install_dir:
        dependency('systemd').get_variable('systemdsystemunitdir')
)

# install attention handler config file
configure_file(
    configuration: attn_conf,
    input: 'attn_config.in',
    output: 'attn_config',
    install: true,
    install_dir: join_paths(get_option('sysconfdir'), 'default')
)

# Source files.
attn_src = files(
    'attention.cpp',
    'attn_common.cpp',
    'attn_config.cpp',
    'attn_dbus.cpp',
    'attn_dump.cpp',
    'attn_handler.cpp',
    'attn_logging.cpp',
    'attn_main.cpp',
    'attn_monitor.cpp',
    'bp_handler.cpp',
    'ti_handler.cpp',
    'vital_handler.cpp',
)

# for custom/raw PEL creation
pel_src = files(
    'pel/extended_user_header.cpp',
    'pel/pel_minimal.cpp',
    'pel/private_header.cpp',
    'pel/primary_src.cpp',
    'pel/user_header.cpp',
)

# Library dependencies.
attn_deps = [
    libgpiod,
    libpdbg_dep,
    sdbusplus_dep,
]

# conditional library dependencies
if get_option('phal').allowed()
  attn_deps += libphal_dep
endif

# Create static library.
attn_lib = static_library(
    'attn_lib',
    attn_src,
    pel_src,
    include_directories : incdir,
    dependencies : attn_deps,
    cpp_args : [boost_args],
    install : false,
)
