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

import("clang.gni")

config("find_bad_constructs") {
  if (clang_use_chrome_plugins) {
    cflags = []

    # The plugin is built directly into clang, so there's no need to load it
    # dynamically.
    cflags += [
      "-Xclang",
      "-add-plugin",
      "-Xclang",
      "find-bad-constructs",

      "-Xclang",
      "-plugin-arg-find-bad-constructs",
      "-Xclang",
      "raw-ref-template-as-trivial-member",

      "-Xclang",
      "-plugin-arg-find-bad-constructs",
      "-Xclang",
      "check-stack-allocated",
    ]

    if (is_linux || is_chromeos || is_android || is_fuchsia) {
      cflags += [
        "-Xclang",
        "-plugin-arg-find-bad-constructs",
        "-Xclang",
        "check-ipc",
      ]
    }

    if (enable_check_raw_ptr_fields) {
      cflags += [
        "-Xclang",
        "-plugin-arg-find-bad-constructs",
        "-Xclang",
        "check-raw-ptr-fields",

        # TODO(keishi): Remove this once crrev.com/c/4387753 is rolled out.
        "-Xclang",
        "-plugin-arg-find-bad-constructs",
        "-Xclang",
        "raw-ptr-exclude-path=base/no_destructor.h",

        # TODO(keishi): Remove this once crrev.com/c/4086161 lands.
        "-Xclang",
        "-plugin-arg-find-bad-constructs",
        "-Xclang",
        "raw-ptr-exclude-path=base/containers/span.h",
      ]
    }
  }
}

# Enables some extra Clang-specific warnings. Some third-party code won't
# compile with these so may want to remove this config.
config("extra_warnings") {
  cflags = [
    "-Wheader-hygiene",

    # Warns when a const char[] is converted to bool.
    "-Wstring-conversion",

    "-Wtautological-overlap-compare",
  ]
}

group("llvm-symbolizer_data") {
  if (is_win) {
    data = [ "$clang_base_path/bin/llvm-symbolizer.exe" ]
  } else {
    data = [ "$clang_base_path/bin/llvm-symbolizer" ]
  }
}
