conf_data = configuration_data()
conf_data.set10('VALIDATION_UNSECURE_FEATURE', get_option('validate-unsecure-feature').enabled())
conf_data.set10('INSECURE_UNRESTRICTED_SENSOR_OVERRIDE', get_option('insecure-sensor-override').enabled())
conf_data.set10('NVMED_ENABLE_SINGLE_WOKER', get_option('single-worker').enabled())

metric_store_feature_map = {
    'disabled': 0,
    'static':  1,
    'dynamic':  2
}
metric_store_feature = metric_store_feature_map.get(get_option('metric-store'))
conf_data.set('METRIC_STORE_FEATURE', metric_store_feature)

conf_hdr = configure_file(input: 'dbus-sensor_config.h.in',
               output: 'dbus-sensor_config.h',
               configuration: conf_data)

thresholds_a = static_library(
    'thresholds_a',
    'Thresholds.cpp',
    dependencies: default_deps,
)

thresholds_dep = declare_dependency(
    link_with: [ thresholds_a ],
    dependencies: default_deps,
)

utils_a = static_library(
    'utils_a',
    [
        'FileHandle.cpp',
        'SensorPaths.cpp',
        'Utils.cpp',
    ],
    dependencies: default_deps,
)

utils_dep = declare_dependency(
    link_with: [ utils_a ],
    dependencies: [ sdbusplus, systemd ],
)

devicemgmt_a = static_library(
    'devicemgmt_a',
    [
        'DeviceMgmt.cpp',
    ],
    dependencies: default_deps,
)

devicemgmt_dep = declare_dependency(
    link_with: [ devicemgmt_a ],
    dependencies: default_deps,
)

pwmsensor_a = static_library(
    'pwmsensor_a',
    'PwmSensor.cpp',
    dependencies: [ default_deps, thresholds_dep ],
)

pwmsensor_dep = declare_dependency(
    link_with: [ pwmsensor_a ],
    dependencies: [ default_deps, thresholds_dep ],
)

peci_incdirs = []
if not meson.get_compiler('cpp').has_header('linux/peci-ioctl.h')
    peci_incdirs = ['../include']
endif

if get_option('intel-cpu').enabled()
    peci_dep = meson.get_compiler('cpp').find_library('libpeci', required : false)
    if not peci_dep.found()
      cmake = import('cmake')
      opt = cmake.subproject_options()
      opt.append_compile_args('c', '-Wno-pedantic')
      peci_proj = cmake.subproject('libpeci', options : opt)
      peci_dep = peci_proj.dependency('peci')
    endif
endif

if get_option('adc').enabled()
    executable(
        'adcsensor',
        'ADCSensor.cpp',
        'ADCSensorMain.cpp',
        dependencies: [
            default_deps,
            gpiodcxx,
            thresholds_dep,
            utils_dep,
        ],
        install: true,
    )
endif

if get_option('intel-cpu').enabled()
    executable(
        'intelcpusensor',
        'IntelCPUSensorMain.cpp',
        'IntelCPUSensor.cpp',
        dependencies: [
            default_deps,
            gpiodcxx,
            thresholds_dep,
            utils_dep,
            peci_dep,
        ],
        include_directories: peci_incdirs,
        install: true,
    )
endif

if get_option('exit-air').enabled()
    executable(
        'exitairtempsensor',
        'ExitAirTempSensor.cpp',
        dependencies: [
            default_deps,
            thresholds_dep,
            utils_dep,
        ],
        install: true,
    )
endif

if get_option('fan').enabled()
    executable(
        'fansensor',
        'FanMain.cpp',
        'TachSensor.cpp',
        'PwmSensor.cpp',
        dependencies: [
            default_deps,
            gpiodcxx,
            thresholds_dep,
            utils_dep,
        ],
        install: true,
    )
endif

if get_option('hwmon-temp').enabled()
    executable(
        'hwmontempsensor',
        'HwmonTempMain.cpp',
        'HwmonTempSensor.cpp',
        dependencies: [
            default_deps,
            devicemgmt_dep,
            thresholds_dep,
            utils_dep,
        ],
        install: true,
    )
endif

if get_option('intrusion').enabled()
    executable(
        'intrusionsensor',
        'ChassisIntrusionSensor.cpp',
        'IntrusionSensorMain.cpp',
        dependencies: [
            default_deps,
            gpiodcxx,
            i2c,
            utils_dep,
        ],
        install: true,
    )
endif

if get_option('ipmb').enabled()
    executable(
        'ipmbsensor',
        'IpmbSensor.cpp',
        'IpmbSDRSensor.cpp',
        dependencies: [
            default_deps,
            thresholds_dep,
            utils_dep,
        ],
        install: true,
    )
endif

if get_option('mcu').enabled()
    executable(
        'mcutempsensor',
        'MCUTempSensor.cpp',
        dependencies: [
            default_deps,
            i2c,
            thresholds_dep,
            utils_dep,
        ],
        install: true,
    )
endif

if get_option('nvme').enabled()
    nvme_srcs = files(
        'MctpEndpoint.cpp',
        'MctpReactorDevice.cpp',
        'NVMeSensorMain.cpp',
        'NVMeSensor.cpp',
        'NVMeBasic.cpp',
        'NVMeSubsys.cpp',
        'NVMeMi.cpp',
        'NVMeController.cpp',
        'NVMeProgress.cpp',
        'NVMeVolume.cpp',
        'NVMeDevice.cpp',
        'NVMeDrive.cpp',
        'NVMeError.cpp',
        'NVMeStorage.cpp',
        'NVMePlugin.cpp',
        'NVMeMetricStore.cpp',
        'NVMeFeatureStore.cpp',
    )

    pdi_dep = phosphor_dbus_interfaces_dep
    libnvme = dependency('libnvme', 
        required : true,
        fallback : ['libnvme', 'libnvme_dep'],
        include_type: 'system'
    )
    libnvme_mi = dependency('libnvme-mi', 
        required : true,
        fallback : ['libnvme', 'libnvme_mi_dep'],
        include_type: 'system'
    )

    nvme_deps = [ 
        default_deps, i2c, thresholds_dep, utils_dep, 
        threads, pdi_dep, libnvme, libnvme_mi,
        nvme_dbus_dep, nvme_proto_dep
    ]

    if get_option('nvme_shmem').enabled()
        nvme_deps += [
            absl_status_dep,
            shared_mem_dep
        ]
    endif

    cxx = meson.get_compiler('cpp')

    executable(
        'nvmesensor',
        sources: nvme_srcs,
        dependencies: nvme_deps,
        cpp_args: [
            '-frtti',
            '-DBOOST_ASIO_DISABLE_EPOLL',
            '-DBOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT',
            '-UBOOST_ASIO_NO_DEPRECATED',
            '-UBOOST_ASIO_DISABLE_THREADS',
            '-UBOOST_ASIO_HAS_IO_URING'
        ],
        link_args: cxx.get_id() == 'clang' ? ['-rdynamic'] : ['-export-dynamic'],
        install: true,
        include_directories: nvme_dbus_includes,
    )

    nvme_plugin_inc = include_directories('./')

    nvme_plugin_dep = declare_dependency(
        include_directories: nvme_plugin_inc,
        dependencies: [default_deps, nvme_dbus_dep, pdi_dep, libnvme_mi], 
    )

    pkgconfig = import('pkgconfig')
    pkgconfig.generate(
        name: 'nvme-plugin', 
        version: meson.project_version(), 
        description: 'nvmed plugin package',
        subdirs: ['.', 'gen', 'nvmed']
    )

    install_headers(
        'Utils.hpp',
        'NVMePlugin.hpp',
        'NVMeUtil.hpp',
        'VariantVisitors.hpp',
        conf_hdr,
        'SensorPaths.hpp',
        'Thresholds.hpp',
        'sensor.hpp',
        'NVMeSensor.hpp',
        'NVMeCache.hpp',
        'NVMeMetricStore.hpp',
        subdir: 'nvmed'
    )

endif

if get_option('psu').enabled()
    executable(
        'psusensor',
        'PSUEvent.cpp',
        'PSUSensor.cpp',
        'PSUSensorMain.cpp',
        dependencies: [
            default_deps,
            devicemgmt_dep,
            pwmsensor_dep,
            thresholds_dep,
            utils_dep,
        ],
        install: true,
    )
endif

if get_option('external').enabled()
    executable(
        'externalsensor',
        'ExternalSensor.cpp',
        'ExternalSensorMain.cpp',
        dependencies: [
            default_deps,
            thresholds_dep,
            utils_dep,
        ],
        install: true,
    )
endif
