| # Copyright (c) 2020 Project CHIP 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 |
| # |
| # 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. |
| |
| # Copyright 2015 The Chromium Authors. All rights reserved. |
| # |
| # Redistribution and use in source and binary forms, with or without |
| # modification, are permitted provided that the following conditions are |
| # met: |
| # |
| # * Redistributions of source code must retain the above copyright |
| # notice, this list of conditions and the following disclaimer. |
| # * Redistributions in binary form must reproduce the above |
| # copyright notice, this list of conditions and the following disclaimer |
| # in the documentation and/or other materials provided with the |
| # distribution. |
| # * Neither the name of Google Inc. nor the names of its |
| # contributors may be used to endorse or promote products derived from |
| # this software without specific prior written permission. |
| # |
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| |
| # Generates a header with preprocessor defines specified by the build file. |
| # |
| # In the GN template, specify build defines in the template as a list |
| # of strings that encode key/value pairs like this: |
| # |
| # defines = [ "ENABLE_FOO=1", "ENABLE_BAR=$enable_bar" ] |
| # |
| # The GN values "true" and "false" will be mapped to 0 and 1 for boolean |
| # #if defines to be expressed naturally. This means you can't directly make a |
| # define that generates C++ value of true or false for use in code. If you |
| # REALLY need this, you can also use the string "(true)" and "(false)" to |
| # prevent the rewriting. |
| |
| # To check the value of the define in C code: |
| # |
| # #include "path/to/here/header_file.h" |
| # |
| # #if ENABLE_FOO |
| # ... |
| # #endif |
| # |
| # const char kSpamServerUrl[] = SPAM_SERVER_URL; |
| # |
| # Template parameters |
| # |
| # defines [required, list of strings] |
| # Defines as described above. |
| # |
| # header [required, string] |
| # File name for generated header. By default, this will go in the |
| # generated file directory for this target, and you would include it |
| # with: |
| # #include "<path_to_this_BUILD_file>/<header>" |
| # |
| # header_dir [optional, string] |
| # Override the default location of the generated header. The string will |
| # be treated as a subdirectory of the root_gen_dir. For example: |
| # header_dir = "foo/bar" |
| # Then you can include the header as: |
| # #include "foo/bar/baz.h" |
| # |
| # deps, public_deps, testonly, visibility |
| # Normal meaning. |
| # |
| # Example |
| # |
| # buildconfig_header("foo_buildconfig") { |
| # header = "foo_buildconfig.h" |
| # |
| # defines = [ |
| # # This uses the GN build argument enable_doom_melon as the definition. |
| # "ENABLE_DOOM_MELON=$enable_doom_melon", |
| # |
| # # This force-enables the define |
| # "ENABLE_SPACE_LASER=true", |
| # |
| # # This will expand to the quoted C string when used in source code. |
| # "SPAM_SERVER_URL=\"http://www.example.com/\"", |
| # ] |
| # } |
| |
| import("//build_overrides/build.gni") |
| import("//build_overrides/chip.gni") |
| |
| template("buildconfig_header") { |
| source_set_name = target_name |
| gen_target_name = "gen_${target_name}" |
| |
| action(gen_target_name) { |
| script = "${chip_root}/build/chip/write_buildconfig_header.py" |
| |
| if (defined(invoker.header_dir)) { |
| header_file = "${invoker.header_dir}/${invoker.header}" |
| } else { |
| # Compute the path from the root to this file. |
| header_file = rebase_path(".", "//") + "/${invoker.header}" |
| } |
| |
| include_dir = "${root_gen_dir}/include" |
| |
| outputs = [ "${include_dir}/${header_file}" ] |
| |
| # Always write --defines to the file so it's not empty. Empty will confuse GN |
| # into thinking the response file isn't used. |
| response_file_contents = [ "--defines" ] |
| if (defined(invoker.defines)) { |
| response_file_contents += invoker.defines |
| } |
| |
| args = [ |
| "--output", |
| header_file, # Not rebased, Python script puts it inside gen-dir. |
| "--rulename", |
| get_label_info(":$target_name", "label_no_toolchain"), |
| "--gen-dir", |
| rebase_path(include_dir, root_build_dir), |
| "--definitions", |
| "{{response_file_name}}", |
| ] |
| |
| visibility = [ ":${source_set_name}" ] |
| } |
| |
| source_set(source_set_name) { |
| sources = get_target_outputs(":${gen_target_name}") |
| |
| deps = [ ":${gen_target_name}" ] |
| |
| forward_variables_from(invoker, |
| [ |
| "deps", |
| "public_deps", |
| "testonly", |
| "visibility", |
| ]) |
| } |
| } |