| # Copyright 2017 Google Inc. All Rights Reserved. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| # The delegated_config template defines a family of configs which delegate to |
| # real implementations elsewhere. The most notable use of this template is to |
| # define toolchain-independent compiler configs, such as |
| # //starboard/build/config:rtti (and its sisters :no_rtti and :default_rtti). |
| # |
| # The simplest way to use delegated_config is to specify only a path: |
| # |
| # delegated_config("rtti") { |
| # path = "//$starboard_path" |
| # } |
| # |
| # The sample code above will expand to: |
| # |
| # config("rtti") { |
| # configs = [ "//$starboard_path:rtti" ] |
| # } |
| # |
| # config("no_rtti") { |
| # configs = [ "//$starboard_path:no_rtti" ] |
| # } |
| # |
| # config("default_rtti") { |
| # configs = [ "//$starboard_path:default_rtti" ] |
| # } |
| # |
| # The BUILD.gn file is then expected to define each of those three configs (or |
| # further delegate them to e.g. a toolchain's implementation). |
| # |
| # To use a different list of prefixes, set the prefixes option: |
| # |
| # delegated_config("optimizations") { |
| # path = "//$starboard_path" |
| # prefixes = [ "no", "debuggable", "full" ] |
| # } |
| # |
| # This will expand to: |
| # |
| # config("no_optimizations") { |
| # configs = [ "//$starboard_path:no_optimizations" ] |
| # } |
| # |
| # config("debuggable_optimizations") { |
| # configs = [ "//$starboard_path:debuggable_optimizations" ] |
| # } |
| # |
| # config("full_optimizations") { |
| # configs = [ "//$starboard_path:full_optimizations" ] |
| # } |
| # |
| # config("default_optimizations") { |
| # configs = [ "//$starboard_path:default_optimizations" ] |
| # } |
| # |
| # Note that the default_optimizations config is generated, even though it is |
| # not in the list of prefixes. If you don't want the default_optimizations |
| # config to be generated, set generate_default = false: |
| # |
| # delegated_config("optimizations") { |
| # path = "//$starboard_path" |
| # prefixes = [ "no", "debuggable", "full" ] |
| # generate_default = false |
| # } |
| # |
| # Now only the no_, debuggable_, and full_ configs will be generated. |
| |
| template("delegated_config") { |
| assert(defined(invoker.path), |
| "You need to specify a path to the implementation") |
| |
| if (defined(invoker.prefixes)) { |
| prefixes = invoker.prefixes |
| } else { |
| prefixes = [ "", "no" ] |
| } |
| |
| foreach(prefix, prefixes) { |
| assert(prefix != "default", |
| "You shouldn't include \"default\" in the list of prefixes " + |
| "because it's separately generated.") |
| |
| if (prefix == "") { |
| prefix_ = prefix |
| } else { |
| prefix_ = "${prefix}_" |
| } |
| |
| config("$prefix_$target_name") { |
| configs = [ "${invoker.path}:$prefix_$target_name" ] |
| } |
| } |
| |
| if (!(defined(invoker.generate_default) && !invoker.generate_default)) { |
| config("default_$target_name") { |
| configs = [ "${invoker.path}:default_$target_name" ] |
| } |
| } |
| } |