15f9996aaSopenharmony_ci# Copyright (c) 2013 The Chromium Authors. All rights reserved.
25f9996aaSopenharmony_ci# Use of this source code is governed by a BSD-style license that can be
35f9996aaSopenharmony_ci# found in the LICENSE file.
45f9996aaSopenharmony_ci
55f9996aaSopenharmony_ciimport("clang.gni")
65f9996aaSopenharmony_ci
75f9996aaSopenharmony_ciconfig("find_bad_constructs") {
85f9996aaSopenharmony_ci  if (clang_use_chrome_plugins) {
95f9996aaSopenharmony_ci    cflags = []
105f9996aaSopenharmony_ci
115f9996aaSopenharmony_ci    # On Windows, the plugin is built directly into clang, so there's
125f9996aaSopenharmony_ci    # no need to load it dynamically.
135f9996aaSopenharmony_ci    if (host_os == "mac") {
145f9996aaSopenharmony_ci      cflags += [
155f9996aaSopenharmony_ci        "-Xclang",
165f9996aaSopenharmony_ci        "-load",
175f9996aaSopenharmony_ci        "-Xclang",
185f9996aaSopenharmony_ci        rebase_path("${clang_base_path}/lib/libFindBadConstructs.dylib",
195f9996aaSopenharmony_ci                    root_build_dir),
205f9996aaSopenharmony_ci      ]
215f9996aaSopenharmony_ci    } else if (host_os == "linux") {
225f9996aaSopenharmony_ci      cflags += [
235f9996aaSopenharmony_ci        "-Xclang",
245f9996aaSopenharmony_ci        "-load",
255f9996aaSopenharmony_ci        "-Xclang",
265f9996aaSopenharmony_ci        rebase_path("${clang_base_path}/lib/libFindBadConstructs.so",
275f9996aaSopenharmony_ci                    root_build_dir),
285f9996aaSopenharmony_ci      ]
295f9996aaSopenharmony_ci    }
305f9996aaSopenharmony_ci
315f9996aaSopenharmony_ci    cflags += [
325f9996aaSopenharmony_ci      "-Xclang",
335f9996aaSopenharmony_ci      "-add-plugin",
345f9996aaSopenharmony_ci      "-Xclang",
355f9996aaSopenharmony_ci      "find-bad-constructs",
365f9996aaSopenharmony_ci    ]
375f9996aaSopenharmony_ci
385f9996aaSopenharmony_ci    cflags += [
395f9996aaSopenharmony_ci      "-Xclang",
405f9996aaSopenharmony_ci      "-plugin-arg-find-bad-constructs",
415f9996aaSopenharmony_ci      "-Xclang",
425f9996aaSopenharmony_ci      "enforce-in-thirdparty-webkit",
435f9996aaSopenharmony_ci    ]
445f9996aaSopenharmony_ci
455f9996aaSopenharmony_ci    cflags += [
465f9996aaSopenharmony_ci      "-Xclang",
475f9996aaSopenharmony_ci      "-plugin-arg-find-bad-constructs",
485f9996aaSopenharmony_ci      "-Xclang",
495f9996aaSopenharmony_ci      "check-enum-max-value",
505f9996aaSopenharmony_ci    ]
515f9996aaSopenharmony_ci
525f9996aaSopenharmony_ci    if (is_linux || is_ohos) {
535f9996aaSopenharmony_ci      cflags += [
545f9996aaSopenharmony_ci        "-Xclang",
555f9996aaSopenharmony_ci        "-plugin-arg-find-bad-constructs",
565f9996aaSopenharmony_ci        "-Xclang",
575f9996aaSopenharmony_ci        "check-ipc",
585f9996aaSopenharmony_ci      ]
595f9996aaSopenharmony_ci    }
605f9996aaSopenharmony_ci  }
615f9996aaSopenharmony_ci}
625f9996aaSopenharmony_ci
635f9996aaSopenharmony_ci# Enables some extra Clang-specific warnings. Some third-party code won't
645f9996aaSopenharmony_ci# compile with these so may want to remove this config.
655f9996aaSopenharmony_ciconfig("extra_warnings") {
665f9996aaSopenharmony_ci  cflags = [
675f9996aaSopenharmony_ci    "-Wheader-hygiene",
685f9996aaSopenharmony_ci
695f9996aaSopenharmony_ci    # Warns when a const char[] is converted to bool.
705f9996aaSopenharmony_ci    "-Wstring-conversion",
715f9996aaSopenharmony_ci    "-Wtautological-overlap-compare",
725f9996aaSopenharmony_ci  ]
735f9996aaSopenharmony_ci}
74