You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
3.0 KiB
104 lines
3.0 KiB
# Copyright 2019 The Chromium Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
template("proto_library") {
|
|
assert(defined(invoker.sources), "Need sources for proto_library")
|
|
proto_sources = invoker.sources
|
|
|
|
proto_in_dir = rebase_path(get_path_info(proto_sources[0], "dir"), ".")
|
|
|
|
if (defined(invoker.proto_out_dir)) {
|
|
proto_out_dir = rebase_path(invoker.proto_out_dir, "//")
|
|
} else {
|
|
# Absolute path to the directory of current BUILD.gn file excluding "//".
|
|
proto_out_dir = rebase_path(".", "//")
|
|
if (proto_in_dir != ".") {
|
|
proto_out_dir += "/$proto_in_dir"
|
|
}
|
|
}
|
|
cc_out_dir = "$root_gen_dir/" + proto_out_dir
|
|
rel_cc_out_dir = rebase_path(cc_out_dir, root_build_dir)
|
|
|
|
protos = rebase_path(invoker.sources, proto_in_dir)
|
|
protogens_cc = []
|
|
|
|
# List output files.
|
|
foreach(proto, protos) {
|
|
proto_dir = get_path_info(proto, "dir")
|
|
proto_name = get_path_info(proto, "name")
|
|
proto_path = proto_dir + "/" + proto_name
|
|
|
|
protogens_cc += [
|
|
"$cc_out_dir/$proto_path.pb.h",
|
|
"$cc_out_dir/$proto_path.pb.cc",
|
|
]
|
|
}
|
|
|
|
action_name = "${target_name}_gen"
|
|
source_set_name = "$target_name"
|
|
action(action_name) {
|
|
visibility = [ ":$source_set_name" ]
|
|
script = "//third_party/protobuf/protoc_wrapper.py"
|
|
sources = proto_sources
|
|
outputs = get_path_info(protogens_cc, "abspath")
|
|
args = protos
|
|
|
|
protoc_label = "//third_party/protobuf:protoc($host_toolchain)"
|
|
protoc_path = get_label_info(protoc_label, "root_out_dir") + "/protoc"
|
|
args += [
|
|
# Wrapper should never pick a system protoc.
|
|
# Path should be rebased because |root_build_dir| for current toolchain
|
|
# may be different from |root_out_dir| of protoc built on host toolchain.
|
|
"--protoc",
|
|
"./" + rebase_path(protoc_path, root_build_dir),
|
|
"--proto-in-dir",
|
|
rebase_path(proto_in_dir, root_build_dir),
|
|
"--cc-out-dir",
|
|
rel_cc_out_dir,
|
|
]
|
|
|
|
inputs = [ protoc_path ]
|
|
deps = [ protoc_label ]
|
|
}
|
|
|
|
config_name = "${target_name}_config"
|
|
config(config_name) {
|
|
include_dirs = []
|
|
}
|
|
|
|
source_set(source_set_name) {
|
|
forward_variables_from(invoker,
|
|
[
|
|
"defines",
|
|
"testonly",
|
|
"visibility",
|
|
])
|
|
|
|
sources = get_path_info(protogens_cc, "abspath")
|
|
public_configs = [
|
|
"//third_party/protobuf:using_proto",
|
|
":$config_name",
|
|
]
|
|
public_deps = [ ":$action_name" ]
|
|
if (defined(invoker.use_protobuf_full) &&
|
|
invoker.use_protobuf_full == true) {
|
|
public_deps += [ "//third_party/protobuf:protobuf_full" ]
|
|
} else {
|
|
public_deps += [ "//third_party/protobuf:protobuf_lite" ]
|
|
}
|
|
|
|
deps = []
|
|
if (defined(invoker.deps)) {
|
|
deps += invoker.deps
|
|
}
|
|
|
|
if (defined(invoker.removed_configs)) {
|
|
configs -= invoker.removed_configs
|
|
}
|
|
if (defined(invoker.extra_configs)) {
|
|
configs += invoker.extra_configs
|
|
}
|
|
}
|
|
}
|