blob: 4b32bb20fb6674d9deb9751ca9b06751c69c870b [file] [log] [blame]
# Copyright 2014 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("config.gni")
if (is_clang) {
import("//build/config/clang/clang.gni")
}
visibility = [ "//third_party/blink/*" ]
# arguments --------------------------------------------------------------------
declare_args() {
# Set to true to enable the clang plugin that checks the usage of the Blink
# garbage-collection infrastructure during compilation.
blink_gc_plugin = true
# Set to true to have the clang Blink GC plugin emit class graph (in JSON)
# with typed pointer edges; for debugging or other (internal) uses.
blink_gc_plugin_option_do_dump_graph = false
# Set to true to have the clang Blink GC plugin additionally check if
# a class has an empty destructor which would be unnecessarily invoked
# when finalized.
blink_gc_plugin_option_warn_unneeded_finalizer = false
# Set to true to have the clang Blink GC plugin additionally check if a
# TraceWrappers method also dispatches to all its base classes.
blink_gc_plugin_option_warn_trace_wrappers_missing_base_dispatch = false
}
# features ---------------------------------------------------------------------
config("features") {
defines = feature_defines_list
}
# inside_blink -----------------------------------------------------------------
config("inside_blink") {
defines = [
"BLINK_IMPLEMENTATION=1",
"INSIDE_BLINK",
]
}
# blink_pch --------------------------------------------------------------------
# Precompiled headers can save a lot of time compiling since Blink has
# a lot of source in header files.
import("//build/config/pch.gni")
config("blink_pch") {
if (enable_precompiled_headers) {
if (is_win) {
# This is a string rather than a file GN knows about. It has to match
# exactly what's in the /FI flag below, and what might appear in the
# source code in quotes for an #include directive.
precompiled_header = rebase_path("build/win/precompile.h", root_build_dir)
# This is a file that GN will compile with the above header. It will be
# implicitly added to the sources (potentially multiple times, with one
# variant for each language used in the target).
precompiled_source =
"//third_party/blink/renderer/build/win/precompile.cc"
# Force include the header.
cflags = [ "/FI$precompiled_header" ]
} else if (is_mac) {
precompiled_source = "//third_party/blink/renderer/build/mac/prefix.h"
}
}
}
# config -----------------------------------------------------------------------
config("config") {
include_dirs = [
".",
"..",
"$root_gen_dir/third_party/blink/renderer",
"$root_gen_dir/third_party/blink",
]
cflags = []
defines = []
if (is_win) {
cflags += [
"/wd4305", # Truncation from 'type1' to 'type2'.
"/wd4324", # Struct padded due to declspec(align).
"/wd4714", # Function marked forceinline not inlined.
"/wd4800", # Value forced to bool.
"/wd4996", # Deprecated function call.
]
}
if (is_win) {
if (is_component_build) {
defines += [ "USING_V8_SHARED" ]
}
}
if (is_clang && blink_gc_plugin && clang_use_chrome_plugins) {
# On Windows, the plugin is built directly into clang, so there's
# no need to load it dynamically.
if (host_os != "win") {
_blink_gc_plugin_dll_extension = "so"
if (host_os == "mac") {
_blink_gc_plugin_dll_extension = "dylib"
}
cflags += [
"-Xclang",
"-load",
"-Xclang",
rebase_path(
"${clang_base_path}/lib/libBlinkGCPlugin.${_blink_gc_plugin_dll_extension}",
root_build_dir),
]
}
cflags += [
"-Xclang",
"-add-plugin",
"-Xclang",
"blink-gc-plugin",
]
# Add arguments for enabled GC plugin options:
if (blink_gc_plugin_option_do_dump_graph) {
cflags += [
"-Xclang",
"-plugin-arg-blink-gc-plugin",
"-Xclang",
"dump-graph",
]
}
if (blink_gc_plugin_option_warn_unneeded_finalizer) {
cflags += [
"-Xclang",
"-plugin-arg-blink-gc-plugin",
"-Xclang",
"warn-unneeded-finalizer",
]
}
if (blink_gc_plugin_option_warn_trace_wrappers_missing_base_dispatch) {
cflags += [
"-Xclang",
"-plugin-arg-blink-gc-plugin",
"-Xclang",
"warn_trace_wrappers_missing_base_dispatch",
]
}
}
}
# The follow configs apply to all targets except for unit tests, which rely on
# static initializers.
config("non_test_config") {
cflags = []
if (is_clang) {
cflags += [ "-Wglobal-constructors" ]
}
}