github.com/SagerNet/gvisor@v0.0.0-20210707092255-7731c139d75c/tools/bazeldefs/cc.bzl (about)

     1  """C++ rules."""
     2  
     3  load("@rules_cc//cc:defs.bzl", _cc_binary = "cc_binary", _cc_library = "cc_library", _cc_proto_library = "cc_proto_library", _cc_test = "cc_test")
     4  load("@com_github_grpc_grpc//bazel:cc_grpc_library.bzl", _cc_grpc_library = "cc_grpc_library")
     5  
     6  cc_library = _cc_library
     7  cc_proto_library = _cc_proto_library
     8  cc_test = _cc_test
     9  cc_toolchain = "@bazel_tools//tools/cpp:current_cc_toolchain"
    10  gtest = "@com_google_googletest//:gtest"
    11  gbenchmark = "@com_google_benchmark//:benchmark"
    12  grpcpp = "@com_github_grpc_grpc//:grpc++"
    13  vdso_linker_option = "-fuse-ld=gold "
    14  
    15  def _cc_flags_supplier_impl(ctx):
    16      variables = platform_common.TemplateVariableInfo({
    17          "CC_FLAGS": "",
    18      })
    19      return [variables]
    20  
    21  cc_flags_supplier = rule(
    22      implementation = _cc_flags_supplier_impl,
    23  )
    24  
    25  def cc_grpc_library(name, **kwargs):
    26      _cc_grpc_library(name = name, grpc_only = True, **kwargs)
    27  
    28  def cc_binary(name, static = False, **kwargs):
    29      """Run cc_binary.
    30  
    31      Args:
    32          name: name of the target.
    33          static: make a static binary if True
    34          **kwargs: the rest of the args.
    35      """
    36      if static:
    37          # How to statically link a c++ program that uses threads, like for gRPC:
    38          # https://gcc.gnu.org/legacy-ml/gcc-help/2010-05/msg00029.html
    39          if "linkopts" not in kwargs:
    40              kwargs["linkopts"] = []
    41          kwargs["linkopts"] += [
    42              "-static",
    43              "-lstdc++",
    44              "-Wl,--whole-archive",
    45              "-lpthread",
    46              "-Wl,--no-whole-archive",
    47          ]
    48      _cc_binary(
    49          name = name,
    50          **kwargs
    51      )