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

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

add_project_arguments('-DGBMCWEB_COMPILATION', language : 'cpp')

# 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')

  # Validate the c++ Standard

  if get_option('cpp_std') != 'c++20'
      error('This project requires c++20 support')
  endif

  # 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',
    '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',
    'host-serial-socket'                          : '-DBMCWEB_ENABLE_HOST_SERIAL_WEBSOCKET',
    'ibm-management-console'                      : '-DBMCWEB_ENABLE_IBM_MANAGEMENT_CONSOLE',
    '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',
    'kvm'                                         : '-DBMCWEB_ENABLE_KVM' ,
    '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',
    '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-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',
    'vm-websocket'                                : '-DBMCWEB_ENABLE_VM_WEBSOCKET',
    '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'                            : '-DEFFICIENT_EXPAND_ENABLED',
    'loas3-validation'                            : '-DENABLE_LOAS3_VALIDATION',
    'redfish-boot-time-log'                       : '-DBMCWEB_ENABLE_REDFISH_BOOT_TIME_LOG',
    'redfish-boot-time'                           : '-DBMCWEB_ENABLE_REDFISH_BOOT_TIME',
  }

  # Create a "bm_config.h" header which sets the #define BM_SIGNAL_PATH
  bm_conf_data = configuration_data()
  bm_conf_data.set_quoted('BM_SIGNAL_PATH', get_option('bm-signal-path'))
  # sets the #define BIOS_BLOB_FILE_PATH
  bm_conf_data.set_quoted('BIOS_SETTING_FILE_PATH', get_option('bios-setting-file-path'))
  # sets the #define BIOS_SETTING_FILE_HANDLE
  bm_conf_data.set('BIOS_SETTING_FILE_HANDLE', get_option('bios-setting-file-handle'))
  # sets the #define ENABLE_BIOS_PEER_AUTH_BYPASS
  bm_conf_data.set10('ENABLE_BIOS_PEER_AUTH_BYPASS', get_option('bios-peer-auth-bypass').enabled())
  bm_conf_h = configure_file(
    output: 'bm_config.h',
    configuration: bm_conf_data)

  # 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'}

  # 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')
  bmcweb_dependencies += [systemd, zlib]

  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_pool_urbg',
  '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/src/error_messages.cpp',
    'redfish-core/src/registries.cpp',
    'redfish-core/src/utils/boot_time_utils.cpp',
    'redfish-core/src/utils/json_utils.cpp',
    'redfish-core/src/utils/subprocess_utils.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',
  )

  if get_option('mtls-grpc').enabled()
    subdir('redfish_authorization')
  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

  libs_link_with = []

  if get_option('mtls-grpc').enabled()
    subdir('tlbmc')
  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/http_utility_test.cpp',
    'test/include/human_sort_test.cpp',
    'test/include/ibm/configfile_test.cpp',
    'test/include/ibm/lock_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/boot_time_utils_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/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/cable_test.cpp',
    'test/redfish-core/lib/component_integrity_test.cpp',
    'test/redfish-core/lib/trusted_component_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/network_adapter_test.cpp',
    'test/redfish-core/lib/pcie_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/boot_time_test.cpp',
    'test/redfish-core/lib/bios_test.cpp',
    'test/redfish-core/lib/bios_multi_host_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

  message(srcfiles_unittest)

  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_metrics_server',
    'tlbmc/hal/shared_mem/demo/shared_mem_metrics_server.cc',
    link_args: '-Wl,--gc-sections',
    include_directories : incdir,
    dependencies: bmcweb_dependencies,
    link_with: libs_link_with,
    install: false,
  )
  executable(
    'shared_mem_metrics_client',
    'tlbmc/hal/shared_mem/demo/shared_mem_metrics_client.cc',
    link_args: '-Wl,--gc-sections',
    include_directories : incdir,
    dependencies: bmcweb_dependencies,
    link_with: libs_link_with,
    install: false,
  )
  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',
    'redfish-core/include/registries/privilege_registry.hpp',
    'redfish-core/include/utils/dbus_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',
  )
  install_headers(
    gbmcweb_plugin_headers,
    install_dir : get_option('includedir') / 'bmcweb_plugins',
  )
endif
