# Copyright (c) 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/android/config.gni")
import("//build/toolchain/wasm.gni")
if (current_cpu == "arm") {
  import("//build/config/arm.gni")
}
if (is_posix) {
  import("//build/config/gcc/gcc_version.gni")
}
if (is_win) {
  import("//build/config/win/visual_studio_version.gni")
}

import("//build/config/c++/c++.gni")
import("//build/config/profiler.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("//build/toolchain/ccache.gni")
import("//build/toolchain/clang.gni")
import("//build/toolchain/toolchain.gni")
import("//build/toolchain/wasm.gni")

declare_args() {
  # Normally, Android builds are lightly optimized, even for debug builds, to
  # keep binary size down. Setting this flag to true disables such optimization
  android_full_debug = false

  # Set this flag when linking with custom allocators that don't satisfy
  # default ::operator new(size_t) alignment guarantees.
  operator_new_alignment = "default"

  # By default, API calls to deprecated methods are errors. While prototyping,
  # this flag may be set to allow such calls.
  # riscv64: https://github.com/flutter/flutter/issues/173656
  allow_deprecated_api_calls = target_cpu == "riscv64"

  # This flag is deprecated and will be removed. The value will be ignored.
  use_fstack_protector = false

  # Prefer size over speed when compiling to wasm
  wasm_prioritize_size = false
}

# default_include_dirs ---------------------------------------------------------
#
# This is a separate config so that third_party code (which would not use the
# source root and might have conflicting versions of some headers) can remove
# this and specify their own include paths.
config("default_include_dirs") {
  include_dirs = [
    "//",
    root_gen_dir,
  ]
}

# compiler ---------------------------------------------------------------------
#
# Base compiler configuration.
#
# See also "runtime_library" below for related stuff and a discussion about
# where stuff should go. Put warning related stuff in the "warnings" config.

config("compiler") {
  cflags = []
  cflags_c = []
  cflags_cc = []
  cflags_objcc = []
  swiftflags = []
  ldflags = []
  defines = []
  configs = []

  # Platform-specific configs.
  if (is_ios || is_mac) {
    configs += [ "//build/config/darwin:compiler" ]
  }

  if (is_qnx) {
    defines += [
      "_XOPEN_SOURCE=700",
      "_QNX_SOURCE",
      "SKNX_NO_SIMD",
    ]
  }

  # In general, Windows is totally different, but all the other builds share
  # some common GCC configuration. This section sets up Windows and the common
  # GCC flags, and then we handle the other non-Windows platforms specifically
  # below.
  if (is_win) {
    # Windows compiler flags setup.
    # -----------------------------
    cflags += [
      "/GS",  # Enable buffer security checking.
      "/FS",  # Preserve previous PDB behavior.
      "/guard:cf",  # Enable control flow guard security checks.
    ]
  } else {
    cflags_c += [ "-std=c11" ]

    # Common GCC compiler flags setup.
    # --------------------------------
    cflags += [ "-fno-strict-aliasing" ]  # See http://crbug.com/32204
    common_flags = [
      # Not exporting C++ inline functions can generally be applied anywhere
      # so we do so here. Normal function visibility is controlled by
      # //build/config/gcc:symbol_visibility_hidden.
      "-fvisibility-inlines-hidden",
    ]
    cflags_cc += common_flags
    cflags_objcc += common_flags

    # Stack protection.
    if (is_mac) {
      cflags += [ "-fstack-protector-all" ]
    } else if (!is_ios && !is_wasm && !is_qnx) {
      cflags += [
        "-fstack-protector",

        # 8 is the default, but make this explicit here so that we don't have to
        # go hunting for the flag name if we ever want a value that is
        # different from the default.
        "--param=ssp-buffer-size=8",
      ]
    }

    # Linker warnings.
    if (!(is_chromeos && current_cpu == "arm") && !is_mac && !is_ios) {
      # TODO(jochen): Enable this on chromeos on arm. http://crbug.com/356580
      ldflags += [ "-Wl,--fatal-warnings" ]
    }

    # Common options for AddressSanitizer, LeakSanitizer, ThreadSanitizer and
    # MemorySanitizer
    if (using_sanitizer) {
      cflags += [
        "-fno-omit-frame-pointer",
        "-gline-tables-only",
      ]
    }
    if (is_asan) {
      cflags += [ "-fsanitize=address" ]
      ldflags += [ "-fsanitize=address" ]

      # ASan is deliberately not added to swiftflags.
      # The Swift frontend emits an ASan version-mismatch guard
      # (__asan_version_mismatch_check_apple_clang_*) that the engine's clang
      # ASan runtime doesn't provide, so instrumenting Swift fails to link.
    }
    if (is_hwasan && is_android && current_cpu == "arm64") {
      cflags += [ "-fsanitize=hwaddress" ]
      ldflags += [ "-fsanitize=hwaddress" ]
    }
    if (is_lsan) {
      cflags += [ "-fsanitize=leak" ]
      ldflags += [ "-fsanitize=leak" ]
    }
    if (is_tsan) {
      cflags += [ "-fsanitize=thread" ]
      ldflags += [ "-fsanitize=thread" ]
      swiftflags += [ "-sanitize=thread" ]
    }
    if (is_msan) {
      cflags += [ "-fsanitize=memory" ]
      ldflags += [ "-fsanitize=memory" ]
    }
    if (is_ubsan) {
      cflags += [ "-fsanitize=undefined" ]
      ldflags += [ "-fsanitize=undefined" ]

      # UBSan is deliberately not added to swiftflags. The Swift compiler
      # accepts -sanitize=undefined but emits no UBSan instrumentation for Swift
      # code.
    }

    if (use_custom_libcxx) {
      cflags_cc += [ "-nostdinc++" ]
      include_dirs = [
        "$buildtools_path/third_party/libc++/trunk/include",
        "$buildtools_path/third_party/libc++abi/trunk/include",
      ]
    }
  }

  # Mac-specific compiler flags setup.
  # ----------------------------------
  if (is_mac || is_ios) {
    # These flags are shared between the C compiler and linker.
    common_mac_flags = []

    if (is_mac) {
      if (current_cpu == "arm64") {
        common_mac_flags += [ "--target=arm64-apple-macos" ]
      } else if (current_cpu == "x64") {
        common_mac_flags += [ "--target=x86_64-apple-macos" ]
      }
    }

    if (is_ios) {
      if (current_cpu == "arm64") {
        common_mac_flags += [ "--target=arm64-apple-darwin" ]
      } else if (current_cpu == "x64") {
        common_mac_flags += [ "--target=x86_64-apple-darwin" ]
      }
    }

    # CPU architecture.
    if (current_cpu == "x64") {
      common_mac_flags += [
        "-arch",
        "x86_64",
      ]
    } else if (current_cpu == "arm64") {
      common_mac_flags += [
        "-arch",
        "arm64",
      ]
    }

    cflags += common_mac_flags

    # Without this, the constructors and destructors of a C++ object inside
    # an Objective C struct won't be called, which is very bad.
    cflags_objcc += [ "-fobjc-call-cxx-cdtors" ]

    ldflags += common_mac_flags
  } else if (is_posix) {
    # CPU architecture. We may or may not be doing a cross compile now, so for
    # simplicity we always explicitly set the architecture.
    if (current_cpu == "x64") {
      cflags += [
        "-m64",
        "-march=x86-64",
      ]
      ldflags += [ "-m64" ]
    } else if (current_cpu == "x86") {
      cflags += [ "-m32" ]
      ldflags += [ "-m32" ]
      if (is_clang) {
        cflags += [
          # Align the stack on 16-byte boundaries, http://crbug.com/418554.
          "-mstack-alignment=16",
          "-mstackrealign",
        ]
      }
    } else if (current_cpu == "arm") {
      cflags += [
        "-march=$arm_arch",
        "-mfloat-abi=$arm_float_abi",
      ]
      if (arm_tune != "") {
        cflags += [ "-mtune=$arm_tune" ]
      }
      if (arm_use_thumb) {
        cflags += [ "-mthumb" ]
      }
      if (!is_clang) {
        # Clang doesn't support these flags.
        cflags += [
          # The tree-sra optimization (scalar replacement for
          # aggregates enabling subsequent optimizations) leads to
          # invalid code generation when using the Android NDK's
          # compiler (r5-r7). This can be verified using
          # webkit_unit_tests' WTF.Checked_int8_t test.
          "-fno-tree-sra",

          # The following option is disabled to improve binary
          # size and performance in gcc 4.9.
          "-fno-caller-saves",
        ]
      }
    }

    if (!is_android) {
      defines += [
        "_FILE_OFFSET_BITS=64",  # https://android.googlesource.com/platform/bionic/+/master/docs/32-bit-abi.md#32_bit-and
        "_LARGEFILE_SOURCE",
        "_LARGEFILE64_SOURCE",
      ]
    }
  } else if (is_win) {
    if (is_clang) {
      if (current_cpu == "x86") {
        cflags += [ "-m32" ]
      } else if (current_cpu == "x64") {
        cflags += [ "-m64" ]
      } else if (current_cpu == "arm64") {
        cflags += [ "--target=arm64-windows" ]
      } else {
        assert(false, "unknown current_cpu " + current_cpu)
      }
    }

    # Don't warn about open, close, read, and other deprecated stdlib functions.
    defines += [
      "_CRT_NONSTDC_NO_WARNINGS",
      "_CRT_NONSTDC_NO_DEPRECATE",
    ]
  }

  if (operator_new_alignment != "default" && is_clang) {
    cflags += [
      "-faligned-allocation",
      "-fnew-alignment=$operator_new_alignment",
    ]
  }

  if (is_wasm) {
    if (wasm_use_workers) {
      cflags += [ "-sWASM_WORKERS=1" ]
      ldflags += [ "-sWASM_WORKERS=1" ]
    }
    if (wasm_shared_memory) {
      cflags += [ "-sSHARED_MEMORY=1" ]
      ldflags += [ "-sSHARED_MEMORY=1" ]
    }
    ldflags += [
      "-s",
      "WASM=1",
      "-s",
      "FORCE_FILESYSTEM=0",
      "-s",
      "FILESYSTEM=0",
      "-s",
      "NO_EXIT_RUNTIME=1",
      "-s",
      "STRICT=1",
      "-s",
      "ENVIRONMENT=web,worker",

      # Reduces global namespace pollution.
      "-s",
      "MODULARIZE=1",
      "-s",
      "EXPORT_ES6",

      # Always produce a symbol map so that we can map crash traces
      "--emit-symbol-map",
    ]
  }

  if (enable_profiling && !is_debug) {
    # The GYP build spams this define into every compilation unit, as we do
    # here, but it only appears to be used in base and a couple other places.
    # TODO(abarth): Should we move this define closer to where it's used?
    defines += [ "ENABLE_PROFILING" ]

    cflags += [
      "-fno-omit-frame-pointer",
      "-mno-omit-leaf-frame-pointer",
      "-g",
    ]

    if (enable_full_stack_frames_for_profiling) {
      cflags += [
        "-fno-inline",
        "-fno-optimize-sibling-calls",
      ]
    }

    # This flag is needed so that the call to dladdr() in Dart's native symbol
    # resolver can report good symbol information for the CPU profiler.
    ldflags += [ "-rdynamic" ]
  }

  # Linux/Android common flags setup.
  # ---------------------------------
  if (is_linux || is_android || is_qnx) {
    cflags += [ "-fPIC" ]

    if (!is_qnx) {
      cflags += [
        "-pipe",  # Use pipes for communicating between sub-processes. Faster.
      ]
    }

    ldflags += [
      "-fPIC",
      "-Wl,-z,noexecstack",
      "-Wl,-z,now",
      "-Wl,-z,relro",
    ]
    if (!using_sanitizer) {
      ldflags += [ "-Wl,-z,defs" ]
    }
  }

  if (is_qnx) {
    qnx_arch_flags = []
    if (target_cpu == "arm64") {
      qnx_arch_flags += [
        "-V",
        "gcc_ntoaarch64le",
      ]
    } else {
      assert(false, "Unknown QNX architecture")
    }
    cflags += qnx_arch_flags
    ldflags += qnx_arch_flags
  }

  # Linux-specific compiler flags setup.
  # ------------------------------------
  if (is_linux) {
    cflags += [ "-pthread" ]
    ldflags += [ "-pthread" ]

    if (current_cpu == "arm64") {
      cflags += [ "--target=aarch64-linux-gnu" ]
      ldflags += [ "--target=aarch64-linux-gnu" ]
      cflags += [ "-DBORINGSSL_CLANG_SUPPORTS_DOT_ARCH" ]
    }
  }

  # Clang-specific compiler flags setup.
  # ------------------------------------
  if (is_clang) {
    cflags += [ "-fcolor-diagnostics" ]
  }

  # TODO(crbug.com/1374347): Cleanup undefined symbol errors caught by
  # --no-undefined-version.
  if (is_clang && !is_win && !is_mac && !is_ios && !is_wasm) {
    ldflags += [ "-Wl,--undefined-version" ]
  }

  # C++ compiler flags setup.
  # -------------------------

  # Android-specific flags setup.
  # -----------------------------
  if (is_android) {
    cflags += [
      "-ffunction-sections",
      "-funwind-tables",
      "-fno-short-enums",
      "-nostdinc++",
    ]

    defines += [ "ANDROID" ]

    # The NDK has these things, but doesn't define the constants
    # to say that it does. Define them here instead.
    defines += [ "HAVE_SYS_UIO_H" ]

    # When Android requires new flags consider also editing the flags in the
    # following locations. Framework plugin_ffi template:
    # packages/flutter_tools/templates/plugin_ffi/src.tmpl/CMakeLists.txt.tmpl
    # Example PR: https://github.com/flutter/flutter/pull/155508
    # Dart Lang JNI package: pkgs/jni/src/CMakeLists.txt
    # Example PR: https://github.com/dart-lang/native/pull/1615
    ldflags += [
      "-Wl,--no-undefined",
      "-Wl,--exclude-libs,ALL",

      # Enable identical code folding to reduce size.
      "-Wl,--icf=all",

      # Currently defaults to 4k, but Android will be moving to 16k page size,
      # and for future-proofing, 64k boundaries will be required.
      "-Wl,-z,max-page-size=65536",
    ]

    if (current_cpu == "arm") {
      cflags += [ "--target=arm-linux-androideabi${android_api_level}" ]
      ldflags += [ "--target=arm-linux-androideabi${android_api_level}" ]
    } else if (current_cpu == "arm64") {
      cflags += [ "--target=aarch64-linux-android${android_api_level}" ]
      ldflags += [ "--target=aarch64-linux-android${android_api_level}" ]
    } else if (current_cpu == "x86") {
      cflags += [ "--target=i686-linux-androideabi${android_api_level}" ]
      ldflags += [ "--target=i686-linux-androideabi${android_api_level}" ]
    } else if (current_cpu == "x64") {
      cflags += [ "--target=x86_64-linux-androideabi${android_api_level}" ]
      ldflags += [ "--target=x86_64-linux-androideabi${android_api_level}" ]
    } else if (current_cpu == "riscv64") {
      cflags += [ "--target=riscv64-linux-androideabi${android_api_level}" ]
      ldflags += [ "--target=riscv64-linux-androideabi${android_api_level}" ]
    }
  }

  # Fuchsia-specific flags setup.
  # -----------------------------
  if (is_fuchsia) {
    configs = [ "//flutter/tools/fuchsia/gn-sdk/src/config:compiler" ]
  }

  asmflags = cflags
}

# C++ modules (available and enabled by default in C++20 and above) are
# prohibited by the style guide.
config("cxx_disable_modules") {
  disable_modules_flags = [
    "-fno-modules",

    # Some Clang versions do not disable ObjC modules (as tested by
    # __has_feature(objc_modules)) when just -fno-modules is present.
    "-Xclang",
    "-fno-cxx-modules",
  ]
  cflags_c = disable_modules_flags
  cflags_cc = disable_modules_flags
  cflags_objc = disable_modules_flags
  cflags_objcc = disable_modules_flags
}

config("cxx_version_default") {
  if (is_win) {
    cc_std = [ "/std:c++20" ]
  } else {
    cc_std = [ "-std=c++20" ]
  }

  configs = [ ":cxx_disable_modules" ]

  cflags_cc = cc_std
  cflags_objcc = cc_std

  # The following corrections are only in place for targets that have opted into
  # the default version. These targets have not had to opportunity to upgrade to
  # a newer version. Targets that have explicitly opted into the newer version
  # must fix the errors they run into.

  if (is_clang) {
    extra_warning_flags_cc = [
      # TODO(174665): Third-party dependency (Angle) needs to patched to work
      # around this.
      "-Wno-deprecated-this-capture",
    ]
    cflags_cc += extra_warning_flags_cc
    cflags_objcc += extra_warning_flags_cc
  }
}

config("cxx_version_11") {
  if (is_win) {
    cc_std = [ "/std:c++11" ]
  } else {
    cc_std = [ "-std=c++11" ]
  }
  cflags_cc = cc_std
  cflags_objcc = cc_std
}

config("cxx_version_14") {
  if (is_win) {
    cc_std = [ "/std:c++14" ]
  } else {
    cc_std = [ "-std=c++14" ]
  }
  cflags_cc = cc_std
  cflags_objcc = cc_std
}

config("cxx_version_17") {
  if (is_win) {
    cc_std = [ "/std:c++17" ]
  } else {
    cc_std = [ "-std=c++17" ]
  }
  cflags_cc = cc_std
  cflags_objcc = cc_std
}

config("cxx_version_20") {
  if (is_win) {
    cc_std = [ "/std:c++20" ]
  } else {
    cc_std = [ "-std=c++20" ]
  }
  cflags_cc = cc_std
  cflags_objcc = cc_std

  configs = [ ":cxx_disable_modules" ]
}

config("compiler_arm_fpu") {
  if (current_cpu == "arm" && !is_ios) {
    cflags = [ "-mfpu=$arm_fpu" ]
  }
}

# runtime_library -------------------------------------------------------------
#
# Sets the runtime library and associated options.
#
# How do you determine what should go in here vs. "compiler" above? Consider if
# a target might choose to use a different runtime library (ignore for a moment
# if this is possible or reasonable on your system). If such a target would want
# to change or remove your option, put it in the runtime_library config. If a
# target wants the option regardless, put it in the compiler config.

config("runtime_library") {
  cflags = []
  cflags_cc = []
  cflags_objcc = []
  defines = []
  ldflags = []
  lib_dirs = []
  libs = []

  # Static CRT.
  if (is_win) {
    if (is_debug) {
      cflags += [ "/MTd" ]
    } else {
      cflags += [ "/MT" ]
    }
    defines += [
      "__STD_C",
      "_CRT_RAND_S",
      "_CRT_SECURE_NO_DEPRECATE",
      "_HAS_EXCEPTIONS=0",
      "_SCL_SECURE_NO_DEPRECATE",
    ]
  }

  if (use_flutter_cxx) {
    # Add libcxx[abi]/include via cflags_cc, cflags_objcc to apply to
    # C++/Obj-C++ only. Adding them via include_dirs is problematic for Swift,
    # whose core libraries expect the Apple SDK C++ headers, module.modulemap.
    _libcxx_include =
        rebase_path("//flutter/third_party/libcxx/include", root_build_dir)
    _libcxxabi_include =
        rebase_path("//flutter/third_party/libcxxabi/include", root_build_dir)
    cflags_cc += [
      "-nostdinc++",
      "-I" + _libcxx_include,
      "-I" + _libcxxabi_include,
    ]
    cflags_objcc += [
      "-nostdinc++",
      "-I" + _libcxx_include,
      "-I" + _libcxxabi_include,
    ]

    ldflags += [ "-nostdlib++" ]

    if (is_linux) {
      # Our custom libcxx doesn't include the unwinder, which is included in
      # libc++.a. Link the libunwind directly.
      ldflags += [ "--unwindlib=libunwind" ]
    }
  }

  # Android standard library setup.
  if (is_android) {
    # Work around incompatibilities between bionic and clang headers.
    defines += [
      "__compiler_offsetof=__builtin_offsetof",
      "nan=__builtin_nan",
    ]

    ldflags += [ "-nostdlib" ]

    ldflags += [ "-Wl,--warn-shared-textrel" ]

    libs += [
      "c",
      "dl",
      "m",
    ]

    lib_dirs += [ "${android_toolchain_root}/lib/clang/19/lib/linux/" ]
    current_android_cpu = current_cpu
    if (current_cpu == "arm64") {
      current_android_cpu = "aarch64"
    } else if (current_cpu == "x64") {
      current_android_cpu = "x86_64"
    } else if (current_cpu == "x86") {
      current_android_cpu = "i686"
    }
    libs += [ "clang_rt.builtins-${current_android_cpu}-android" ]
  }

  # Linux standard library setup.
  # We compile our own libc++ on all Linux targets except i386 (for
  # gen_snapshot) where this is not supported.
  if (is_linux) {
    if (!use_flutter_cxx) {
      cflags_cc += [ "-stdlib=libstdc++" ]
      ldflags += [ "-stdlib=libstdc++" ]
      libs += [ "gcc" ]
    }
  }

  # Fuchsia standard library setup.
  if (is_fuchsia) {
    configs = [ "//flutter/tools/fuchsia/gn-sdk/src/config:runtime_library" ]
  }
}

# default_warning_flags collects all warning flags that are used by default.
# This is in a variable instead of a config so that it can be used in
# both chromium_code and no_chromium_code.  This way these flags are guaranteed
# to appear on the compile command line after -Wall.

default_warning_flags = []
default_warning_flags_cc = []
if (is_qnx) {
  default_warning_flags_cc += [ "-fpermissive" ]
}

if (is_win) {
  default_warning_flags += [
    # Permanent.
    "/wd4091",  # typedef warning from dbghelp.h
    "/wd4722",  # destructor never returns

    # Investigate.
    "/wd4312",  # int to pointer of greater size conversion.
    "/wd4838",  # Narrowing conversion required.
    "/wd4172",  # Returning address of local.
    "/wd4005",  # Redefinition of macros for PRId64 etc.
    "/wd4311",  # Pointer truncation from PVOID to DWORD.
    "/wd4477",  # Format string requires wchar_t*
  ]

  if (is_clang && use_rbe) {
    # rbe compilation doesn't preserve file case, so don't warn about
    # case-mismatches.
    default_warning_flags += [
      "-Wno-nonportable-include-path",
      "-Wno-nonportable-system-include-path",
    ]
  }
  if (is_clang) {
    default_warning_flags += [
      # No support for #pragma optimize. https://crbug.com/505314#c13
      "-Wno-ignored-pragma-optimize",

      # Unqualified std::move is pretty common.
      "-Wno-unqualified-std-cast-call",

      # Needed for nlohmann/json.
      "-Wno-deprecated-literal-operator",

      # Needed by skia, imgui, swiftshader, and angle
      "-Wno-nontrivial-memcall",
    ]
  }
} else {
  # Common GCC warning setup.
  default_warning_flags += [
    # Enables.
    "-Wendif-labels",  # Weird old-style text after an #endif.

    # Disables.
    "-Wno-missing-field-initializers",  # "struct foo f = {0};"
    "-Wno-unused-parameter",  # Unused function parameters.
  ]

  if (!is_qnx) {
    default_warning_flags += [
      "-Werror",  # Warnings as errors.
    ]
  }

  if (is_wasm) {
    default_warning_flags += [
      # zlib needs this
      "-Wno-shift-negative-value",

      # freetype2 needs these two
      "-Wno-unused-function",
      "-Wno-unused-variable",

      "-Wno-sign-conversion",
    ]
  }

  default_warning_flags += [
    "-Wno-unused-but-set-parameter",
    "-Wno-unused-but-set-variable",

    # Needed for compiling Skia with clang-12
    "-Wno-psabi",
  ]

  if (is_clang) {
    default_warning_flags += [
      "-Wno-implicit-int-float-conversion",
      "-Wno-deprecated-copy",
    ]
  }

  if (!is_android && is_clang) {
    default_warning_flags += [
      # Needed for nlohmann/json.
      "-Wno-deprecated-literal-operator",
    ]
  }

  if (!is_wasm && is_clang) {
    default_warning_flags += [
      # Unqualified std::move is pretty common.
      "-Wno-unqualified-std-cast-call",

      # Needed by skia, imgui, swiftshader, and angle
      "-Wno-nontrivial-memcall",
    ]
  }
  if (!is_fuchsia && is_clang) {
    default_warning_flags += [
      "-Wno-non-c-typedef-for-linkage",
      "-Wno-range-loop-construct",
    ]
  }

  if (is_mac || is_ios) {
    # When compiling Objective-C, warns if a method is used whose
    # availability is newer than the deployment target. This is not
    # required when compiling Chrome for iOS.
    default_warning_flags += [ "-Wunguarded-availability" ]
  }

  if (allow_deprecated_api_calls) {
    default_warning_flags += [ "-Wno-deprecated-declarations" ]
  }
}

# chromium_code ---------------------------------------------------------------
#
# Toggles between higher and lower warnings for code that is (or isn't)
# part of Chromium.

config("chromium_code") {
  if (is_win || is_wasm) {
    cflags = []
  } else {
    cflags = []

    if (!is_qnx) {
      cflags = [
        "-Wall",
        "-Wextra",
      ]
    }

    # In Chromium code, we define __STDC_foo_MACROS in order to get the
    # C99 macros on Mac and Linux.
    defines = [
      "__STDC_CONSTANT_MACROS",
      "__STDC_FORMAT_MACROS",
    ]

    if (!using_sanitizer && (!is_linux || !is_clang)) {
      # _FORTIFY_SOURCE isn't really supported by Clang now, see
      # http://llvm.org/bugs/show_bug.cgi?id=16821.
      # It seems to work fine with Ubuntu 12 headers though, so use it in
      # official builds.
      #
      # Non-chromium code is not guaranteed to compile cleanly with
      # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
      # disabled, so only do that for Release build.
      defines += [ "_FORTIFY_SOURCE=2" ]
    }
  }
  cflags += default_warning_flags
  cflags_cc = default_warning_flags_cc
}
config("no_chromium_code") {
  cflags = []
  cflags_cc = []
  defines = []

  if (is_win) {
    defines += [
      "_CRT_NONSTDC_NO_WARNINGS",
      "_CRT_NONSTDC_NO_DEPRECATE",
    ]
  }

  # TODO(zra): Remove when zlib no longer needs this.
  # https://github.com/flutter/flutter/issues/103568
  if (!is_wasm) {
    cflags += [ "-Wno-deprecated-non-prototype" ]
  }

  if (is_clang) {
    cflags += [
      "-Wno-newline-eof",
      "-Wno-typedef-redefinition",
    ]
    cflags_cc += [ "-Wno-newline-eof" ]
  }

  cflags += default_warning_flags
  cflags_cc += default_warning_flags_cc
}

# rtti ------------------------------------------------------------------------
#
# Allows turning Run-Time Type Identification on or off.

config("rtti") {
  if (is_win) {
    cflags_cc = [ "/GR" ]
  }
}
config("no_rtti") {
  if (is_win) {
    cflags_cc = [ "/GR-" ]
  } else {
    rtti_flags = [ "-fno-rtti" ]
    cflags_cc = rtti_flags
    cflags_objcc = rtti_flags
  }
}

config("enable_exceptions") {
  if (is_win) {
    cflags_cc = [ "/EHsc" ]
    defines = [ "_HAS_EXCEPTIONS=1" ]
  } else if (is_clang) {
    cflags_cc = [ "-fexceptions" ]
  }
}

# Warnings ---------------------------------------------------------------------

# On Windows compiling on x64, VC will issue a warning when converting
# size_t to int because it will truncate the value. Our code should not have
# these warnings and one should use a static_cast or a checked_cast for the
# conversion depending on the case. However, a lot of code still needs to be
# fixed. Apply this config to such targets to disable the warning.
#
# Note that this can be applied regardless of platform and architecture to
# clean up the call sites. This will only apply the flag when necessary.
#
# TODO(jschuh): crbug.com/167187 fix this and delete this config.
config("no_size_t_to_int_warning") {
  if (is_win && current_cpu == "x64") {
    cflags = [ "/wd4267" ]
  }
}

# Optimization -----------------------------------------------------------------
#
# Note that BUILDCONFIG.gn sets up a variable "default_optimization_config"
# which it will assign to the config it implicitly applies to every target. If
# you want to override the optimization level for your target, remove this
# config (which will expand differently for debug or release builds), and then
# add back the one you want to override it with:
#
#   configs -= default_optimization_config
#   configs += [ "//build/config/compiler/optimize_max" ]

# Shared settings for both "optimize" and "optimize_max" configs.
# IMPORTANT: On Windows "/O1" and "/O2" must go before the common flags.
if (is_win) {
  common_optimize_on_cflags = [
    "/Ob2",  # Both explicit and auto inlining.
    "/Oy-",  # Disable omitting frame pointers, must be after /O2.
  ]
  if (!is_asan) {
    common_optimize_on_cflags += [
      # Put data in separate COMDATs. This allows the linker
      # to put bit-identical constants at the same address even if
      # they're unrelated constants, which saves binary size.
      # This optimization can't be used when ASan is enabled because
      # it is not compatible with the ASan ODR checker.
      "/Gw",
    ]
  }
  common_optimize_on_ldflags = [ "/OPT:REF" ]
} else {
  common_optimize_on_cflags = [
    # Don't emit the GCC version ident directives, they just end up in the
    # .comment section taking up binary size.
    "-fno-ident",

    # Put data and code in their own sections, so that unused symbols
    # can be removed at link time with --gc-sections.
    "-fdata-sections",
    "-ffunction-sections",
  ]
  common_optimize_on_ldflags = []

  if (is_android) {
    if (!using_sanitizer && !enable_profiling) {
      common_optimize_on_cflags += [ "-fomit-frame-pointer" ]
    }
  }

  if (is_mac || is_ios) {
    if (symbol_level == 2) {
      # Mac dead code stripping requires symbols.
      common_optimize_on_ldflags += [ "-Wl,-dead_strip" ]
    }
  } else {
    # Non-Mac Posix linker flags.
    # Specifically tell the linker to perform optimizations.
    # See http://lwn.net/Articles/192624/ .
    if (is_wasm && wasm_prioritize_size) {
      common_optimize_on_ldflags += [ "-Oz" ]
    } else {
      common_optimize_on_ldflags += [ "-Wl,-O2" ]
    }
    common_optimize_on_ldflags += [ "-Wl,--gc-sections" ]

    if (!using_sanitizer && !is_wasm) {
      # Functions interposed by the sanitizers can make ld think
      # that some libraries aren't needed when they actually are,
      # http://crbug.com/234010. As workaround, disable --as-needed.
      common_optimize_on_ldflags += [ "-Wl,--as-needed" ]
    }
  }
}

# Default "optimization on" config. On Windows, this favors size over speed.
config("optimize") {
  if (is_win) {
    # Favor size over speed, /O1 must be before the common flags. The GYP
    # build also specifies /Os and /GF but these are implied by /O1.
    cflags = [ "/O1" ] + common_optimize_on_cflags + [ "/Oi" ]
  } else if (is_ios) {
    cflags = [ "-Os" ] + common_optimize_on_cflags  # Favor size over speed.
    swiftflags = [ "-Osize" ]
  } else if (is_android || is_fuchsia) {
    cflags = [ "-Oz" ] + common_optimize_on_cflags  # Favor size over speed.
  } else if (is_wasm) {
    if (wasm_prioritize_size) {
      cflags = [ "-Oz" ]
    } else {
      cflags = [ "-O3" ]
    }
  } else {
    if (optimize_for_size) {
      cflags = [ "-Os" ] + common_optimize_on_cflags
      swiftflags = [ "-Osize" ]
    } else {
      cflags = [ "-O2" ] + common_optimize_on_cflags
      swiftflags = [ "-O" ]
    }
  }

  lto_flags = []
  if (enable_lto &&
      (is_linux || is_ios || is_mac || is_android || is_fuchsia || is_wasm)) {
    lto_flags += [ "-flto" ]
  }

  ldflags = common_optimize_on_ldflags + lto_flags
  cflags += lto_flags
}

# Turn off optimizations.
config("no_optimize") {
  if (is_win) {
    cflags = [
      "/Od",  # Disable optimization.
      "/Ob0",  # Disable all inlining (on by default).
      "/RTC1",  # Runtime checks for stack frame and uninitialized variables.
    ]
  } else if (is_android && !android_full_debug) {
    # On Android we kind of optimize some things that don't affect debugging
    # much even when optimization is disabled to get the binary size down.
    cflags = [
      "-Os",
      "-fdata-sections",
      "-ffunction-sections",
    ]
    if (!using_sanitizer && !enable_profiling) {
      cflags += [ "-fomit-frame-pointer" ]
    }
    ldflags = common_optimize_on_ldflags
  } else if (is_wasm) {
    # On WASM we don't want to fully deoptimize the debug build because the
    # compiled binary will have some functions with too many local variables
    # and Chrome will reject it.
    cflags = [ "-O1" ]
    ldflags = common_optimize_on_ldflags
  } else {
    cflags = [ "-O0" ]
    swiftflags = [ "-Onone" ]
  }
}

# Turns up the optimization level. On Windows, this implies whole program
# optimization and link-time code generation which is very expensive and should
# be used sparingly.
config("optimize_max") {
  ldflags = common_optimize_on_ldflags
  if (is_win) {
    # Favor speed over size, /O2 must be before the common flags. The GYP
    # build also specifies /Ot, /Oi, and /GF, but these are implied by /O2.
    cflags = [ "/O2" ] + common_optimize_on_cflags
  } else {
    cflags = [ "-O2" ] + common_optimize_on_cflags
  }
}

# These are two named configs that zlib's BUILD.gn expects to exist.
config("default_optimization") {
}

config("optimize_speed") {
}

# Symbols ----------------------------------------------------------------------

config("symbols") {
  if (is_win) {
    if (use_rbe) {
      cflags = [ "/Z7" ]  # No PDB file
    } else {
      cflags = [ "/Zi" ]  # Produce PDB file, no edit and continue.
    }
    ldflags = [ "/DEBUG" ]
  } else if (is_wasm) {
    if (wasm_use_dwarf) {
      cflags = [ "-g3" ]
      ldflags = [ "-g3" ]
    } else {
      cflags = [ "-gsource-map" ]
      ldflags = [ "-gsource-map" ]
    }
  } else {
    cflags = [ "-g2" ]
    asmflags = [ "-g" ]
    if (is_apple) {
      swiftflags = [ "-g" ]
    }
  }
}

config("minimal_symbols") {
  if (is_win) {
    # Linker symbols for backtraces only.
    ldflags = [ "/DEBUG" ]
  } else {
    cflags = [ "-g1" ]
    asmflags = [ "-g" ]
  }
}

config("no_symbols") {
  if (!is_win) {
    cflags = [ "-g0" ]
    asmflags = [ "-g0" ]
  }
}

# prevent_unsafe_narrowing ----------------------------------------------------
#
# Warnings that prevent narrowing or comparisons of integer types that are
# likely to cause out-of-bound read/writes or Undefined Behaviour. In
# particular, size_t is used for memory sizes, allocation, indexing, and
# offsets. Using other integer types along with size_t produces risk of
# memory-safety bugs and thus security exploits.
#
# In order to prevent these bugs, allocation sizes were historically limited to
# sizes that can be represented within 31 bits of information, allowing `int` to
# be safely misused instead of `size_t` (https://crbug.com/169327). In order to
# support increasing the allocation limit we require strictly adherence to
# using the correct types, avoiding lossy conversions, and preventing overflow.
# To do so, enable this config and fix errors by converting types to be
# `size_t`, which is both large enough and unsigned, when dealing with memory
# sizes, allocations, indices, or offsets.In cases where type conversion is not
# possible or is superfluous, use base::strict_cast<> or base::checked_cast<>
# to convert to size_t as needed.
# See also: https://docs.google.com/document/d/1CTbQ-5cQjnjU8aCOtLiA7G6P0i5C6HpSDNlSNq6nl5E
#
# To enable in a GN target, use:
#   configs += [ "//build/config/compiler:prevent_unsafe_narrowing" ]
config("prevent_unsafe_narrowing") {
  if (is_clang) {
    cflags = [
      "-Wshorten-64-to-32",
      "-Wimplicit-int-conversion",
      "-Wsign-compare",

      # Avoid bugs of the form `if (size_t i = size; i >= 0; --i)` while
      # fixing types to be sign-correct.
      "-Wtautological-unsigned-zero-compare",
    ]

    if (!is_wasm) {
      # emscripten's headers themselves trigger this warning, so we can't
      # keep this enabled on the wasm target.
      cflags += [ "-Wsign-conversion" ]
    }
  }
}
