Protocol Buffers - Google's data interchange format (grpc依赖)
https://developers.google.com/protocol-buffers/
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.
71 lines
2.6 KiB
71 lines
2.6 KiB
"""A function to compile C/C++ code, like cc_library() but from Starlark.""" |
|
|
|
# begin:google_only |
|
# load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain", "use_cpp_toolchain") |
|
# |
|
# def upb_use_cpp_toolchain(): |
|
# return use_cpp_toolchain() |
|
# |
|
# end:google_only |
|
|
|
# begin:github_only |
|
# Compatibility code for Bazel 4.x. Remove this when we drop support for Bazel 4.x. |
|
load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain") |
|
|
|
def upb_use_cpp_toolchain(): |
|
return ["@bazel_tools//tools/cpp:toolchain_type"] |
|
# end:github_only |
|
|
|
def cc_library_func(ctx, name, hdrs, srcs, copts, includes, dep_ccinfos): |
|
"""Like cc_library(), but callable from rules. |
|
|
|
Args: |
|
ctx: Rule context. |
|
name: Unique name used to generate output files. |
|
hdrs: Public headers that can be #included from other rules. |
|
srcs: C/C++ source files. |
|
copts: Additional options for cc compilation. |
|
includes: Additional include paths. |
|
dep_ccinfos: CcInfo providers of dependencies we should build/link against. |
|
|
|
Returns: |
|
CcInfo provider for this compilation. |
|
""" |
|
|
|
compilation_contexts = [info.compilation_context for info in dep_ccinfos] |
|
linking_contexts = [info.linking_context for info in dep_ccinfos] |
|
toolchain = find_cpp_toolchain(ctx) |
|
feature_configuration = cc_common.configure_features( |
|
ctx = ctx, |
|
cc_toolchain = toolchain, |
|
requested_features = ctx.features, |
|
unsupported_features = ctx.disabled_features, |
|
) |
|
|
|
(compilation_context, compilation_outputs) = cc_common.compile( |
|
actions = ctx.actions, |
|
feature_configuration = feature_configuration, |
|
cc_toolchain = toolchain, |
|
name = name, |
|
srcs = srcs, |
|
includes = includes, |
|
public_hdrs = hdrs, |
|
user_compile_flags = copts, |
|
compilation_contexts = compilation_contexts, |
|
) |
|
|
|
# buildifier: disable=unused-variable |
|
(linking_context, linking_outputs) = cc_common.create_linking_context_from_compilation_outputs( |
|
actions = ctx.actions, |
|
name = name, |
|
feature_configuration = feature_configuration, |
|
cc_toolchain = toolchain, |
|
compilation_outputs = compilation_outputs, |
|
linking_contexts = linking_contexts, |
|
disallow_dynamic_library = cc_common.is_enabled(feature_configuration = feature_configuration, feature_name = "targets_windows") or not cc_common.is_enabled(feature_configuration = feature_configuration, feature_name = "supports_dynamic_linker"), |
|
) |
|
|
|
return CcInfo( |
|
compilation_context = compilation_context, |
|
linking_context = linking_context, |
|
)
|
|
|