# 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") {
  if (!cobalt_fastbuild) {
    # Containers cannot use PDBs, so we conditionally disable them.
    # We want to keep them for non-docker builds as they make compilation
    # significantly faster.
    configs = [ ":no_pdbs" ]
  }

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

  # 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",
  ]
}

config("no_pdbs") {
  if (is_docker_build) {
    cflags = [ "/Z7" ]
  } else {
    cflags = [
      "/Zi",
      "/FS",
    ]
  }
  ldflags = [ "/DEBUG:FULL" ]
}
