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 )