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',
    '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',
       ]),
      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
