| # Create a source_set with generated stubs for a POSIX shared library. |
| # |
| # Based on C-style signatures, it will generate a source and a header file |
| # and expose it as a source_set. |
| # |
| # See //tools/generate_stubs/generate_stubs.py for more info. |
| # |
| # Variables |
| # sigs: list of files with C-style signatures (*.sig) |
| # output_name: name of the generated files: $output_name.h and $output_name.cc |
| # extra_header: prepend the contents of this file to the generated .cc file |
| # logging_function: override the used logging function (default: VLOG(1)) |
| # logging_include: override the additional include (default: base/logging.h) |
| # path_from_source: relative path of generated files from the project root |
| # |
| # Example |
| # generate_stubs("libfoo_stubs") { |
| # sigs = [ "foo/foo.sigs" ] |
| # extra_header = "foo/foo_stub_header.fragment" |
| # output_name = "foo/foo_stubs" |
| # deps = [ |
| # "//base", |
| # ] |
| # } |
| # |
| # Targets that depend on this target can `#include "path/to/foo/foo_stubs.h"` |
| template("generate_stubs") { |
| forward_variables_from(invoker, [ "testonly" ]) |
| |
| _gen_dir = get_path_info(invoker.output_name, "gen_dir") |
| |
| action("${target_name}__stubs_gen") { |
| script = "//tools/generate_stubs/generate_stubs.py" |
| sources = invoker.sigs |
| inputs = [ |
| invoker.extra_header, |
| ] |
| outputs = [ |
| "${target_gen_dir}/${invoker.output_name}.cc", |
| "${target_gen_dir}/${invoker.output_name}.h", |
| ] |
| args = [ |
| "--intermediate_dir", |
| rebase_path(_gen_dir, root_build_dir), |
| "--output", |
| rebase_path(_gen_dir, root_build_dir), |
| "--type", |
| "posix_stubs", |
| "--extra_stub_header", |
| rebase_path(invoker.extra_header, root_build_dir), |
| "--stubfile_name", |
| get_path_info(invoker.output_name, "name"), |
| "--path_from_source", |
| rebase_path(_gen_dir, root_gen_dir), |
| ] |
| if (defined(invoker.path_from_source)) { |
| args += [ |
| "--path_from_source", |
| invoker.path_from_source, |
| ] |
| } else { |
| args += [ |
| "--path_from_source", |
| rebase_path(_gen_dir, root_gen_dir), |
| ] |
| } |
| if (defined(invoker.logging_function)) { |
| args += [ |
| "--logging-function", |
| invoker.logging_function, |
| ] |
| } |
| if (defined(invoker.logging_include)) { |
| args += [ |
| "--logging-include", |
| invoker.logging_include, |
| ] |
| } |
| args += rebase_path(invoker.sigs, root_build_dir) |
| } |
| |
| source_set(target_name) { |
| forward_variables_from(invoker, |
| [ |
| "deps", |
| "public_deps", |
| "visibility", |
| ]) |
| if (!defined(public_deps)) { |
| public_deps = [] |
| } |
| public_deps += [ ":${target_name}__stubs_gen" ] |
| sources = [ |
| "${target_gen_dir}/${invoker.output_name}.cc", |
| "${target_gen_dir}/${invoker.output_name}.h", |
| ] |
| libs = [ "dl" ] |
| include_dirs = [ target_gen_dir ] |
| if (defined(invoker.configs)) { |
| configs += invoker.configs |
| } |
| } |
| } |