| # Copyright 2020 The ChromiumOS Authors | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| # Compile a flatbuffer. | |
| # | |
| # flatc_args (optional) | |
| # Arguments passed to flatc. If not specified, the default value is | |
| # ["--cpp", "--keep-prefix"]. If specified, will overwrite the default | |
| # arguments. | |
| # "-I" and "-o" options should not be specified here. Use "flatc_out_dir" | |
| # and "flatc_include_dirs" to specify. | |
| # | |
| # flatc_out_dir (optional) | |
| # Specifies the path suffix that output files are generated under. This | |
| # path will be appended to root_gen_dir. | |
| # | |
| # Targets that depend on the flatbuffer target will be able to include | |
| # the resulting FlatBuffers header with an include like: | |
| # #include "dir/for/my_flatbuffer/buffer_generated.h" | |
| # If undefined, this defaults to matching the input directory for each | |
| # .fbs file (you should almost always use the default mode). | |
| # | |
| # flatc_include_dirs (optional) | |
| # Specifies the directories which FlatBuffers compiler uses to find | |
| # included .fbs files in. Almost always should be empty. | |
| # | |
| # The list always has an implicit first item corresponding to the root of | |
| # the source tree. This enables including .fbs files by absolute path. | |
| # | |
| # The compiler will try the directories in the order given, and if all | |
| # fail it will try to load relative to the directory of the schema file | |
| # being parsed. | |
| # | |
| # deps (optional) | |
| # Additional dependencies. | |
| # | |
| # Parameters for compiling the generated code: | |
| # | |
| # defines (optional) | |
| # Defines to supply to the source set that compiles the generated source | |
| # code. | |
| # | |
| # extra_configs (optional) | |
| # A list of config labels that will be appended to the configs applying | |
| # to the source set. | |
| # | |
| # testonly (optional) | |
| # Boolean to indicate whether the generated source sets should be labeled | |
| # as testonly. | |
| # | |
| # Example: | |
| # flatbuffer("mylib") { | |
| # sources = [ | |
| # "foo.fbs", | |
| # ] | |
| # } | |
| template("flatbuffer") { | |
| assert(defined(invoker.sources), "Need sources for flatbuffers_library") | |
| action_name = "${target_name}_gen" | |
| action_foreach(action_name) { | |
| visibility = [ ":*" ] | |
| script = "//common-mk/file_generator_wrapper.py" | |
| args = [ "flatc" ] | |
| sources = invoker.sources | |
| deps = [] | |
| if (defined(invoker.flatc_out_dir)) { | |
| out_dir = "$root_gen_dir/" + invoker.flatc_out_dir | |
| } else { | |
| out_dir = "{{source_gen_dir}}" | |
| } | |
| outputs = [ "$out_dir/{{source_name_part}}_generated.h" ] | |
| if (defined(invoker.flatc_args)) { | |
| args += invoker.flatc_args | |
| } else { | |
| args += [ | |
| "--cpp", | |
| "--keep-prefix", | |
| ] | |
| } | |
| args += [ | |
| "-o", | |
| "$out_dir", | |
| "-I", | |
| rebase_path("//", root_build_dir), | |
| ] | |
| if (defined(invoker.flatc_include_dirs)) { | |
| foreach(include_dir, invoker.flatc_include_dirs) { | |
| args += [ | |
| "-I", | |
| rebase_path(include_dir, root_build_dir), | |
| ] | |
| } | |
| } | |
| args += [ "{{source}}" ] | |
| # The deps may have steps that have to run before running flatc. | |
| if (defined(invoker.deps)) { | |
| deps += invoker.deps | |
| } | |
| } | |
| source_set(target_name) { | |
| forward_variables_from(invoker, | |
| [ | |
| "visibility", | |
| "defines", | |
| ]) | |
| sources = get_target_outputs(":$action_name") | |
| if (defined(invoker.extra_configs)) { | |
| configs += invoker.extra_configs | |
| } | |
| if (defined(invoker.testonly)) { | |
| testonly = invoker.testonly | |
| } | |
| public_deps = [ ":$action_name" ] | |
| # This will link any libraries in the deps (the use of invoker.deps in the | |
| # action won't link it). | |
| if (defined(invoker.deps)) { | |
| deps += invoker.deps | |
| } | |
| # Same for public_deps. | |
| if (defined(invoker.public_deps)) { | |
| public_deps += invoker.public_deps | |
| } | |
| } | |
| } |