# 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 } } }