52 lines
1.6 KiB
Python
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
|
|
)
|