# Copyright 2023 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("//build/config/win/visual_studio_version.gni")

# TODO(andrewsavage): No way host builds need all these flags
config("host") {
  configs = [ ":common" ]
}

config("common") {
  configs = []

  cflags_cc = [ "/TP" ]
  cflags = [ "/Z7" ]
  ldflags = [
    "/NXCOMPAT",
    "/MANIFEST:NO",
  ]
  libs = []
  include_dirs = []
  arflags = []
  defines = [
    "_UNICODE",
    "UNICODE",
  ]

  # Allows compilation against VS 2022.
  configs += [ "//build/config/win:visual_studio_version_compat" ]

  # msvs_base
  # OutputDirectory and IntermediateDirectory, maybe CharacterSet
  include_dirs += [
    "$wdk_include_path/shared",
    "$wdk_include_path/ucrt",
    "$wdk_include_path/um",
    "$wdk_include_path/winrt",
    "$msvc_path/include",
  ]
  cflags += [
    "/EHsc",
    "/std:c++14",
  ]

  # msvs_debug/_devel/etc
  ldflags += [ "/INCREMENTAL:NO" ]
  if (is_debug) {
    cflags += [
      "/Od",

      # Check stack frame validity and check for uninitialized variables at run time.
      "/RTC1",
    ]
  } else {
    cflags += [ "/O2" ]
  }

  if (!is_gold) {
    libs += [ "dbghelp.lib" ]
  }

  if (is_debug || is_devel) {
    cflags += [
      # Use debug multithreaded library.
      "/MDd",
      "/GS",

      # Unit tests can have huge object files.
      "/bigobj",
    ]
  } else {
    cflags += [
      # Use release multithreaded library.
      "/MD",

      # Unreferenced variable.
      # Often variables are only referenced in DCHECKs.
      "/wd4189",
    ]
    ldflags += [
      "/OPT:REF",
      "/OPT:ICF",
    ]
  }

  cflags += [
    # Check for buffer overruns.
    "/GS",

    # "for" loop's initializer go out of scope after the for loop.
    "/Zc:forScope",

    # wchar_t is treated as a built-in type.
    "/Zc:wchar_t",

    # Don't send error reports to MS.
    "/errorReport:none",
  ]

  arflags += [
    # Linking statically with C++/CX library is not recommended.
    # TODO: Remove after removing ComponentExtensions
    "/ignore:4264",
  ]

  cflags += [
    # Allow unused function input parameter.
    "/wd4100",

    # Conditional expression is constant.
    # Triggers in many legitimate cases, like branching on a constant declared
    # in type traits.
    "/wd4127",

    # Disable anonymous union warnings.
    "/wd4201",

    # 4244 (Level 2) - Implicit conversion from float to int
    # 4244 (Level 3) - Implicit conversion from int to something smaller
    # than int.
    # 4244 (Level 4) - Implicit conversion of types, which may result in
    # data loss.
    "/wd4244",

    # Class has virtual functions, but destructor is not virtual.
    # Far less useful than in GCC because doesn't take into account the fact
    # that destructor is not public.
    "/wd4265",

    # Inconsistent DLL linkage
    "/wd4273",

    # Matching delete operator for `new`. 4291 is also ignored by Chromium.
    "/wd4291",

    # Double -> float truncation. Not enabled on other compilers.
    "/wd4305",

    # cast truncates constant value.
    # We do not care.
    "/wd4309",

    # casting constant number.
    "/wd4310",

    # An rvalue cannot be bound to a non-const reference.
    # In previous versions of Visual C++, it was possible to bind an rvalue
    # to a non-const reference in a direct initialization. This warning
    # is useless as it simply describes proper C++ behavior.
    "/wd4350",

    # layout of class may have changed from a previous version of
    # the compiler due to better packing of member. We don't care about
    # binary compatibility with other compiler versions.
    "/wd4371",

    # relative include path contains '..'.
    # This occurs in a lot third party libraries and we don't care.
    "/wd4464",

    # decorated name length exceeded, name was truncated.
    "/wd4503",

    # assignment operator could not be generated.
    # This is expected for structs with const members.
    "/wd4512",

    # Unreferenced inline function has been removed.
    # While detection of dead code is good, this warning triggers in
    # third-party libraries which renders it useless.
    "/wd4514",

    # Expression before comma has no effect.
    # Cannot be used because Microsoft uses _ASSERTE(("message", 0)) trick
    # in malloc.h which is included pretty much everywhere.
    "/wd4548",

    # Use of noexcept in targets compiled without /EHsc triggers a warning
    # "termination on exception is not guaranteed" which we consider benign
    # because we don't expect exceptions to cross the boundary of modules
    # compiled with /EHsc.
    "/wd4577",

    # Copy constructor could not be generated because a base class copy
    # constructor is inaccessible.
    # This is an expected consequence of using DISALLOW_COPY_AND_ASSIGN().
    "/wd4625",

    # Assignment operator could not be generated because a base class
    # assignment operator is inaccessible.
    # This is an expected consequence of using DISALLOW_COPY_AND_ASSIGN().
    "/wd4626",

    # Digraphs not supported.
    "/wd4628",

    # Sometimes template definitions and declarations are separate and MSVC
    # complains when it fails to find the definition on seeing the template.
    "/wd4661",

    # Symbol is not defined as a preprocessor macro, replacing with '0'.
    # Seems like common practice, used in Windows SDK and gtest.
    "/wd4668",

    # Function not inlined.
    # It's up to the compiler to decide what to inline.
    "/wd4710",

    # Function selected for inline expansion.
    # It's up to the compiler to decide what to inline.
    "/wd4711",

    # The type and order of elements caused the compiler to add padding
    # to the end of a struct.
    # Unsurprisingly, most of the structs become larger because of padding
    # but it's a universally acceptable price for better performance.
    "/wd4820",

    # Disable static analyzer warning for std::min and std::max with
    # objects.
    # https://connect.microsoft.com/VisualStudio/feedback/details/783808/static-analyzer-warning-c28285-for-std-min-and-std-max
    "/wd28285",

    # Deprecated function warning.
    "/wd4996",
  ]
}
