project('bmcweb', 'cpp',
        version : '1.0',
        meson_version: '>=0.63.0',
        default_options: [
            'b_lto_mode=default',
            'b_lto_threads=0',
            'b_lto=true',
            'b_ndebug=if-release',
            'buildtype=debugoptimized',
            'cpp_std=c++20',
            '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
