| # Copyright 2022 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("//build_overrides/pi_pico.gni") |
| import("//build_overrides/pigweed.gni") |
| |
| import("$dir_pw_build/target_types.gni") |
| |
| # Generates a pico/config_autogen.h file as part of a source set that provides |
| # the required include directory as a public config. |
| # |
| # Example contents: |
| # |
| # // AUTO GENERATED BY A GN generate_config_header TARGET |
| # #include "boards/pico.h" |
| # #include "cmsis/rename_exceptions.h" |
| # |
| # Arguments: |
| # config_header_files (required): Includes that should be written to the |
| # generated header file. |
| template("generate_config_header") { |
| assert(defined(invoker.config_header_files), "No headers provided") |
| |
| _generated_header_dir = "${target_gen_dir}/${target_name}_include" |
| _generated_header_path = "${_generated_header_dir}/pico/config_autogen.h" |
| |
| # Provide the include path so the header is exposed when targets depend on |
| # the generate_config_header target. |
| config("${target_name}.public_include_dirs") { |
| include_dirs = [ "${_generated_header_dir}" ] |
| } |
| |
| # Actually generate config_autogen.h. |
| generated_file("${target_name}.generated_header") { |
| outputs = [ "${_generated_header_path}" ] |
| _lines = [ "// AUTO GENERATED BY A GN generate_config_header TARGET" ] |
| foreach(_header, invoker.config_header_files) { |
| _lines += [ "#include \"${_header}\"" ] |
| } |
| |
| # Join with newline. |
| _NEWLINE_CHAR = "$0x0A" |
| contents = string_join(_NEWLINE_CHAR, _lines) |
| } |
| |
| # This source set bundles up the generated header such that depending on |
| # this template will allow targets to include "pico/config_autogen.h". |
| pw_source_set("${target_name}") { |
| remove_configs = [ "$dir_pw_build:strict_warnings" ] |
| public_configs = [ ":${target_name}.public_include_dirs" ] |
| deps = [ ":${target_name}.generated_header" ] |
| public = [ "${_generated_header_path}" ] |
| forward_variables_from(invoker, "*", [ "config_header_files" ]) |
| } |
| } |