| # Helper file to convert text format protobuf files to binary format. |
| |
| # Note: This file is similar to proto_library.gni, but is kept separate because |
| # - They expect different inputs/outputs: both rules would have to set default |
| # values for variables that are not really sensible. |
| |
| # To use this rule, add a target to your gn file defining: |
| # protoc_proto_dir: The directory where the proto definition can be found. |
| # protoc_proto_def: Relative path to proto definition from |protoc_proto_dir|. |
| # protoc_message_name: The fully qualified name of the message contained in |
| # the protobuf. |
| # protoc_text_dir: The directory where the text format protobuf[s] can be found. |
| # protoc_bin_dir: The full path to the output directory. Note that this path is |
| # not relative to the <(SHARED_INTERMEDIATE_DIR). You must ensure that this |
| # directory is unique across all platform2 projects to avoid collisions. One |
| # way to do this is to include your project name in the directory path. |
| # Finally, specify the protobuf files in text format as the sources. These files |
| # should have a '.prototxt' file extension. |
| template("protoc_text_to_bin") { |
| action_name = "${target_name}_gen" |
| action_foreach(action_name) { |
| visibility = [ ":*" ] |
| |
| forward_variables_from(invoker, |
| [ |
| "protoc_bin_dir", |
| "protoc_message_name", |
| "protoc_proto_dir", |
| "protoc_proto_def", |
| "protoc_text_dir", |
| |
| # Sources might be generated by actions in deps, |
| # which must be explicitly specified. |
| "deps", |
| ]) |
| |
| protoc_proto_dir = rebase_path(protoc_proto_dir) |
| protoc_text_dir = rebase_path(protoc_text_dir) |
| |
| sources = invoker.sources |
| |
| script = "//common-mk/file_generator_wrapper.py" |
| args = [ |
| "protoc", |
| "--proto_path", |
| "${protoc_proto_dir}", |
| "--encode", |
| "${protoc_message_name}", |
| "--protobuf_in", |
| "${protoc_text_dir}/{{source_file_part}}", |
| "--protobuf_out", |
| "${protoc_bin_dir}/{{source_name_part}}.pbf", |
| "${protoc_proto_dir}/${protoc_proto_def}", |
| ] |
| outputs = [ "${protoc_bin_dir}/{{source_name_part}}.pbf" ] |
| } |
| |
| source_set(target_name) { |
| forward_variables_from(invoker, |
| [ |
| "defines", |
| "visibility", |
| ]) |
| if (defined(invoker.configs)) { |
| configs += invoker.configs |
| } |
| data = get_target_outputs(":${action_name}") |
| deps = [ ":${action_name}" ] |
| if (defined(invoker.deps)) { |
| deps += invoker.deps |
| } |
| } |
| } |