project('bmcweb', 'cpp',
        version : '1.0',
        meson_version: '>=1.1.1',
        default_options: [
            'b_lto_mode=default',
            'b_lto_threads=0',
            'b_lto=true',
            'b_ndebug=if-release',
            'buildtype=debugoptimized',
            'cpp_std=c++23',
            'warning_level=3',
            'werror=true',
           ])

cxx = meson.get_compiler('cpp')

add_project_arguments('-Wno-overloaded-virtual', language : 'cpp')

if get_option('mtls-grpc').enabled()
  # For JWT-CPP
  add_project_arguments('-DJWT_DISABLE_PICOJSON', language : 'cpp')

  # Build time is spent linking. Making pattern_to_entity_array constexpr fixes the problem but
  # requires this compile flag to increase the constexpr limit
  if (cxx.get_id() == 'gcc' and cxx.version().version_compare('>8.0'))
    add_project_arguments('-fconstexpr-ops-limit=4294967295', language : 'cpp')
  endif
  if (cxx.get_id() == 'clang' and cxx.version().version_compare('>9.0'))
    add_project_arguments('-fconstexpr-steps=4294967295', language : 'cpp')
    add_project_arguments('-fclang-abi-compat=17', language : 'cpp')
  endif
endif

# Project related links
if (not get_option('plugins-headers').enabled())
  project_pretty_name = 'bmcweb'
  project_url = 'https://github.com/openbmc/' + project_pretty_name
  project_issues_url = project_url + '/issues/new'
  summary('Issues',project_issues_url, section: 'Report Issues')

  # Get compiler and default build type

  cxx = meson.get_compiler('cpp')
  build = get_option('buildtype')
  optimization = get_option('optimization')
  summary('Build Type',build, section : 'Build Info')
  summary('Optimization',optimization, section : 'Build Info')


  # remove debug information for minsize buildtype
  if(get_option('buildtype') == 'minsize')
    add_project_arguments(['-fdata-sections', '-ffunction-sections'], language : 'cpp')
    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 & its supported features as optimization is disabled')
  endif

  # Include Directories

  incdir = include_directories(
    '.',
    'tlbmc',
    'include',
    'plugins',
    'devpath_plugin',
    'redfish-core/include',
    'redfish-core/include/utils',
    'redfish-core/lib',
    'http',
    'g3',
    'redfish_authorization',
  )

  # Get the options and enable the respective features
  ## create a MAP of  "options : feature_flag"

  feature_map = {
    'basic-auth'                                  : '-DBMCWEB_ENABLE_BASIC_AUTHENTICATION',
    'cookie-auth'                                 : '-DBMCWEB_ENABLE_COOKIE_AUTHENTICATION',
    'google-api'                                  : '-DBMCWEB_ENABLE_GOOGLE_API',
    'health-populate'                             : '-DHEALTH_POPULATE',
    'insecure-disable-auth'                       : '-DBMCWEB_INSECURE_DISABLE_AUTHX',
    'insecure-disable-csrf'                       : '-DBMCWEB_INSECURE_DISABLE_CSRF_PREVENTION',
    'insecure-disable-ssl'                        : '-DBMCWEB_INSECURE_DISABLE_SSL',
    'insecure-push-style-notification'            : '-DBMCWEB_INSECURE_ENABLE_HTTP_PUSH_STYLE_EVENTING',
    'insecure-tftp-update'                        : '-DBMCWEB_INSECURE_ENABLE_REDFISH_FW_TFTP_UPDATE',
    'insecure-ignore-content-type'                : '-DBMCWEB_INSECURE_IGNORE_CONTENT_TYPE',
    'mutual-tls-auth'                             : '-DBMCWEB_ENABLE_MUTUAL_TLS_AUTHENTICATION',
    'redfish-aggregation'                         : '-DBMCWEB_ENABLE_REDFISH_AGGREGATION',
    'redfish-allow-deprecated-power-thermal'      : '-DBMCWEB_ALLOW_DEPRECATED_POWER_THERMAL',
    'redfish-bmc-journal'                         : '-DBMCWEB_ENABLE_REDFISH_BMC_JOURNAL',
    'enable-redfish-system-bootnumber'            : '-DBMCWEB_ENABLE_REDFISH_SYSTEM_BOOTNUMBER',
    'redfish-cpu-log'                             : '-DBMCWEB_ENABLE_REDFISH_CPU_LOG',
    'redfish-dbus-log'                            : '-DBMCWEB_ENABLE_REDFISH_DBUS_LOG_ENTRIES',
    'redfish-dump-log'                            : '-DBMCWEB_ENABLE_REDFISH_DUMP_LOG',
    'redfish-external-storer'                     : '-DBMCWEB_ENABLE_REDFISH_EXTERNAL_STORER',
    'redfish-event-log'                           : '-DBMCWEB_ENABLE_REDFISH_EVENT_LOG',
    'redfish-host-logger'                         : '-DBMCWEB_ENABLE_REDFISH_HOST_LOGGER',
    'redfish-host-cper-log'                       : '-DBMCWEB_ENABLE_REDFISH_HOST_CPER_LOG',
    'redfish-ppr'                                 : '-DBMCWEB_ENABLE_PPR',
    'redfish-rasmanager-log'                      : '-DBMCWEB_ENABLE_RASMANAGER_EVENT_LOG',
    'redfish-iliad-log'                           : '-DBMCWEB_ENABLE_ILIAD_EVENT_LOG',
    'redfish-system-fault-log'                    : '-DBMCWEB_ENABLE_REDFISH_SYSTEM_FAULT_LOG',
    'redfish-new-powersubsystem-thermalsubsystem' : '-DBMCWEB_NEW_POWERSUBSYSTEM_THERMALSUBSYSTEM',
    'redfish-oem-manager-fan-data'                : '-DBMCWEB_ENABLE_REDFISH_OEM_MANAGER_FAN_DATA',
    'redfish-provisioning-feature'                : '-DBMCWEB_ENABLE_REDFISH_PROVISIONING_FEATURE',
    'redfish-post-to-old-updateservice'           : '-DBMCWEB_ENABLE_REDFISH_UPDATESERVICE_OLD_POST_URL',
    'redfish'                                     : '-DBMCWEB_ENABLE_REDFISH',
    'rest'                                        : '-DBMCWEB_ENABLE_DBUS_REST',
    'session-auth'                                : '-DBMCWEB_ENABLE_SESSION_AUTHENTICATION',
    'static-hosting'                              : '-DBMCWEB_ENABLE_STATIC_HOSTING',
    'xtoken-auth'                                 : '-DBMCWEB_ENABLE_XTOKEN_AUTHENTICATION',
    'platform-plugins'                            : '-DPLATFORM_PLUGINS_ENABLED',
    'google-common-plugins'                       : '-DGOOGLE_COMMON_PLUGINS_ENABLED',
    'google-plugins-internal'                     : '-DGOOGLE_PLUGINS_INTERNAL_ENABLED',
    'efficient-expand-memory'                     : '-DEFFICIENT_EXPAND_MEMORY_ENABLED',
    'efficient-expand-processors'                 : '-DEFFICIENT_EXPAND_PROCESSORS_ENABLED',
    'efficient-expand-sensors'                    : '-DEFFICIENT_EXPAND_SENSORS_ENABLED',
    'loas3-validation'                            : '-DENABLE_LOAS3_VALIDATION',
    'redfish-boot-time-log'                       : '-DBMCWEB_ENABLE_REDFISH_BOOT_TIME_LOG',
    'redfish-boot-time'                           : '-DBMCWEB_ENABLE_REDFISH_BOOT_TIME',
    'fii-update-service'                          : '-DENABLE_FII_UPDATE_SERVICE',
    'system-log-reverse'                          : '-DENABLE_SYSTEM_LOG_REVERSE',
    'really-graceful-shutdown'                    : '-DBMCWEB_ENABLE_REALLY_GRACEFUL_SHUTDOWN',
    'enable-standby-offline'                      : '-DBMCWEB_ENABLE_STANDBY_OFFLINE',
    'enable-configure-core-count'                 : '-DENABLE_CONFIGURE_CORE_COUNT',
    'enable-configure-memory-capacity'            : '-DENABLE_CONFIGURE_MEMORY_CAPACITY',
    'redfish-configure-ifs'                       : '-DENABLE_REDFISH_CONFIGURE_IFS',
    'allow-arbitrary-command-to-rot'             : '-DBMCWEB_ENABLE_ALLOW_ARBITRARY_COMMAND_TO_ROT',
  }

  # gRPC Features
  feature_map += {'mtls-grpc' : '-DBMCWEB_ENABLE_GRPC'}
  feature_map += {'insecure-grpc' : '-DBMCWEB_ENABLE_INSECURE_GRPC'}


  # stateful-bmcweb feature
  feature_map += {'stateful-bmcweb' : '-DBMCWEB_ENABLE_STATEFUL_BMCWEB'}

  # AMD bmcweb feature
  feature_map += {'amd' : '-DBMCWEB_ENABLE_AMD'}

  # RDE-device feature
  feature_map += {'rde-device': '-DBMCWEB_ENABLE_RDE_DEVICE'}

  # CPER and Crashdump EntryID use FaultLogID
  feature_map += {'cper-crashdump-use-faultlog-id': '-DBMCWEB_ENABLE_CPER_CRASHDUMP_USE_FAULTLOG_ID'}

  # Allow non-hardcoded single-host system name
  feature_map += {'allow-non-hardcoded-singlehost-system': '-DBMCWEB_ALLOW_NON_HARDCODED_SINGLEHOST_SYSTEM'}

  # Get the options status and build a project summary to show which flags are
  # being enabled during the configuration time.

  foreach option_key,option_value : feature_map
    if(get_option(option_key).enabled())
      if(option_key == 'mutual-tls-auth' or option_key == 'insecure-disable-ssl')
        if(get_option('insecure-disable-ssl').disabled() or get_option('mutual-tls-auth').disabled())
          add_project_arguments(option_value,language:'cpp')
          summary(option_key,option_value, section : 'Enabled Features')
        endif
      elif (option_key in ['basic-auth', 'cookie-auth', 'session-auth', 'xtoken-auth', 'mutual-tls-auth'])
        if (get_option('insecure-disable-auth').disabled())
          add_project_arguments(option_value, language:'cpp')
          summary(option_key,option_value, section : 'Enabled Features')
        endif
      else
        summary(option_key,option_value, section : 'Enabled Features')
        add_project_arguments(option_value,language:'cpp')
      endif
    else
        if(option_key == 'insecure-disable-ssl')
          summary('ssl','-DBMCWEB_ENABLE_SSL', section : 'Enabled Features')
          add_project_arguments('-DBMCWEB_ENABLE_SSL', language : 'cpp')
        endif
    endif
  endforeach

  if(get_option('tests').enabled())
    summary('unittest','NA', section : 'Enabled Features')
    add_project_arguments('-DUNIT_TEST_BUILD', language : 'cpp')
  endif

  # Add compiler arguments

  # -Wpedantic, -Wextra comes by default with warning level
  add_project_arguments(
    cxx.get_supported_arguments([
    '-Wcast-align',
    '-Wformat=2',
    '-Wold-style-cast',
    '-Wsign-conversion',
    '-Wunused',
    '-Wno-attributes',
    '-Wno-shadow',
    ]),
    language: 'cpp'
  )

  if (cxx.get_id() == 'clang' and cxx.version().version_compare('>9.0'))
  add_project_arguments(
    cxx.get_supported_arguments([
      '-Wno-c++98-compat-pedantic',
      '-Wno-c++98-compat',
      '-Wno-documentation-unknown-command',
      '-Wno-documentation',
      '-Wno-exit-time-destructors',
      '-Wno-global-constructors',
      '-Wno-newline-eof',
      '-Wno-padded',
      '-Wno-used-but-marked-unused',
      '-Wno-weak-vtables',
      '-Wno-switch-enum',
      '-Wno-unused-parameter', # Flags when params are actually used
    ]),
    language:'cpp')
  endif

  # if compiler is gnu-gcc , and version is > 8.0 then we add few more
  # compiler arguments , we know that will pass

  if (cxx.get_id() == 'gcc' and cxx.version().version_compare('>8.0'))
    add_project_arguments(
      cxx.get_supported_arguments([
       '-Wduplicated-cond',
       '-Wduplicated-branches',
       '-Wlogical-op',
       '-Wnull-dereference',
       '-Wunused-parameter',
       '-Wdouble-promotion',
       '-Wno-psabi',
       '-Wno-stringop-overflow',
       ]),
      language:'cpp')
    add_project_link_arguments(
      cxx.get_supported_link_arguments([
       '-Wno-stringop-overflow',
       ]),
      language:'cpp')
  endif

  if (get_option('buildtype') != 'plain')
    if (get_option('b_lto') == true and get_option('optimization')!='0')
      # Reduce the binary size by removing unnecessary
      # dynamic symbol table entries

      add_project_arguments(
       cxx.get_supported_arguments([
       '-fno-fat-lto-objects',
       '-fvisibility=hidden',
       '-fvisibility-inlines-hidden'
       ]),
       language: 'cpp')

      if cxx.has_link_argument('-Wl,--exclude-libs,ALL')
        add_project_link_arguments('-Wl,--exclude-libs,ALL', language: 'cpp')
      endif
    endif
  endif

  if( get_option('bmcweb-logging').enabled() or \
      get_option('buildtype').startswith('debug'))
   add_project_arguments([
     '-DBMCWEB_ENABLE_LOGGING',
     '-DBMCWEB_ENABLE_DEBUG'
     ],
    language : 'cpp')

    summary({'debug' :'-DBMCWEB_ENABLE_DEBUG',
       'logging' : '-DBMCWEB_ENABLE_LOGGING',

      },section : 'Enabled Features')
  endif

  # Set Compiler Security flags

  security_flags = [
    '-fstack-protector-strong',
    '-fPIE',
    '-fPIC',
    '-D_FORTIFY_SOURCE=2',
    '-Wformat',
    '-Wformat-security'
  ]

  ## Add security flags for builds of type 'release','debugoptimized' and 'minsize'

  if not (get_option('buildtype') == 'plain' or get_option('buildtype').startswith('debug'))
    add_project_arguments(
     cxx.get_supported_arguments([
      security_flags
    ]),
    language: 'cpp')
  endif

  #  dependency configuration

  add_project_arguments(
  cxx.get_supported_arguments([
    '-DBOOST_ALL_NO_LIB',
    '-DBOOST_ALLOW_DEPRECATED_HEADERS',
    '-DBOOST_ASIO_SEPARATE_COMPILATION',
    '-DBOOST_BEAST_SEPARATE_COMPILATION',
    '-DBOOST_URL_NO_SOURCE_LOCATION',
    '-DBOOST_SYSTEM_NO_DEPRECATED',
    '-DBOOST_ERROR_CODE_HEADER_ONLY',
    '-DBOOST_ASIO_HAS_FILE',
    '-DBOOST_ASIO_HAS_IO_URING',
    '-DJSON_NOEXCEPTION',
    '-DOPENSSL_NO_FILENAMES',
  ]),
  language : 'cpp')

  # Find the dependency modules, if not found use meson wrap to get them
  # automatically during the configure step
  bmcweb_dependencies = []

  pam = cxx.find_library('pam', required: true)
  atomic =  cxx.find_library('atomic', required: true)
  openssl = dependency('openssl', required : true, version : '>=3.0.1')
  bmcweb_dependencies += [pam, atomic, openssl]

  sdbusplus = dependency('sdbusplus', required : false, include_type: 'system')
  if not sdbusplus.found()
    sdbusplus_proj = subproject('sdbusplus', required: true)
    sdbusplus = sdbusplus_proj.get_variable('sdbusplus_dep')
    sdbusplus = sdbusplus.as_system('system')
  endif
  bmcweb_dependencies += sdbusplus

  tinyxml = dependency('tinyxml2',
      default_options: ['tests=false'],
      include_type: 'system',
  )
  bmcweb_dependencies += tinyxml

  systemd = dependency('systemd')
  zlib = dependency('zlib')
  re2 = dependency('re2')
  bmcweb_dependencies += [systemd, zlib, re2]

  if cxx.has_header('nlohmann/json.hpp')
      nlohmann_json = declare_dependency()
  else
      nlohmann_json_proj = subproject('nlohmann', required: true)
      nlohmann_json = nlohmann_json_proj.get_variable('nlohmann_json_dep')
      nlohmann_json = nlohmann_json.as_system('system')
  endif
  bmcweb_dependencies += nlohmann_json

  boost = dependency('boost', modules: ['url', 'filesystem'], version : '>=1.82.0', required : false, include_type: 'system')
  if boost.found()
    bmcweb_dependencies += [boost]
  else
    cmake = import('cmake')
    opt = cmake.subproject_options()
    opt.set_override_option(
      'werror',
      'false',
    )
    opt.set_override_option(
      'warning_level',
      '0',
    )
    boost = cmake.subproject('boost', required: true, options: opt)
    boost_url = boost.dependency('boost_url', include_type: 'system')
    boost_headers = boost.dependency('boost_headers', include_type: 'system')
    boost_beast = boost.dependency('boost_beast', include_type: 'system')
    boost_callable_traits = boost.dependency('boost_callable_traits', include_type: 'system')
    boost_contract = boost.dependency('boost_contract', include_type: 'system')
    boost_compute = boost.dependency('boost_compute', include_type: 'system')
    boost_process = boost.dependency('boost_process', include_type: 'system')
    bmcweb_dependencies += [
      boost_url,
      boost_headers,
      boost_beast,
      boost_callable_traits,
      boost_contract,
      boost_compute,
      boost_process,
    ]
  endif

  if get_option('tests').enabled()
    gtest = dependency('gtest', main: true,disabler: true, required : false)
    gmock = dependency('gmock', required : false)
    if not gtest.found() and get_option('tests').enabled()
      gtest_proj = subproject('gtest', required: true)
      gtest = gtest_proj.get_variable('gtest_main_dep')
      gmock = gtest_proj.get_variable('gmock_dep')
    endif
    gtest = gtest.as_system('system')
    gmock = gmock.as_system('system')
  endif

  systemd_system_unit_dir = systemd.get_variable(pkgconfig: 'systemdsystemunitdir')

  bindir = get_option('prefix') + '/' +get_option('bindir')

  summary({
            'prefix' : get_option('prefix'),
            'bindir' : bindir,
            'systemd unit directory' : systemd_system_unit_dir
          }, section : 'Directories')


  # disable static hosting
  # install_subdir('static', install_dir : 'share/www', strip_directory : true)

  # Config subdirectory

  subdir('config')
  bmcweb_dependencies += conf_h_dep

  abseils = [
  'base',
  'flags',
  'flags_internal',
  'flags_marshalling',
  'flags_parse',
  'flags_reflection',
  'log_entry',
  'log_flags',
  'log_globals',
  'log_initialize',
  'log_internal_check_op',
  'log_internal_conditions',
  'log_internal_format',
  'log_internal_globals',
  'log_internal_log_sink_set',
  'log_internal_message',
  'log_severity',
  'log_sink',
  'strings',
  'status',
  'statusor',
  'random_distributions',
  'random_seed_sequences',
  'random_internal_randen',
  'random_internal_randen_slow',
  'random_internal_randen_hwaes',
  'random_internal_randen_hwaes_impl',
  'hash',
  ]

  abseil_deps = []

  foreach absl : abseils
    abseil_deps += dependency('absl_' + absl)
  endforeach

  bmcweb_dependencies += abseil_deps

  # Source files
  fs = import('fs')

  srcfiles_bmcweb = files(
    'http/app.cpp',
    'http/app_singleton.cpp',
    'http/http_request.cpp',
    'http/http_response.cpp',
    'http/routing.cpp',
    'http/smart_router.cc',
    'http/utility.cpp',
    'include/dbus_utility.cpp',
    'include/sessions.cpp',
    'include/async_resp.cpp',
    'redfish-core/include/query.cpp',
    'redfish-core/lib/chassis.cpp',
    'redfish-core/lib/external_storer.cpp',
    'redfish-core/lib/log_services.cpp',
    'redfish-core/lib/log_services_eventlog.cpp',
    'redfish-core/lib/systems.cpp',
    'redfish-core/lib/health.cpp',
    'redfish-core/src/error_messages.cpp',
    'redfish-core/src/registries.cpp',
    'redfish-core/src/utils/json_utils.cpp',
    'redfish-core/src/utils/subprocess_utils.cpp',
    'src/webserver_main_setup.cpp',
    'src/boost_asio_ssl.cpp',
    'src/boost_asio.cpp',
    'src/boost_beast.cpp',
    'g3/managed_store.cpp',
    'g3/subscription_backend_impl.cpp',
    'g3/event_store.cc',
    'g3/subscription.cc',
    'g3/subscription_impl.cc',
    'g3/subscription_store_impl.cc',
    'src/managed_store_http.cpp',
    'g3/managed_store_types.cpp',
    'g3/managed_store_serialization.cc',
    'src/request_stats.cpp',
    'src/request_stats_store_http.cpp',
    'g3/server.cc',
    'g3/rate_limiter.cc',
  )

  libs_link_with = []

  if get_option('mtls-grpc').enabled()
    subdir('tlbmc')
    subdir('redfish_authorization')
    subdir('devpath_plugin')
    bmcweb_dependencies += devpath_plugin_dep
  endif

  if get_option('platform-plugins').enabled()
    platform_plugin = dependency('gbmcweb_platform_plugin')
    bmcweb_dependencies += platform_plugin
  endif

  if get_option('google-common-plugins').enabled()
    platform_plugin = dependency('gbmcweb_google_common_plugin')
    bmcweb_dependencies += platform_plugin
  endif

  if get_option('google-plugins-internal').enabled()
    platform_plugin = dependency('gbmcweb_google_plugins_internal')
    bmcweb_dependencies += platform_plugin
  endif

  if get_option('loas3-validation').enabled()
    bmcweb_dependencies += dependency('authentication_policy_validation')
  endif

  if get_option('install').enabled()
    subdir('install')
  endif

  if get_option('redfish-boot-time').enabled()
    boottime_deps = dependency('boottime_api')
    bmcweb_dependencies += [boottime_deps]
  endif

  bmcweblib = static_library(
    'bmcweblib',
    srcfiles_bmcweb,
    include_directories : incdir,
    dependencies: bmcweb_dependencies,
    link_with: libs_link_with,
  )

  libs_link_with += bmcweblib

  # Build with gtest/gmock if test build
  if(get_option('tests').enabled())
    bmcweb_dependencies += [
              gtest,
              gmock,
    ]
  endif

  executable(
    'bmcweb',
    'src/webserver_main.cpp',
    include_directories : incdir,
    dependencies: bmcweb_dependencies,
    link_with: libs_link_with,
    link_args: '-Wl,--gc-sections',
    install: true,
    install_dir: bindir,
  )

  srcfiles_unittest = [
    'src/managed_store_http_test.cpp',
    'test/g3/mock_managed_store_test.cpp',
    'test/http/crow_getroutes_test.cpp',
    'test/http/http_response_test.cpp',
    'test/http/router_test.cpp',
    'test/http/utility_test.cpp',
    'test/http/verb_test.cpp',
    'test/include/dbus_utility_test.cpp',
    'test/include/google/google_service_root_test.cpp',
    'test/include/google/google_service_nvme_test.cpp',
    'test/include/http_utility_test.cpp',
    'test/include/human_sort_test.cpp',
    'test/include/multipart_test.cpp',
    'test/include/request_stats_test.cpp',
    'test/include/openbmc_dbus_rest_test.cpp',
    'test/include/str_utility_test.cpp',
    'test/redfish-core/include/privileges_test.cpp',
    'test/redfish-core/include/redfish_aggregator_test.cpp',
    'test/redfish-core/include/registries_test.cpp',
    'test/redfish-core/include/query_test.cpp',
    'test/redfish-core/include/utils/hex_utils_test.cpp',
    'test/redfish-core/include/utils/ip_utils_test.cpp',
    'test/redfish-core/include/utils/json_utils_test.cpp',
    'test/redfish-core/include/utils/location_utils_test.cpp',
    'test/redfish-core/include/utils/stl_utils_test.cpp',
    'test/redfish-core/include/utils/time_utils_test.cpp',
    'test/redfish-core/lib/external_storer_test.cpp',
    'test/redfish-core/lib/log_services_eventlog_test.cpp',
    'test/redfish-core/lib/log_services_test.cpp',
    'test/redfish-core/lib/service_root_test.cpp',
    'test/redfish-core/lib/system_test.cpp',
    'test/redfish-core/lib/system_multi_host_test.cpp',
    'test/redfish-core/lib/system_utils_test.cpp',
    'test/redfish-core/lib/thermal_subsystem_test.cpp',
    'test/redfish-core/lib/power_test.cpp',
    'test/redfish-core/lib/power_supply_test.cpp',
    'test/redfish-core/lib/power_subsystem_test.cpp',
    'test/redfish-core/lib/processor_test.cpp',
    'test/redfish-core/lib/assembly_test.cpp',
    'test/redfish-core/lib/power_supply_metrics_test.cpp',
    'test/redfish-core/lib/chassis_test.cpp',
    'test/redfish-core/lib/control_test.cpp',
    'test/redfish-core/lib/cable_test.cpp',
    'test/redfish-core/lib/component_integrity_test.cpp',
    'test/redfish-core/lib/trusted_component_test.cpp',
    'test/redfish-core/lib/nvme_metric_test.cpp',
    'test/redfish-core/lib/snapshot_fixture_test.cpp',
    'test/redfish-core/lib/storage_test.cpp',
    'test/redfish-core/lib/fan_test.cpp',
    'test/redfish-core/lib/manager_test.cpp',
    'test/redfish-core/lib/manager_diagnostic_data_test.cpp',
    'test/redfish-core/lib/ethernet_test.cpp',
    'test/redfish-core/lib/network_adapter_test.cpp',
    'test/redfish-core/lib/nvme_features_test.cpp',
    'test/redfish-core/lib/pcie_test.cpp',
    'test/redfish-core/lib/pcie_slots_test.cpp',
    'test/redfish-core/lib/ports_test.cpp',
    'test/redfish-core/lib/port_metrics_test.cpp',
    'test/redfish-core/lib/update_service_test.cpp',
    'test/redfish-core/lib/bios_test.cpp',
    'test/redfish-core/lib/bios_multi_host_test.cpp',
    'test/redfish-core/src/error_messages_test.cpp',
    'plugins/macros_test.cpp',
  ]

  message(get_option('b_sanitize'))

  if (not get_option('b_sanitize').contains('address'))
    srcfiles_unittest += 'test/src/webserver_main_setup_smoke_test.cpp'
  endif

  if get_option('health-populate').enabled()
    srcfiles_unittest += ['test/redfish-core/lib/health_test.cpp']
  endif

  message(srcfiles_unittest)

  if get_option('redfish-boot-time').enabled()
    srcfiles_unittest += ['test/redfish-core/lib/boot_time_test.cpp']
  endif

  if(get_option('tests').enabled())
      # generate the test executable
      foreach test_src : files(srcfiles_unittest)
        test_bin = executable(
          fs.stem(test_src),
          test_src,
          link_with: libs_link_with,
          include_directories : incdir,
          install_dir: bindir,
          dependencies: bmcweb_dependencies + [
            gtest,
            gmock,
          ]
        )
        test(fs.stem(test_src), test_bin, timeout: 600)
      endforeach
  endif

# Pacemaker depends on grpc redfish for frontend service.
if get_option('mtls-grpc').enabled()
  executable(
    'tlbmc_pacemaker',
    'tlbmc/pacemaker/pacemaker.cc',
    'tlbmc/pacemaker/pacemaker_main.cc',
    link_args: '-Wl,--gc-sections',
    include_directories : incdir,
    dependencies: bmcweb_dependencies,
    link_with: libs_link_with,
    install: get_option('tlbmc-pacemaker').enabled(),
  )
  executable(
    'shared_mem_cli',
    'tlbmc/hal/shared_mem/demo/shared_mem_cli.cc',
    link_args: '-Wl,--gc-sections',
    include_directories : incdir,
    dependencies: bmcweb_dependencies,
    link_with: libs_link_with,
    install: true,
  )
endif

else
  gbmcweb_plugin_headers = files(
    'include/sessions.hpp',
    'http/app_interface.h',
    'http/app.hpp',
    'http/app_singleton.hpp',
    'http/common.hpp',
    'http/http_request.hpp',
    'http/http_response.hpp',
    'http/logging.hpp',
    'http/router_interface.h',
    'http/routing.hpp',
    'http/smart_router.h',
    'http/utility.hpp',
    'http/verb.hpp',
    'http/websocket.hpp',
    'include/async_resp.hpp',
    'include/dbus_utility.hpp',
    'include/human_sort.hpp',
    'g3/managed_store.hpp',
    'g3/managed_store_types.hpp',
    'g3/managed_store_serialization.h',
    'g3/managed_store_clock.hpp',
    'g3/subscription.h',
    'include/request_stats.hpp',
    'include/source_location.hpp',
    'include/str_utility.hpp',
    'plugins/interface.hpp',
    'plugins/macros.hpp',
    'devpath_plugin/redfish_devpath_injector_interface.hpp', 
    'redfish-core/include/registries/privilege_registry.hpp',
    'redfish-core/include/utils/dbus_utils.hpp',
    'redfish-core/include/utils/subprocess_utils.hpp',
    'redfish-core/include/error_messages.hpp',
    'redfish-core/include/query.hpp',
    'redfish-core/include/privileges.hpp',
    'redfish-core/include/utils/json_utils.hpp',
    'redfish-core/include/utils/location_utils.hpp',
    'redfish-core/include/utils/time_utils.hpp',
    'redfish-core/include/utils/chassis_utils.hpp',
    'redfish-core/include/utils/storage_utils.hpp',
    'redfish-core/include/utils/nvme_metric_utils.hpp',
    'redfish-core/lib/log_services.hpp',
    'redfish-core/lib/nvme_features.hpp',
    'redfish-core/lib/health.hpp',
  )
  install_headers(
    gbmcweb_plugin_headers,
    install_dir : get_option('includedir') / 'bmcweb_plugins',
  )
  install_headers(
    'tlbmc/hal/system_registry.h',
    subdir : 'tlbmc/hal',
  )
  install_headers(
    'tlbmc/credentials/credential_manager.h',
    subdir: 'tlbmc/credentials',
  )
endif
