gvisor/tools/bazeldefs/cc.bzl

52 lines
1.6 KiB
Python

"""C++ rules."""
load("@rules_cc//cc:defs.bzl", _cc_binary = "cc_binary", _cc_library = "cc_library", _cc_proto_library = "cc_proto_library", _cc_test = "cc_test")
load("@com_github_grpc_grpc//bazel:cc_grpc_library.bzl", _cc_grpc_library = "cc_grpc_library")
cc_library = _cc_library
cc_proto_library = _cc_proto_library
cc_test = _cc_test
cc_toolchain = "@bazel_tools//tools/cpp:current_cc_toolchain"
gtest = "@com_google_googletest//:gtest"
gbenchmark = "@com_google_benchmark//:benchmark"
grpcpp = "@com_github_grpc_grpc//:grpc++"
vdso_linker_option = "-fuse-ld=gold "
def _cc_flags_supplier_impl(ctx):
variables = platform_common.TemplateVariableInfo({
"CC_FLAGS": "",
})
return [variables]
cc_flags_supplier = rule(
implementation = _cc_flags_supplier_impl,
)
def cc_grpc_library(name, **kwargs):
_cc_grpc_library(name = name, grpc_only = True, **kwargs)
def cc_binary(name, static = False, **kwargs):
"""Run cc_binary.
Args:
name: name of the target.
static: make a static binary if True
**kwargs: the rest of the args.
"""
if static:
# How to statically link a c++ program that uses threads, like for gRPC:
# https://gcc.gnu.org/legacy-ml/gcc-help/2010-05/msg00029.html
if "linkopts" not in kwargs:
kwargs["linkopts"] = []
kwargs["linkopts"] += [
"-static",
"-lstdc++",
"-Wl,--whole-archive",
"-lpthread",
"-Wl,--no-whole-archive",
]
_cc_binary(
name = name,
**kwargs
)