1*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2016 Google Inc. 2*c8dee2aaSAndroid Build Coastguard Worker# 3*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 4*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file. 5*c8dee2aaSAndroid Build Coastguard Worker 6*c8dee2aaSAndroid Build Coastguard Workerdeclare_args() { 7*c8dee2aaSAndroid Build Coastguard Worker third_party_isystem = true 8*c8dee2aaSAndroid Build Coastguard Worker} 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Workertemplate("third_party_config") { 11*c8dee2aaSAndroid Build Coastguard Worker enabled = !defined(invoker.enabled) || invoker.enabled 12*c8dee2aaSAndroid Build Coastguard Worker config(target_name) { 13*c8dee2aaSAndroid Build Coastguard Worker if (enabled) { 14*c8dee2aaSAndroid Build Coastguard Worker forward_variables_from(invoker, "*", [ "include_dirs" ]) 15*c8dee2aaSAndroid Build Coastguard Worker cflags = [] 16*c8dee2aaSAndroid Build Coastguard Worker if (is_win) { 17*c8dee2aaSAndroid Build Coastguard Worker include_dirs = invoker.include_dirs 18*c8dee2aaSAndroid Build Coastguard Worker if (is_clang) { 19*c8dee2aaSAndroid Build Coastguard Worker foreach(dir, invoker.include_dirs) { 20*c8dee2aaSAndroid Build Coastguard Worker cflags += [ 21*c8dee2aaSAndroid Build Coastguard Worker "/imsvc", 22*c8dee2aaSAndroid Build Coastguard Worker rebase_path(dir), 23*c8dee2aaSAndroid Build Coastguard Worker ] 24*c8dee2aaSAndroid Build Coastguard Worker } 25*c8dee2aaSAndroid Build Coastguard Worker } 26*c8dee2aaSAndroid Build Coastguard Worker } else { 27*c8dee2aaSAndroid Build Coastguard Worker foreach(dir, invoker.include_dirs) { 28*c8dee2aaSAndroid Build Coastguard Worker if (third_party_isystem) { 29*c8dee2aaSAndroid Build Coastguard Worker cflags += [ 30*c8dee2aaSAndroid Build Coastguard Worker "-isystem", 31*c8dee2aaSAndroid Build Coastguard Worker rebase_path(dir), 32*c8dee2aaSAndroid Build Coastguard Worker ] 33*c8dee2aaSAndroid Build Coastguard Worker } else { 34*c8dee2aaSAndroid Build Coastguard Worker cflags += [ 35*c8dee2aaSAndroid Build Coastguard Worker "-I", 36*c8dee2aaSAndroid Build Coastguard Worker rebase_path(dir), 37*c8dee2aaSAndroid Build Coastguard Worker ] 38*c8dee2aaSAndroid Build Coastguard Worker } 39*c8dee2aaSAndroid Build Coastguard Worker } 40*c8dee2aaSAndroid Build Coastguard Worker } 41*c8dee2aaSAndroid Build Coastguard Worker } else { 42*c8dee2aaSAndroid Build Coastguard Worker not_needed(invoker, "*") 43*c8dee2aaSAndroid Build Coastguard Worker } 44*c8dee2aaSAndroid Build Coastguard Worker } 45*c8dee2aaSAndroid Build Coastguard Worker} 46*c8dee2aaSAndroid Build Coastguard Worker 47*c8dee2aaSAndroid Build Coastguard Workertemplate("third_party") { 48*c8dee2aaSAndroid Build Coastguard Worker enabled = !defined(invoker.enabled) || invoker.enabled 49*c8dee2aaSAndroid Build Coastguard Worker third_party_config(target_name + "_public") { 50*c8dee2aaSAndroid Build Coastguard Worker if (enabled) { 51*c8dee2aaSAndroid Build Coastguard Worker if (defined(invoker.public_defines)) { 52*c8dee2aaSAndroid Build Coastguard Worker defines = invoker.public_defines 53*c8dee2aaSAndroid Build Coastguard Worker } 54*c8dee2aaSAndroid Build Coastguard Worker include_dirs = invoker.public_include_dirs 55*c8dee2aaSAndroid Build Coastguard Worker } else { 56*c8dee2aaSAndroid Build Coastguard Worker not_needed(invoker, "*") 57*c8dee2aaSAndroid Build Coastguard Worker } 58*c8dee2aaSAndroid Build Coastguard Worker } 59*c8dee2aaSAndroid Build Coastguard Worker 60*c8dee2aaSAndroid Build Coastguard Worker # You can't make a static_library() without object files to archive, 61*c8dee2aaSAndroid Build Coastguard Worker # but we can treat targets without object files as a source_set(). 62*c8dee2aaSAndroid Build Coastguard Worker if (defined(invoker.sources)) { 63*c8dee2aaSAndroid Build Coastguard Worker _mode = "static_library" 64*c8dee2aaSAndroid Build Coastguard Worker } else { 65*c8dee2aaSAndroid Build Coastguard Worker _mode = "source_set" 66*c8dee2aaSAndroid Build Coastguard Worker } 67*c8dee2aaSAndroid Build Coastguard Worker 68*c8dee2aaSAndroid Build Coastguard Worker target(_mode, target_name) { 69*c8dee2aaSAndroid Build Coastguard Worker if (enabled) { 70*c8dee2aaSAndroid Build Coastguard Worker # set_defaults(_mode) might not exist or set configs 71*c8dee2aaSAndroid Build Coastguard Worker if (!defined(configs)) { 72*c8dee2aaSAndroid Build Coastguard Worker configs = [] 73*c8dee2aaSAndroid Build Coastguard Worker } 74*c8dee2aaSAndroid Build Coastguard Worker if (is_debug) { 75*c8dee2aaSAndroid Build Coastguard Worker configs += [ "../../gn/skia:optimize" ] 76*c8dee2aaSAndroid Build Coastguard Worker } 77*c8dee2aaSAndroid Build Coastguard Worker configs += [ "../../gn/skia:recover_pointer_overflow" ] 78*c8dee2aaSAndroid Build Coastguard Worker 79*c8dee2aaSAndroid Build Coastguard Worker # "*" clobbers the current scope; append to existing configs 80*c8dee2aaSAndroid Build Coastguard Worker forward_variables_from(invoker, 81*c8dee2aaSAndroid Build Coastguard Worker "*", 82*c8dee2aaSAndroid Build Coastguard Worker [ 83*c8dee2aaSAndroid Build Coastguard Worker "public_include_dirs", 84*c8dee2aaSAndroid Build Coastguard Worker "configs", 85*c8dee2aaSAndroid Build Coastguard Worker ]) 86*c8dee2aaSAndroid Build Coastguard Worker if (defined(invoker.configs)) { 87*c8dee2aaSAndroid Build Coastguard Worker configs += invoker.configs 88*c8dee2aaSAndroid Build Coastguard Worker } 89*c8dee2aaSAndroid Build Coastguard Worker public_configs = [ ":" + target_name + "_public" ] 90*c8dee2aaSAndroid Build Coastguard Worker 91*c8dee2aaSAndroid Build Coastguard Worker # Warnings are just noise if we're not maintaining the code. 92*c8dee2aaSAndroid Build Coastguard Worker if (!defined(cflags)) { 93*c8dee2aaSAndroid Build Coastguard Worker cflags = [] 94*c8dee2aaSAndroid Build Coastguard Worker } 95*c8dee2aaSAndroid Build Coastguard Worker if (is_win) { 96*c8dee2aaSAndroid Build Coastguard Worker cflags += [ "/w" ] 97*c8dee2aaSAndroid Build Coastguard Worker } else { 98*c8dee2aaSAndroid Build Coastguard Worker cflags += [ "-w" ] 99*c8dee2aaSAndroid Build Coastguard Worker } 100*c8dee2aaSAndroid Build Coastguard Worker } 101*c8dee2aaSAndroid Build Coastguard Worker } 102*c8dee2aaSAndroid Build Coastguard Worker} 103*c8dee2aaSAndroid Build Coastguard Worker 104*c8dee2aaSAndroid Build Coastguard Workertemplate("system") { 105*c8dee2aaSAndroid Build Coastguard Worker config(target_name + "_public") { 106*c8dee2aaSAndroid Build Coastguard Worker forward_variables_from(invoker, "*", []) 107*c8dee2aaSAndroid Build Coastguard Worker } 108*c8dee2aaSAndroid Build Coastguard Worker group(target_name) { 109*c8dee2aaSAndroid Build Coastguard Worker public_configs = [ ":" + target_name + "_public" ] 110*c8dee2aaSAndroid Build Coastguard Worker } 111*c8dee2aaSAndroid Build Coastguard Worker} 112