# Copyright 2019 The Pigweed Authors # # 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 # # https://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. import("$dir_pw_build/python_script.gni") # Declare a facade. # A Pigweed facade is an API layer that has a single implementation it must link # against. Typically this will be done by pointing `dir_pw_[module]_backend` at # a backend implementation for that module. # # Example facade: # # pw_facade("module_name") { # backend = dir_module_name_backend # public_deps = [ # ":module_api_layer" # ] # } # # Args: # - backend: the dependency that implements this facade # template("pw_facade") { if (invoker.backend == "") { # If backend is not set to anything, emit an error. pw_python_script(target_name) { stamp = true script = "$dir_pw_build/py/null_backend.py" args = [ target_name ] not_needed(invoker, "*") } } else { source_set(target_name) { # If the backend is set, create a new source_set. _ignore_vars = [ "backend", "deps", ] if (defined(invoker.deps)) { deps = invoker.deps } else { deps = [] } deps += [ invoker.backend ] forward_variables_from(invoker, "*", _ignore_vars) } } }