# Copyright 2016 Google Inc. # # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. declare_args() { third_party_isystem = true } 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 (third_party_isystem) { 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" ] } }