project(
    'openpower-pnor-code-mgmt',
    'cpp',
    default_options: [
        'warning_level=3',
        'werror=true',
        'cpp_std=c++20',
        'buildtype=debugoptimized',
        'b_ndebug=if-release',
        'b_lto=true',
    ],
    license: 'Apache-2.0',
    version: '1.0',
    meson_version: '>=0.57.0',
)

if(get_option('buildtype') == 'minsize')
    add_project_arguments('-DNDEBUG', language : 'cpp')
endif

# Disable lto when compiling with no optimization
if(get_option('optimization') == '0')
    add_project_arguments('-fno-lto', language: 'cpp')
    message('Disabling lto because optimization is disabled')
endif

cxx = meson.get_compiler('cpp')

extra_sources = []
extra_unit_files = []
extra_scripts = []

build_vpnor = get_option('vpnor').enabled()
build_verify_signature = get_option('verify-signature').enabled()

if not cxx.has_header('CLI/CLI.hpp')
      error('Could not find CLI.hpp')
endif

summary('building for device type', '@0@'.format(get_option('device-type')))
summary('building vpnor', build_vpnor)
summary('building signature verify', build_verify_signature)

subs = configuration_data()
subs.set_quoted('ACTIVATION_FWD_ASSOCIATION', 'inventory')
subs.set_quoted('ACTIVATION_REV_ASSOCIATION', 'activation')
subs.set_quoted('ACTIVE_FWD_ASSOCIATION', 'active')
subs.set('ACTIVE_PNOR_MAX_ALLOWED', 2)
subs.set_quoted('ACTIVE_REV_ASSOCIATION', 'software_version')
subs.set_quoted('ASSOCIATIONS_INTERFACE', 'xyz.openbmc_project.Association.Definitions')
subs.set_quoted('BUSNAME_UPDATER', 'org.open_power.Software.Host.Updater')
subs.set_quoted('CHASSIS_STATE_OBJ', 'xyz.openbmc_project.State.Chassis')
subs.set_quoted('CHASSIS_STATE_OFF', 'xyz.openbmc_project.State.Chassis.PowerState.Off')
subs.set_quoted('CHASSIS_STATE_PATH', '/xyz/openbmc_project/state/chassis0')
subs.set_quoted('FILEPATH_IFACE', 'xyz.openbmc_project.Common.FilePath')
subs.set_quoted('FUNCTIONAL_FWD_ASSOCIATION', 'functional')
subs.set_quoted('FUNCTIONAL_REV_ASSOCIATION', 'software_version')
subs.set_quoted('HASH_FILE_NAME', 'hashfunc')
subs.set_quoted('HOST_INVENTORY_PATH', '/xyz/openbmc_project/inventory/system/chassis')
subs.set_quoted('IMG_DIR', '/tmp/images')
subs.set_quoted('MANIFEST_FILE', 'MANIFEST')
subs.set_quoted('MAPPER_BUSNAME', 'xyz.openbmc_project.ObjectMapper')
subs.set_quoted('MAPPER_INTERFACE', 'xyz.openbmc_project.ObjectMapper')
subs.set_quoted('MAPPER_PATH', '/xyz/openbmc_project/object_mapper')
subs.set_quoted('MEDIA_DIR', '/media/')
subs.set('MMC_LAYOUT', get_option('device-type') == 'mmc')
subs.set_quoted('PERSIST_DIR', '/var/lib/obmc/openpower-pnor-code-mgmt/')
subs.set_quoted('PNOR_ACTIVE_PATH', '/var/lib/phosphor-software-manager/pnor/')
subs.set_quoted('PNOR_MSL', get_option('msl'))
subs.set_quoted('PNOR_PRSV', '/media/pnor-prsv')
subs.set_quoted('PNOR_PRSV_ACTIVE_PATH', '/var/lib/phosphor-software-manager/pnor/prsv')
subs.set_quoted('PNOR_RO_ACTIVE_PATH', '/var/lib/phosphor-software-manager/pnor/ro')
subs.set_quoted('PNOR_RO_PREFIX', '/media/pnor-ro-')
subs.set_quoted('PNOR_RW_ACTIVE_PATH', '/var/lib/phosphor-software-manager/pnor/rw')
subs.set_quoted('PNOR_RW_PREFIX', '/media/pnor-rw-')
subs.set_quoted('PNOR_SIGNED_IMAGE_CONF_PATH', '/etc/activationdata/')
subs.set_quoted('PNOR_TOC_FILE', 'pnor.toc')
subs.set_quoted('PNOR_VERSION_PARTITION', 'VERSION')
subs.set_quoted('PUBLICKEY_FILE_NAME', 'publickey')
subs.set_quoted('SIGNATURE_FILE_EXT', '.sig')
subs.set_quoted('SOFTWARE_OBJPATH', '/xyz/openbmc_project/software')
subs.set_quoted('SYSTEMD_BUSNAME', 'org.freedesktop.systemd1')
subs.set_quoted('SYSTEMD_INTERFACE', 'org.freedesktop.systemd1.Manager')
subs.set_quoted('SYSTEMD_PATH', '/org/freedesktop/systemd1')
subs.set_quoted('SYSTEMD_PROPERTY_INTERFACE', 'org.freedesktop.DBus.Properties')
subs.set('UBIFS_LAYOUT', get_option('device-type') == 'ubi')
subs.set_quoted('UPDATEABLE_FWD_ASSOCIATION', 'updateable')
subs.set_quoted('UPDATEABLE_REV_ASSOCIATION', 'software_version')
subs.set_quoted('VERSION_IFACE', 'xyz.openbmc_project.Software.Version')
subs.set('WANT_SIGNATURE_VERIFY', build_verify_signature)
configure_file(
    output: 'config.h',
    configuration: subs)

if get_option('device-type') == 'ubi'
    extra_sources += [
        'ubi/activation_ubi.cpp',
        'ubi/item_updater_ubi.cpp',
        'ubi/serialize.cpp',
        'ubi/watch.cpp',
    ]
    extra_scripts += [
        'ubi/obmc-flash-bios',
    ]
    extra_unit_files += [
        'ubi/obmc-flash-bios-cleanup.service',
        'ubi/obmc-flash-bios-ubiattach.service',
        'ubi/obmc-flash-bios-ubimount@.service',
        'ubi/obmc-flash-bios-ubipatch.service',
        'ubi/obmc-flash-bios-ubiremount.service',
        'ubi/obmc-flash-bios-ubiumount-ro@.service',
        'ubi/obmc-flash-bios-ubiumount-rw@.service',
    ]
endif

if get_option('device-type') == 'mmc'
    extra_sources += [
        'mmc/activation_mmc.cpp',
        'mmc/item_updater_mmc.cpp',
    ]
    extra_scripts += [
        'mmc/obmc-flash-bios',
    ]
    extra_unit_files += [
        'mmc/obmc-flash-bios-init.service',
        'mmc/obmc-flash-bios-patch.service',
        'mmc/openpower-process-host-firmware.service',
    ]
endif

if get_option('device-type') == 'static'
    extra_sources += [
        'static/item_updater_static.cpp',
        'static/activation_static.cpp',
    ]
    extra_unit_files += [
        'openpower-pnor-update@.service',
    ]
endif

if build_verify_signature
    extra_sources += [
        'image_verify.cpp'
    ]
endif

if build_vpnor
    extra_scripts += [
        'vpnor/obmc-vpnor-util',
    ]
    extra_unit_files += [
        'vpnor/obmc-vpnor-check-clearvolatile@.service',
        'vpnor/obmc-vpnor-enable-clearvolatile@.service',
        'vpnor/obmc-vpnor-updatesymlinks.service',
    ]
endif

executable(
    'openpower-update-manager',
    [
        'activation.cpp',
        'functions.cpp',
        'version.cpp',
        'item_updater.cpp',
        'item_updater_main.cpp',
        'utils.cpp',
    ] + extra_sources,
    dependencies: [
        dependency('libcrypto'),
        dependency('libsystemd'),
        dependency('openssl'),
        dependency('phosphor-dbus-interfaces'),
        dependency('phosphor-logging'),
        dependency('sdbusplus'),
        dependency('sdeventplus'),
    ],
    install: true
)

executable(
    'openpower-pnor-msl',
    [
        'msl_verify.cpp',
        'msl_verify_main.cpp',
    ],
    dependencies: [
        dependency('libsystemd'),
        dependency('phosphor-dbus-interfaces'),
        dependency('phosphor-logging'),
        dependency('sdbusplus'),
    ],
    install: true
)

foreach s : extra_scripts
    configure_file(
        input: s,
        copy: true,
        install: true,
        install_mode: 'rwxr-xr-x',
        install_dir: get_option('bindir'),
        output: '@BASENAME@'
    )
endforeach

unit_files = [
    'op-pnor-msl.service',
    'org.open_power.Software.Host.Updater.service',
] + extra_unit_files

systemd_system_unit_dir = dependency('systemd').get_variable(
    pkgconfig: 'systemdsystemunitdir',
    pkgconfig_define: ['prefix', get_option('prefix')])
foreach u : unit_files
    configure_file(
        input: u,
        copy: true,
        install: true,
        install_dir: systemd_system_unit_dir,
        output: '@BASENAME@.service'
    )
endforeach

dbus_system_bus_services_dir = dependency('dbus-1').get_variable(
    pkgconfig: 'system_bus_services_dir',
    pkgconfig_define: ['prefix', get_option('prefix')])
dbus_policy_dir = run_command(
    'realpath',
    join_paths(dbus_system_bus_services_dir, '..', 'system.d')).stdout().strip()

install_data(
    'dbus/org.open_power.Software.Host.Updater.conf',
    install_dir: dbus_policy_dir)

if not get_option('tests').disabled()
    oe_sdk = get_option('oe-sdk')
    if oe_sdk.enabled()
        # Setup OE SYSROOT
        OECORE_TARGET_SYSROOT = run_command('sh', '-c', 'echo $OECORE_TARGET_SYSROOT').stdout().strip()
        if OECORE_TARGET_SYSROOT == ''
            error('Unable to get $OECORE_TARGET_SYSROOT, check your environment.')
        endif
        message('OE_SYSROOT: ' + OECORE_TARGET_SYSROOT)
        rpath = ':'.join([OECORE_TARGET_SYSROOT + '/lib', OECORE_TARGET_SYSROOT + '/usr/lib'])
        ld_so = run_command('sh', '-c', 'find ' + OECORE_TARGET_SYSROOT + '/lib/ld-*.so | sort -r -n | head -n1').stdout().strip()
        dynamic_linker = ['-Wl,-dynamic-linker,' + ld_so]
    else
        dynamic_linker = []
    endif

    test(
        'utest',
        executable(
            'utest',
            'activation.cpp',
            'version.cpp',
            'item_updater.cpp',
            'image_verify.cpp',
            'utils.cpp',
            'msl_verify.cpp',
            'ubi/activation_ubi.cpp',
            'ubi/item_updater_ubi.cpp',
            'ubi/serialize.cpp',
            'ubi/watch.cpp',
            'static/item_updater_static.cpp',
            'static/activation_static.cpp',
            'test/test_signature.cpp',
            'test/test_version.cpp',
            'test/test_item_updater_static.cpp',
            'msl_verify.cpp',
            dependencies: [
                dependency('libcrypto'),
                dependency('gtest', main: true),
                dependency('openssl'),
                dependency('phosphor-logging'),
                dependency('phosphor-dbus-interfaces'),
            ],
            implicit_include_directories: false,
            include_directories: '.',
        )
    )
    test(
        'test_functions',
        executable(
            'test_functions',
            'test/test_functions.cpp',
            'functions.cpp',
            dependencies: [
                dependency('gtest', main: true),
                dependency('sdbusplus'),
                dependency('sdeventplus'),
            ],
        )
    )
endif
