skia2/third_party/third_party.gni
Ben Wagner 36e67aa869 Mark dawn and shaderc as third_party.
This introduces a 'third_party_config' gn template which forwards any
include_dirs as cflag system dirs. This is then used on the dawn and
shaderc configs to suppress warnings from use of their headers in Skia.
This route was chosen as a way to minimize the diff with the upstream
BUILD.gn files for these projects for easier updates.

It would be nice if gn could handle this in the build system, since it
isn't good to hide include directories from gn this way. The gn issue
https://bugs.chromium.org/p/gn/issues/detail?id=157 was created to track
gn being able to do this in a cleaner way.

Change-Id: I2d17d099db7b3d8b5a960576ca0535a22badd902
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/281356
Auto-Submit: Ben Wagner <bungeman@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
2020-04-03 20:46:14 +00:00

103 lines
2.4 KiB
Plaintext

# Copyright 2016 Google Inc.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
template("third_party_config") {
enabled = !defined(invoker.enabled) || invoker.enabled
config(target_name) {
if (enabled) {
forward_variables_from(invoker, "*", [ "include_dirs" ])
cflags = []
if (is_win) {
include_dirs = invoker.include_dirs
if (is_clang) {
foreach(dir, invoker.include_dirs) {
cflags += [
"/imsvc",
rebase_path(dir),
]
}
}
} else {
foreach(dir, invoker.include_dirs) {
if (werror) {
cflags += [
"-isystem",
rebase_path(dir),
]
} else {
cflags += [
"-I",
rebase_path(dir),
]
}
}
}
} else {
not_needed(invoker, "*")
}
}
}
template("third_party") {
enabled = !defined(invoker.enabled) || invoker.enabled
third_party_config(target_name + "_public") {
if (enabled) {
if (defined(invoker.public_defines)) {
defines = invoker.public_defines
}
include_dirs = invoker.public_include_dirs
} else {
not_needed(invoker, "*")
}
}
# You can't make a static_library() without object files to archive,
# but we can treat targets without object files as a source_set().
if (defined(invoker.sources)) {
_mode = "static_library"
} else {
_mode = "source_set"
}
target(_mode, target_name) {
if (enabled) {
forward_variables_from(invoker, "*", [ "public_include_dirs" ])
public_configs = [ ":" + target_name + "_public" ]
# Warnings are just noise if we're not maintaining the code.
if (is_win) {
cflags = [ "/w" ]
} else {
cflags = [ "-w" ]
}
}
}
}
set_defaults("third_party") {
configs = default_configs
if (!is_official_build) {
# Official builds don't have warnings to begin with.
configs -= [ "//gn:warnings" ]
}
if (is_debug) {
configs += [ "//gn:optimize" ]
}
if (sanitize == "ASAN") {
configs += [ "//gn:recover_pointer_overflow" ]
}
}
template("system") {
config(target_name + "_public") {
forward_variables_from(invoker, "*", [])
}
group(target_name) {
public_configs = [ ":" + target_name + "_public" ]
}
}