From d235fa55f1892115cd6922e478eaa262344e633a Mon Sep 17 00:00:00 2001 From: Shuai Zhang Date: Tue, 28 Dec 2021 22:21:09 +0800 Subject: [PATCH] Chore: rework Bazel build system --- .bazelrc | 35 +- .bazelversion | 1 + .travis.yml | 2 +- BUILD.bazel | 303 ++++++----- WORKSPACE | 290 ++++++++-- bazel/{brpc.bzl => BUILD.bazel} | 29 +- bazel/config/BUILD.bazel | 99 ++++ bazel/third_party/BUILD.bazel | 17 + bazel/third_party/crc32c/BUILD.bazel | 17 + bazel/third_party/crc32c/crc32c.BUILD | 93 ++++ bazel/third_party/event/BUILD.bazel | 17 + bazel/third_party/event/event.BUILD | 59 +++ .../glog/0001-improvement-copts.patch | 43 ++ .../third_party/glog/0002-mark-override.patch | 36 ++ bazel/third_party/glog/BUILD.bazel | 17 + bazel/third_party/leveldb/BUILD.bazel | 21 + bazel/third_party/leveldb/leveldb.BUILD | 72 +++ bazel/third_party/leveldb/port.h | 34 ++ bazel/third_party/leveldb/port_config.h | 38 ++ bazel/third_party/openssl/BUILD.bazel | 17 + bazel/third_party/openssl/openssl.BUILD | 165 ++++++ bazel/third_party/protobuf/BUILD.bazel | 17 + bazel/third_party/protobuf/protobuf.BUILD | 498 ++++++++++++++++++ bazel/third_party/snappy/BUILD.bazel | 17 + bazel/third_party/snappy/snappy.BUILD | 122 +++++ bazel/third_party/thrift/BUILD.bazel | 17 + bazel/third_party/thrift/thrift.BUILD | 75 +++ bazel/third_party/zlib/BUILD.bazel | 17 + bazel/third_party/zlib/zlib.BUILD | 111 ++++ example/{BUILD => BUILD.bazel} | 9 +- example/build_with_old_bazel/.bazelrc | 16 + example/build_with_old_bazel/.bazelversion | 16 + example/build_with_old_bazel/BUILD.bazel | 28 + example/build_with_old_bazel/WORKSPACE | 134 +++++ .../build_with_old_bazel/leveldb.BUILD | 0 .../build_with_old_bazel/openssl.BUILD | 15 + example/build_with_old_bazel/zlib.BUILD | 23 + glog.BUILD | 171 ------ test/BUILD.bazel | 123 ++--- tools/BUILD | 2 +- zlib.BUILD | 8 - 41 files changed, 2361 insertions(+), 463 deletions(-) create mode 100644 .bazelversion rename bazel/{brpc.bzl => BUILD.bazel} (52%) create mode 100644 bazel/config/BUILD.bazel create mode 100644 bazel/third_party/BUILD.bazel create mode 100644 bazel/third_party/crc32c/BUILD.bazel create mode 100644 bazel/third_party/crc32c/crc32c.BUILD create mode 100644 bazel/third_party/event/BUILD.bazel create mode 100644 bazel/third_party/event/event.BUILD create mode 100644 bazel/third_party/glog/0001-improvement-copts.patch create mode 100644 bazel/third_party/glog/0002-mark-override.patch create mode 100644 bazel/third_party/glog/BUILD.bazel create mode 100644 bazel/third_party/leveldb/BUILD.bazel create mode 100644 bazel/third_party/leveldb/leveldb.BUILD create mode 100644 bazel/third_party/leveldb/port.h create mode 100644 bazel/third_party/leveldb/port_config.h create mode 100644 bazel/third_party/openssl/BUILD.bazel create mode 100644 bazel/third_party/openssl/openssl.BUILD create mode 100644 bazel/third_party/protobuf/BUILD.bazel create mode 100644 bazel/third_party/protobuf/protobuf.BUILD create mode 100644 bazel/third_party/snappy/BUILD.bazel create mode 100644 bazel/third_party/snappy/snappy.BUILD create mode 100644 bazel/third_party/thrift/BUILD.bazel create mode 100644 bazel/third_party/thrift/thrift.BUILD create mode 100644 bazel/third_party/zlib/BUILD.bazel create mode 100644 bazel/third_party/zlib/zlib.BUILD rename example/{BUILD => BUILD.bazel} (91%) create mode 100644 example/build_with_old_bazel/.bazelrc create mode 100644 example/build_with_old_bazel/.bazelversion create mode 100644 example/build_with_old_bazel/BUILD.bazel create mode 100644 example/build_with_old_bazel/WORKSPACE rename leveldb.BUILD => example/build_with_old_bazel/leveldb.BUILD (100%) rename openssl.BUILD => example/build_with_old_bazel/openssl.BUILD (51%) create mode 100644 example/build_with_old_bazel/zlib.BUILD delete mode 100644 glog.BUILD delete mode 100644 zlib.BUILD diff --git a/.bazelrc b/.bazelrc index 8ae4f0d482..f3d406b061 100644 --- a/.bazelrc +++ b/.bazelrc @@ -13,12 +13,29 @@ # See the License for the specific language governing permissions and # limitations under the License. -build --copt -DHAVE_ZLIB=1 -# bazel build with glog -# build --define=with_glog=true -build -c opt -build --incompatible_disable_deprecated_attr_params=false -build --incompatible_new_actions_api=false -# unittest -test --define=unittest=true -test --copt=-g +# +# Default build options. These are applied first and unconditionally. +# + +build --cxxopt="-std=c++11" +# Use gnu11 for asm keyword. +build --conlyopt="-std=gnu11" + +# Enable position independent code (this is the default on macOS and Windows) +# (Workaround for https://github.com/bazelbuild/rules_foreign_cc/issues/421) +build --copt=-fPIC +build --fission=dbg,opt +build --features=per_object_debug_info + +# We already have absl in the build, define absl=1 to tell googletest to use absl for backtrace. +build --define absl=1 + +# For brpc. +build --define=BRPC_WITH_GLOG=true +test --define=BRPC_BUILD_FOR_UNITTEST=true + +# Pass PATH, CC, CXX and LLVM_CONFIG variables from the environment. +build --action_env=CC +build --action_env=CXX +build --action_env=LLVM_CONFIG +build --action_env=PATH diff --git a/.bazelversion b/.bazelversion new file mode 100644 index 0000000000..af8c8ec7c1 --- /dev/null +++ b/.bazelversion @@ -0,0 +1 @@ +4.2.2 diff --git a/.travis.yml b/.travis.yml index 9200d9603c..96ada3853d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,7 +40,7 @@ before_script: - sudo bash -c "echo 'core.%e.%p' > /proc/sys/kernel/core_pattern" before_install: -- wget --no-clobber https://github.com/bazelbuild/bazel/releases/download/0.25.1/bazel_0.25.1-linux-x86_64.deb && sudo dpkg -i bazel_0.25.1-linux-x86_64.deb +- wget --no-clobber https://github.com/bazelbuild/bazel/releases/download/4.2.2/bazel_4.2.2-linux-x86_64.deb && sudo dpkg -i bazel_4.2.2-linux-x86_64.deb - sudo apt-get install automake bison flex g++ git libboost-all-dev libevent-dev libssl-dev libtool make pkg-config # thrift dependencies - wget https://archive.apache.org/dist/thrift/0.11.0/thrift-0.11.0.tar.gz && tar -xf thrift-0.11.0.tar.gz && cd thrift-0.11.0/ && ./configure --prefix=/usr --with-rs=no --with-ruby=no --with-python=no --with-java=no --with-go=no --with-perl=no --with-php=no --with-csharp=no --with-erlang=no --with-lua=no --with-nodejs=no CXXFLAGS="-Wno-unused-variable" && make -j4 && sudo make install && cd - diff --git a/BUILD.bazel b/BUILD.bazel index 7592a1862d..6d8094bcad 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -13,47 +13,13 @@ # See the License for the specific language governing permissions and # limitations under the License. +load("@rules_proto//proto:defs.bzl", "proto_library") +load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_proto_library", "objc_library") + licenses(["notice"]) # Apache v2 exports_files(["LICENSE"]) -load(":bazel/brpc.bzl", "brpc_proto_library") - -config_setting( - name = "with_glog", - define_values = {"with_glog": "true"}, - visibility = ["//visibility:public"], -) - -config_setting( - name = "with_mesalink", - define_values = {"with_mesalink": "true"}, - visibility = ["//visibility:public"], -) - -config_setting( - name = "with_thrift", - define_values = {"with_thrift": "true"}, - visibility = ["//visibility:public"], -) - -config_setting( - name = "unittest", - define_values = {"unittest": "true"}, -) - -config_setting( - name = "darwin", - values = {"cpu": "darwin"}, - visibility = ["//visibility:public"], -) - -config_setting( - name = "linux", - values = {"cpu": "linux"}, - visibility = ["//visibility:public"], -) - COPTS = [ "-DBTHREAD_USE_FAST_PTHREAD_MUTEX", "-D__const__=__unused__", @@ -65,21 +31,24 @@ COPTS = [ "-D__STDC_CONSTANT_MACROS", "-DGFLAGS_NS=google", ] + select({ - ":with_glog": ["-DBRPC_WITH_GLOG=1"], + "//bazel/config:brpc_with_glog": ["-DBRPC_WITH_GLOG=1"], "//conditions:default": ["-DBRPC_WITH_GLOG=0"], }) + select({ - ":with_mesalink": ["-DUSE_MESALINK"], + "//bazel/config:brpc_with_mesalink": ["-DUSE_MESALINK"], "//conditions:default": [""], }) + select({ - ":with_thrift": ["-DENABLE_THRIFT_FRAMED_PROTOCOL=1"], + "//bazel/config:brpc_with_thrift": ["-DENABLE_THRIFT_FRAMED_PROTOCOL=1"], "//conditions:default": [""], +}) + select({ + "//bazel/config:brpc_with_thrift_legacy_version": [], + "//conditions:default": ["-DTHRIFT_STDCXX=std"], }) LINKOPTS = [ - "-lpthread", + "-pthread", "-ldl", ] + select({ - ":darwin": [ + "@bazel_tools//tools/osx:darwin": [ "-framework CoreFoundation", "-framework CoreGraphics", "-framework CoreData", @@ -92,19 +61,13 @@ LINKOPTS = [ "-Wl,-U,_RegisterThriftProtocol", ], "//conditions:default": [ - "-lrt", + "-lrt", ], }) + select({ - ":with_mesalink": [ + "//bazel/config:brpc_with_mesalink": [ "-lmesalink", ], "//conditions:default": [], -}) + select({ - ":with_thrift": [ - "-lthriftnb", - "-levent", - "-lthrift"], - "//conditions:default": [], }) genrule( @@ -116,18 +79,17 @@ genrule( // This file is auto-generated. #ifndef BUTIL_CONFIG_H #define BUTIL_CONFIG_H - #ifdef BRPC_WITH_GLOG #undef BRPC_WITH_GLOG #endif #define BRPC_WITH_GLOG """ + select({ - ":with_glog": "1", - "//conditions:default": "0", -}) + -""" + "//bazel/config:brpc_with_glog": "1", + "//conditions:default": "0", + }) + + """ #endif // BUTIL_CONFIG_H EOF - """ + """, ) BUTIL_SRCS = [ @@ -244,20 +206,20 @@ BUTIL_SRCS = [ "src/butil/recordio.cc", "src/butil/popen.cpp", ] + select({ - ":darwin": [ - "src/butil/time/time_mac.cc", - "src/butil/mac/scoped_mach_port.cc", - ], - "//conditions:default": [ - "src/butil/file_util_linux.cc", - "src/butil/threading/platform_thread_linux.cc", - "src/butil/strings/sys_string_conversions_posix.cc", - ], + "@bazel_tools//tools/osx:darwin": [ + "src/butil/time/time_mac.cc", + "src/butil/mac/scoped_mach_port.cc", + ], + "//conditions:default": [ + "src/butil/file_util_linux.cc", + "src/butil/threading/platform_thread_linux.cc", + "src/butil/strings/sys_string_conversions_posix.cc", + ], }) objc_library( name = "macos_lib", - hdrs = [":config_h", + hdrs = [ "src/butil/atomicops.h", "src/butil/atomicops_internals_atomicword_compat.h", "src/butil/atomicops_internals_mac.h", @@ -269,10 +231,10 @@ objc_library( "src/butil/containers/hash_tables.h", "src/butil/debug/debugger.h", "src/butil/debug/leak_annotations.h", - "src/butil/file_util.h", "src/butil/file_descriptor_posix.h", - "src/butil/files/file_path.h", + "src/butil/file_util.h", "src/butil/files/file.h", + "src/butil/files/file_path.h", "src/butil/files/scoped_file.h", "src/butil/lazy_instance.h", "src/butil/logging.h", @@ -294,15 +256,18 @@ objc_library( "src/butil/strings/string_util_posix.h", "src/butil/strings/sys_string_conversions.h", "src/butil/synchronization/lock.h", - "src/butil/time/time.h", - "src/butil/time.h", "src/butil/third_party/dynamic_annotations/dynamic_annotations.h", + "src/butil/third_party/murmurhash3/murmurhash3.h", "src/butil/threading/platform_thread.h", - "src/butil/threading/thread_restrictions.h", "src/butil/threading/thread_id_name_manager.h", + "src/butil/threading/thread_restrictions.h", + "src/butil/time.h", + "src/butil/time/time.h", "src/butil/type_traits.h", - "src/butil/third_party/murmurhash3/murmurhash3.h", + ":config_h", ], + enable_modules = True, + includes = ["src/"], non_arc_srcs = [ "src/butil/mac/bundle_locations.mm", "src/butil/mac/foundation_util.mm", @@ -310,15 +275,13 @@ objc_library( "src/butil/threading/platform_thread_mac.mm", "src/butil/strings/sys_string_conversions_mac.mm", ], + tags = ["manual"], deps = [ "@com_github_gflags_gflags//:gflags", ] + select({ - ":with_glog": ["@com_github_google_glog//:glog"], + "//bazel/config:brpc_with_glog": ["@com_github_google_glog//:glog"], "//conditions:default": [], }), - includes = ["src/"], - enable_modules = True, - tags = ["manual"], ) cc_library( @@ -330,48 +293,52 @@ cc_library( "src/butil/**/*.h", "src/butil/**/*.hpp", "src/butil/**/**/*.h", - "src/butil/**/**/*.hpp", "src/butil/**/**/**/*.h", + "src/butil/**/**/*.hpp", + "src/butil/**/**/**/*.h", "src/butil/**/**/**/*.hpp", + ]) + [ "src/butil/third_party/dmg_fp/dtoa.cc", - ]) + [":config_h"], - deps = [ - "@com_google_protobuf//:protobuf", - "@com_github_gflags_gflags//:gflags", - "@zlib//:zlib", - ] + select({ - ":with_glog": ["@com_github_google_glog//:glog"], - "//conditions:default": [], - }) + select({ - ":darwin": [":macos_lib"], - "//conditions:default": [], - }) + select({ - ":darwin": ["//external:ssl_macos"], - "//conditions:default": ["//external:ssl"], - }), - includes = [ - "src/", + ":config_h", ], copts = COPTS + select({ - ":unittest": [ + "//bazel/config:brpc_build_for_unittest": [ "-DBVAR_NOT_LINK_DEFAULT_VARIABLES", "-DUNIT_TEST", ], "//conditions:default": [], }), + includes = [ + "src/", + ], linkopts = LINKOPTS, visibility = ["//visibility:public"], + deps = [ + "@com_github_gflags_gflags//:gflags", + "@com_github_madler_zlib//:zlib", + "@com_google_protobuf//:protobuf", + "@openssl//:crypto", + "@openssl//:ssl", + ] + select({ + "//bazel/config:brpc_with_glog": ["@com_github_google_glog//:glog"], + "//conditions:default": [], + }) + select({ + "@bazel_tools//tools/osx:darwin": [":macos_lib"], + "//conditions:default": [], + }), ) cc_library( name = "bvar", - srcs = glob([ - "src/bvar/*.cpp", - "src/bvar/detail/*.cpp", - ], - exclude = [ - "src/bvar/default_variables.cpp", - ]) + select({ - ":unittest": [], + srcs = glob( + [ + "src/bvar/*.cpp", + "src/bvar/detail/*.cpp", + ], + exclude = [ + "src/bvar/default_variables.cpp", + ], + ) + select({ + "//bazel/config:brpc_build_for_unittest": [], "//conditions:default": ["src/bvar/default_variables.cpp"], }), hdrs = glob([ @@ -379,21 +346,21 @@ cc_library( "src/bvar/utils/*.h", "src/bvar/detail/*.h", ]), - includes = [ - "src/", - ], - deps = [ - ":butil", - ], copts = COPTS + select({ - ":unittest": [ + "//bazel/config:brpc_build_for_unittest": [ "-DBVAR_NOT_LINK_DEFAULT_VARIABLES", "-DUNIT_TEST", ], "//conditions:default": [], }), + includes = [ + "src/", + ], linkopts = LINKOPTS, visibility = ["//visibility:public"], + deps = [ + ":butil", + ], ) cc_library( @@ -405,16 +372,16 @@ cc_library( "src/bthread/*.h", "src/bthread/*.list", ]), + copts = COPTS, includes = [ - "src/" + "src/", ], + linkopts = LINKOPTS, + visibility = ["//visibility:public"], deps = [ ":butil", ":bvar", ], - copts = COPTS, - linkopts = LINKOPTS, - visibility = ["//visibility:public"], ) cc_library( @@ -425,15 +392,15 @@ cc_library( hdrs = glob([ "src/json2pb/*.h", ]), + copts = COPTS, includes = [ "src/", ], + linkopts = LINKOPTS, + visibility = ["//visibility:public"], deps = [ ":butil", ], - copts = COPTS, - linkopts = LINKOPTS, - visibility = ["//visibility:public"], ) cc_library( @@ -447,79 +414,111 @@ cc_library( hdrs = glob([ "src/mcpack2pb/*.h", ]), + copts = COPTS, includes = [ "src/", ], + linkopts = LINKOPTS, + visibility = ["//visibility:public"], deps = [ + ":brpc_idl_options_cc_proto", ":butil", - ":cc_brpc_idl_options_proto", "@com_google_protobuf//:protoc_lib", ], - copts = COPTS, - linkopts = LINKOPTS, - visibility = ["//visibility:public"], ) -brpc_proto_library( - name = "cc_brpc_idl_options_proto", +filegroup( + name = "brpc_idl_options_proto_srcs", srcs = [ "src/idl_options.proto", ], + visibility = ["//visibility:public"], +) + +proto_library( + name = "brpc_idl_options_proto", + srcs = [":brpc_idl_options_proto_srcs"], + visibility = ["//visibility:public"], deps = [ - "@com_google_protobuf//:cc_wkt_protos" + "@com_google_protobuf//:descriptor_proto", ], +) + +cc_proto_library( + name = "brpc_idl_options_cc_proto", visibility = ["//visibility:public"], + deps = [":brpc_idl_options_proto"], ) -brpc_proto_library( - name = "cc_brpc_internal_proto", +filegroup( + name = "brpc_internal_proto_srcs", srcs = glob([ "src/brpc/*.proto", "src/brpc/policy/*.proto", ]), - include = "src/", + visibility = ["//visibility:public"], +) + +proto_library( + name = "brpc_internal_proto", + srcs = [":brpc_internal_proto_srcs"], + strip_import_prefix = "src", + visibility = ["//visibility:public"], deps = [ - ":cc_brpc_idl_options_proto", - "@com_google_protobuf//:cc_wkt_protos" + ":brpc_idl_options_proto", + "@com_google_protobuf//:descriptor_proto", ], +) + +cc_proto_library( + name = "brpc_internal_cc_proto", visibility = ["//visibility:public"], + deps = [":brpc_internal_proto"], ) cc_library( name = "brpc", - srcs = glob([ - "src/brpc/*.cpp", - "src/brpc/**/*.cpp", - ], - exclude = [ - "src/brpc/thrift_service.cpp", - "src/brpc/thrift_message.cpp", - "src/brpc/policy/thrift_protocol.cpp", - ]) + select({ - ":with_thrift" : glob([ + srcs = glob( + [ + "src/brpc/*.cpp", + "src/brpc/**/*.cpp", + ], + exclude = [ + "src/brpc/thrift_service.cpp", + "src/brpc/thrift_message.cpp", + "src/brpc/policy/thrift_protocol.cpp", + ], + ) + select({ + "//bazel/config:brpc_with_thrift": glob([ "src/brpc/thrift*.cpp", - "src/brpc/**/thrift*.cpp"]), - "//conditions:default" : [], + "src/brpc/**/thrift*.cpp", + ]), + "//conditions:default": [], }), hdrs = glob([ "src/brpc/*.h", - "src/brpc/**/*.h" + "src/brpc/**/*.h", ]), + copts = COPTS, includes = [ "src/", ], + linkopts = LINKOPTS, + visibility = ["//visibility:public"], deps = [ - ":butil", + ":brpc_internal_cc_proto", ":bthread", + ":butil", ":bvar", ":json2pb", ":mcpack2pb", - ":cc_brpc_internal_proto", "@com_github_google_leveldb//:leveldb", - ], - copts = COPTS, - linkopts = LINKOPTS, - visibility = ["//visibility:public"], + ] + select({ + "//bazel/config:brpc_with_thrift": [ + "@org_apache_thrift//:thrift", + ], + "//conditions:default": [], + }), ) cc_binary( @@ -527,11 +526,11 @@ cc_binary( srcs = [ "src/mcpack2pb/generator.cpp", ], - deps = [ - ":cc_brpc_idl_options_proto", - ":brpc", - ], copts = COPTS, linkopts = LINKOPTS, visibility = ["//visibility:public"], + deps = [ + ":brpc", + ":brpc_idl_options_cc_proto", + ], ) diff --git a/WORKSPACE b/WORKSPACE index 441fd16dea..4ac34adc54 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -19,77 +19,279 @@ workspace(name = "com_github_brpc_brpc") load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") -skylib_version = "0.8.0" +# +# Constants +# + +BAZEL_IO_VERSION = "4.2.2" # 2021-12-03T09:26:35Z + +BAZEL_IO_SHA256 = "4c179ce66bbfff6ac5d81b8895518096e7f750866d08da2d4a574d1b8029e914" + +BAZEL_SKYLIB_VERSION = "1.1.1" # 2021-09-27T17:33:49Z + +BAZEL_SKYLIB_SHA256 = "c6966ec828da198c5d9adbaa94c05e3a1c7f21bd012a0b29ba8ddbccb2c93b0d" + +BAZEL_PLATFORMS_VERSION = "0.0.4" # 2021-02-26 + +BAZEL_PLATFORMS_SHA256 = "079945598e4b6cc075846f7fd6a9d0857c33a7afc0de868c2ccb96405225135d" + +RULES_PROTO_TAG = "4.0.0" # 2021-09-15T14:13:21Z + +RULES_PROTO_SHA256 = "66bfdf8782796239d3875d37e7de19b1d94301e8972b3cbd2446b332429b4df1" + +RULES_CC_COMMIT_ID = "0913abc3be0edff60af681c0473518f51fb9eeef" # 2021-08-12T14:14:28Z + +RULES_CC_SHA256 = "04d22a8c6f0caab1466ff9ae8577dbd12a0c7d0bc468425b75de094ec68ab4f9" + +# +# Starlark libraries +# + +http_archive( + name = "io_bazel", + sha256 = BAZEL_IO_SHA256, + strip_prefix = "bazel-" + BAZEL_IO_VERSION, + url = "https://github.com/bazelbuild/bazel/archive/" + BAZEL_IO_VERSION + ".zip", +) + http_archive( name = "bazel_skylib", - type = "tar.gz", - url = "https://github.com/bazelbuild/bazel-skylib/releases/download/{}/bazel-skylib.{}.tar.gz".format (skylib_version, skylib_version), - sha256 = "2ef429f5d7ce7111263289644d233707dba35e39696377ebab8b0bc701f7818e", + sha256 = BAZEL_SKYLIB_SHA256, + urls = [ + "https://github.com/bazelbuild/bazel-skylib/releases/download/{version}/bazel-skylib-{version}.tar.gz".format(version = BAZEL_SKYLIB_VERSION), + "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/{version}/bazel-skylib-{version}.tar.gz".format(version = BAZEL_SKYLIB_VERSION), + ], +) + +http_archive( + name = "platforms", + sha256 = BAZEL_PLATFORMS_SHA256, + urls = [ + "https://mirror.bazel.build/github.com/bazelbuild/platforms/releases/download/{version}/platforms-{version}.tar.gz".format(version = BAZEL_PLATFORMS_VERSION), + "https://github.com/bazelbuild/platforms/releases/download/{version}/platforms-{version}.tar.gz".format(version = BAZEL_PLATFORMS_VERSION), + ], +) + +http_archive( + name = "rules_proto", + sha256 = RULES_PROTO_SHA256, + strip_prefix = "rules_proto-{version}".format(version = RULES_PROTO_TAG), + urls = ["https://github.com/bazelbuild/rules_proto/archive/refs/tags/{version}.tar.gz".format(version = RULES_PROTO_TAG)], +) + +http_archive( + name = "rules_cc", + sha256 = RULES_CC_SHA256, + strip_prefix = "rules_cc-{commit_id}".format(commit_id = RULES_CC_COMMIT_ID), + urls = [ + "https://github.com/bazelbuild/rules_cc/archive/{commit_id}.tar.gz".format(commit_id = RULES_CC_COMMIT_ID), + ], +) + +http_archive( + name = "rules_perl", # 2021-09-23T03:21:58Z + sha256 = "55fbe071971772758ad669615fc9aac9b126db6ae45909f0f36de499f6201dd3", + strip_prefix = "rules_perl-2f4f36f454375e678e81e5ca465d4d497c5c02da", + urls = [ + "https://github.com/bazelbuild/rules_perl/archive/2f4f36f454375e678e81e5ca465d4d497c5c02da.tar.gz", + ], +) + +# Use rules_foreign_cc as fewer as possible. +# +# 1. Build very basic libraries without any further dependencies. +# 2. Build too complex to bazelize library. +http_archive( + name = "rules_foreign_cc", # 2021-12-03T17:15:40Z + sha256 = "1df78c7d7eed2dc21b8b325a2853c31933a81e7b780f9a59a5d078be9008b13a", + strip_prefix = "rules_foreign_cc-0.7.0", + url = "https://github.com/bazelbuild/rules_foreign_cc/archive/0.7.0.tar.gz", +) + +# +# Starlark rules +# + +load("@rules_foreign_cc//foreign_cc:repositories.bzl", "rules_foreign_cc_dependencies") + +rules_foreign_cc_dependencies(register_preinstalled_tools = False) + +# +# C++ Dependencies +# +# Ordered lexicographical. +# + +http_archive( + name = "boost", # 2021-08-05T01:30:05Z + build_file = "@com_github_nelhage_rules_boost//:BUILD.boost", + patch_cmds = ["rm -f doc/pdf/BUILD"], + patch_cmds_win = ["Remove-Item -Force doc/pdf/BUILD"], + sha256 = "5347464af5b14ac54bb945dc68f1dd7c56f0dad7262816b956138fc53bcc0131", + strip_prefix = "boost_1_77_0", + urls = [ + "https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_77_0.tar.gz", + ], +) + +http_archive( + name = "com_github_gflags_gflags", # 2018-11-11T21:30:10Z + sha256 = "34af2f15cf7367513b352bdcd2493ab14ce43692d2dcd9dfc499492966c64dcf", + strip_prefix = "gflags-2.2.2", + urls = ["https://github.com/gflags/gflags/archive/v2.2.2.tar.gz"], +) + +http_archive( + name = "com_github_google_crc32c", # 2021-10-05T19:47:30Z + build_file = "//bazel/third_party/crc32c:crc32c.BUILD", + sha256 = "ac07840513072b7fcebda6e821068aa04889018f24e10e46181068fb214d7e56", + strip_prefix = "crc32c-1.1.2", + urls = ["https://github.com/google/crc32c/archive/1.1.2.tar.gz"], +) + +http_archive( + name = "com_github_google_glog", # 2021-05-07T23:06:39Z + patch_args = ["-p1"], + patches = [ + "//bazel/third_party/glog:0001-improvement-copts.patch", + "//bazel/third_party/glog:0002-mark-override.patch", + ], + sha256 = "21bc744fb7f2fa701ee8db339ded7dce4f975d0d55837a97be7d46e8382dea5a", + strip_prefix = "glog-0.5.0", + urls = ["https://github.com/google/glog/archive/v0.5.0.zip"], ) http_archive( - name = "com_google_protobuf", - strip_prefix = "protobuf-3.6.1.3", - sha256 = "9510dd2afc29e7245e9e884336f848c8a6600a14ae726adb6befdb4f786f0be2", - type = "zip", - url = "https://github.com/protocolbuffers/protobuf/archive/v3.6.1.3.zip", + name = "com_github_google_leveldb", # 2021-02-23T21:51:12Z + build_file = "//bazel/third_party/leveldb:leveldb.BUILD", + sha256 = "9a37f8a6174f09bd622bc723b55881dc541cd50747cbd08831c2a82d620f6d76", + strip_prefix = "leveldb-1.23", + urls = [ + "https://github.com/google/leveldb/archive/refs/tags/1.23.tar.gz", + ], ) http_archive( - name = "com_github_gflags_gflags", - strip_prefix = "gflags-46f73f88b18aee341538c0dfc22b1710a6abedef", - url = "https://github.com/gflags/gflags/archive/46f73f88b18aee341538c0dfc22b1710a6abedef.tar.gz", + name = "com_github_google_snappy", # 2017-08-25 + build_file = "//bazel/third_party/snappy:snappy.BUILD", + sha256 = "3dfa02e873ff51a11ee02b9ca391807f0c8ea0529a4924afa645fbf97163f9d4", + strip_prefix = "snappy-1.1.7", + urls = [ + "https://storage.googleapis.com/mirror.tensorflow.org/github.com/google/snappy/archive/1.1.7.tar.gz", + "https://github.com/google/snappy/archive/1.1.7.tar.gz", + ], ) -bind( - name = "gflags", - actual = "@com_github_gflags_gflags//:gflags", +http_archive( + name = "com_github_libevent_libevent", # 2020-07-05T13:33:03Z + build_file = "//bazel/third_party/event:event.BUILD", + sha256 = "92e6de1be9ec176428fd2367677e61ceffc2ee1cb119035037a27d346b0403bb", + strip_prefix = "libevent-2.1.12-stable", + urls = [ + "https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz", + ], ) +# TODO: SIMD optimization. +# https://github.com/cloudflare/zlib http_archive( - name = "com_github_google_leveldb", - build_file = "//:leveldb.BUILD", - strip_prefix = "leveldb-a53934a3ae1244679f812d998a4f16f2c7f309a6", - url = "https://github.com/google/leveldb/archive/a53934a3ae1244679f812d998a4f16f2c7f309a6.tar.gz" + name = "com_github_madler_zlib", # 2017-01-15T17:57:23Z + build_file = "//bazel/third_party/zlib:zlib.BUILD", + sha256 = "c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1", + strip_prefix = "zlib-1.2.11", + urls = [ + "https://downloads.sourceforge.net/project/libpng/zlib/1.2.11/zlib-1.2.11.tar.gz", + "https://zlib.net/fossils/zlib-1.2.11.tar.gz", + ], ) http_archive( - name = "com_github_google_glog", - build_file = "//:glog.BUILD", - strip_prefix = "glog-a6a166db069520dbbd653c97c2e5b12e08a8bb26", - url = "https://github.com/google/glog/archive/a6a166db069520dbbd653c97c2e5b12e08a8bb26.tar.gz" + name = "com_github_nelhage_rules_boost", # 2021-08-27T15:46:06Z + patch_cmds = ["sed -i 's/net_zlib_zlib/com_github_madler_zlib/g' BUILD.boost"], + patch_cmds_win = [ + """$content = (Get-Content 'BUILD.boost') -replace "net_zlib_zlib", "com_github_madler_zlib" +Set-Content BUILD.boost -Value $content -Encoding UTF8 +""", + ], + sha256 = "2d0b2eef7137730dbbb180397fe9c3d601f8f25950c43222cb3ee85256a21869", + strip_prefix = "rules_boost-fce83babe3f6287bccb45d2df013a309fa3194b8", + urls = [ + "https://github.com/nelhage/rules_boost/archive/fce83babe3f6287bccb45d2df013a309fa3194b8.tar.gz", + ], ) http_archive( - name = "com_google_googletest", - strip_prefix = "googletest-0fe96607d85cf3a25ac40da369db62bbee2939a5", - url = "https://github.com/google/googletest/archive/0fe96607d85cf3a25ac40da369db62bbee2939a5.tar.gz", + name = "com_google_absl", # 2021-09-27T18:06:52Z + sha256 = "2f0d9c7bc770f32bda06a9548f537b63602987d5a173791485151aba28a90099", + strip_prefix = "abseil-cpp-7143e49e74857a009e16c51f6076eb197b6ccb49", + urls = ["https://github.com/abseil/abseil-cpp/archive/7143e49e74857a009e16c51f6076eb197b6ccb49.zip"], ) -new_local_repository( - name = "openssl", - path = "/usr", - build_file = "//:openssl.BUILD", +http_archive( + name = "com_google_googletest", # 2021-07-09T13:28:13Z + sha256 = "12ef65654dc01ab40f6f33f9d02c04f2097d2cd9fbe48dc6001b29543583b0ad", + strip_prefix = "googletest-8d51ffdfab10b3fba636ae69bc03da4b54f8c235", + urls = ["https://github.com/google/googletest/archive/8d51ffdfab10b3fba636ae69bc03da4b54f8c235.zip"], ) -new_local_repository( - name = "openssl_macos", - build_file = "//:openssl.BUILD", - path = "/usr/local/opt/openssl", +http_archive( + name = "com_google_protobuf", # 2021-10-29T00:04:02Z + build_file = "//bazel/third_party/protobuf:protobuf.BUILD", + patch_cmds = [ + "sed -i protobuf.bzl -re '4,4d;417,508d'", + ], + patch_cmds_win = [ + """$content = Get-Content 'protobuf.bzl' | Where-Object { + -not ($_.ReadCount -ne 4) -and + -not ($_.ReadCount -ge 418 -and $_.ReadCount -le 509) +} +Set-Content protobuf.bzl -Value $content -Encoding UTF8 +""", + ], + sha256 = "87407cd28e7a9c95d9f61a098a53cf031109d451a7763e7dd1253abf8b4df422", + strip_prefix = "protobuf-3.19.1", + urls = ["https://github.com/protocolbuffers/protobuf/archive/refs/tags/v3.19.1.tar.gz"], ) -bind( - name = "ssl", - actual = "@openssl//:ssl" +# bRPC cannot use boringssl. Build openssl. +http_archive( + name = "openssl", # 2021-12-14T15:45:01Z + build_file = "//bazel/third_party/openssl:openssl.BUILD", + sha256 = "f89199be8b23ca45fc7cb9f1d8d3ee67312318286ad030f5316aca6462db6c96", + strip_prefix = "openssl-1.1.1m", + urls = [ + "https://www.openssl.org/source/openssl-1.1.1m.tar.gz", + "https://github.com/openssl/openssl/archive/OpenSSL_1_1_1m.tar.gz", + ], ) -bind( - name = "ssl_macos", - actual = "@openssl_macos//:ssl" +http_archive( + name = "org_apache_thrift", # 2021-09-11T11:54:01Z + build_file = "//bazel/third_party/thrift:thrift.BUILD", + sha256 = "d5883566d161f8f6ddd4e21f3a9e3e6b8272799d054820f1c25b11e86718f86b", + strip_prefix = "thrift-0.15.0", + urls = ["https://archive.apache.org/dist/thrift/0.15.0/thrift-0.15.0.tar.gz"], ) -new_local_repository( - name = "zlib", - build_file = "//:zlib.BUILD", - path = "/usr", +# +# Perl Dependencies +# + +load("@rules_perl//perl:deps.bzl", "perl_register_toolchains") + +perl_register_toolchains() + +# +# Tools Dependencies +# + +http_archive( + name = "com_grail_bazel_compdb", + sha256 = "d32835b26dd35aad8fd0ba0d712265df6565a3ad860d39e4c01ad41059ea7eda", + strip_prefix = "bazel-compilation-database-0.5.2", + urls = ["https://github.com/grailbio/bazel-compilation-database/archive/0.5.2.tar.gz"], ) + +load("@com_grail_bazel_compdb//:deps.bzl", "bazel_compdb_deps") + +bazel_compdb_deps() diff --git a/bazel/brpc.bzl b/bazel/BUILD.bazel similarity index 52% rename from bazel/brpc.bzl rename to bazel/BUILD.bazel index 137c1ffa3f..5100f2eeee 100644 --- a/bazel/brpc.bzl +++ b/bazel/BUILD.bazel @@ -13,19 +13,18 @@ # See the License for the specific language governing permissions and # limitations under the License. -load("@com_google_protobuf//:protobuf.bzl", "cc_proto_library") - -def brpc_proto_library(name, srcs, deps=[], include=None, visibility=None, testonly=0): - native.filegroup(name=name + "_proto_srcs", - srcs=srcs, - visibility=visibility,) - cc_proto_library(name=name, - srcs=srcs, - deps=deps, - cc_libs=["@com_google_protobuf//:protobuf"], - include=include, - protoc="@com_google_protobuf//:protoc", - default_runtime="@com_google_protobuf//:protobuf", - testonly=testonly, - visibility=visibility,) +load("@com_grail_bazel_compdb//:defs.bzl", "compilation_database") +load("@com_grail_bazel_output_base_util//:defs.bzl", "OUTPUT_BASE") +compilation_database( + name = "brpc_compdb", + # OUTPUT_BASE is a dynamic value that will vary for each user workspace. + # If you would like your build outputs to be the same across users, then + # skip supplying this value, and substitute the default constant value + # "__OUTPUT_BASE__" through an external tool like `sed` or `jq` (see + # below shell commands for usage). + output_base = OUTPUT_BASE, + targets = [ + "//:brpc", + ], +) diff --git a/bazel/config/BUILD.bazel b/bazel/config/BUILD.bazel new file mode 100644 index 0000000000..4471bad1ba --- /dev/null +++ b/bazel/config/BUILD.bazel @@ -0,0 +1,99 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load("@bazel_skylib//lib:selects.bzl", "selects") + +licenses(["notice"]) # Apache v2 + +selects.config_setting_group( + name = "brpc_with_glog", + match_any = [ + ":brpc_with_glog_deprecated_flag", + ":brpc_with_glog_new_flag", + ], + visibility = ["//visibility:public"], +) + +config_setting( + name = "brpc_with_glog_deprecated_flag", + define_values = {"with_glog": "true"}, +) + +config_setting( + name = "brpc_with_glog_new_flag", + define_values = {"BRPC_WITH_GLOG": "true"}, +) + +selects.config_setting_group( + name = "brpc_with_mesalink", + match_any = [ + ":brpc_with_mesalink_deprecated_flag", + ":brpc_with_mesalink_new_flag", + ], + visibility = ["//visibility:public"], +) + +config_setting( + name = "brpc_with_mesalink_deprecated_flag", + define_values = {"with_mesalink": "true"}, +) + +config_setting( + name = "brpc_with_mesalink_new_flag", + define_values = {"BRPC_WITH_MESALINK": "true"}, +) + +selects.config_setting_group( + name = "brpc_with_thrift", + match_any = [ + ":brpc_with_thrift_deprecated_flag", + ":brpc_with_thrift_new_flag", + ], + visibility = ["//visibility:public"], +) + +config_setting( + name = "brpc_with_thrift_legacy_version", + define_values = {"BRPC_WITH_THRIFT_LEGACY_VERSION": "true"}, + visibility = ["//visibility:public"], +) + +config_setting( + name = "brpc_with_thrift_deprecated_flag", + define_values = {"with_thrift": "true"}, +) + +config_setting( + name = "brpc_with_thrift_new_flag", + define_values = {"BRPC_WITH_THRIFT": "true"}, +) + +config_setting( + name = "brpc_build_for_unittest", + define_values = {"BRPC_BUILD_FOR_UNITTEST": "true"}, + visibility = ["//visibility:public"], +) + +config_setting( + name = "brpc_with_sse42", + define_values = {"BRPC_WITH_SSE42": "true"}, + visibility = ["//visibility:public"], +) + +config_setting( + name = "darwin", + values = {"cpu": "darwin"}, + visibility = ["//:__subpkgs__"], +) diff --git a/bazel/third_party/BUILD.bazel b/bazel/third_party/BUILD.bazel new file mode 100644 index 0000000000..fefa6c3fea --- /dev/null +++ b/bazel/third_party/BUILD.bazel @@ -0,0 +1,17 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Thie empty BUILD.bazel file is required to make Bazel treat +# this directory as a package. diff --git a/bazel/third_party/crc32c/BUILD.bazel b/bazel/third_party/crc32c/BUILD.bazel new file mode 100644 index 0000000000..fefa6c3fea --- /dev/null +++ b/bazel/third_party/crc32c/BUILD.bazel @@ -0,0 +1,17 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Thie empty BUILD.bazel file is required to make Bazel treat +# this directory as a package. diff --git a/bazel/third_party/crc32c/crc32c.BUILD b/bazel/third_party/crc32c/crc32c.BUILD new file mode 100644 index 0000000000..72715d48d6 --- /dev/null +++ b/bazel/third_party/crc32c/crc32c.BUILD @@ -0,0 +1,93 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load("@rules_cc//cc:defs.bzl", "cc_library", "cc_test") + +genrule( + name = "crc32c_config_h", + srcs = ["src/crc32c_config.h.in"], + outs = ["crc32c/crc32c_config.h"], + cmd = """ +sed -e 's/#cmakedefine01/#define/' \ +""" + select({ + "@//bazel/config:brpc_with_sse42": """-e 's/ HAVE_SSE42/ HAVE_SSE42 1/' \ +""", + "//conditions:default": """-e 's/ HAVE_SSE42/ HAVE_SSE42 0/' \ +""", + }) + select({ + "@//bazel/config:brpc_with_glog": """-e 's/ CRC32C_TESTS_BUILT_WITH_GLOG/ CRC32C_TESTS_BUILT_WITH_GLOG 1/' \ +""", + "//conditions:default": """-e 's/ CRC32C_TESTS_BUILT_WITH_GLOG/ CRC32C_TESTS_BUILT_WITH_GLOG 0/' \ +""", + }) + """-e 's/ BYTE_ORDER_BIG_ENDIAN/ BYTE_ORDER_BIG_ENDIAN 0/' \ + -e 's/ HAVE_BUILTIN_PREFETCH/ HAVE_BUILTIN_PREFETCH 0/' \ + -e 's/ HAVE_MM_PREFETCH/ HAVE_MM_PREFETCH 0/' \ + -e 's/ HAVE_ARM64_CRC32C/ HAVE_ARM64_CRC32C 0/' \ + -e 's/ HAVE_STRONG_GETAUXVAL/ HAVE_STRONG_GETAUXVAL 0/' \ + -e 's/ HAVE_WEAK_GETAUXVAL/ HAVE_WEAK_GETAUXVAL 0/' \ + < $< > $@ +""", +) + +cc_library( + name = "crc32c", + srcs = [ + "src/crc32c.cc", + "src/crc32c_arm64.cc", + "src/crc32c_arm64.h", + "src/crc32c_arm64_check.h", + "src/crc32c_internal.h", + "src/crc32c_portable.cc", + "src/crc32c_prefetch.h", + "src/crc32c_read_le.h", + "src/crc32c_round_up.h", + "src/crc32c_sse42.cc", + "src/crc32c_sse42.h", + "src/crc32c_sse42_check.h", + ":crc32c_config_h", + ], + hdrs = [ + "include/crc32c/crc32c.h", + ], + copts = select({ + "@//bazel/config:brpc_with_sse42": ["-msse4.2"], + "//conditions:default": [], + }), + strip_include_prefix = "include", + visibility = ["//visibility:public"], +) + +cc_test( + name = "crc32c_test", + srcs = [ + "src/crc32c_arm64_unittest.cc", + "src/crc32c_extend_unittests.h", + "src/crc32c_portable_unittest.cc", + "src/crc32c_prefetch_unittest.cc", + "src/crc32c_read_le_unittest.cc", + "src/crc32c_round_up_unittest.cc", + "src/crc32c_sse42_unittest.cc", + "src/crc32c_test_main.cc", + "src/crc32c_unittest.cc", + ], + deps = [ + ":crc32c", + "@com_google_googletest//:gtest", + "@com_google_googletest//:gtest_main", + ] + select({ + "@//bazel/config:brpc_with_glog": ["@com_github_google_glog//:glog"], + "//conditions:default": [], + }), +) diff --git a/bazel/third_party/event/BUILD.bazel b/bazel/third_party/event/BUILD.bazel new file mode 100644 index 0000000000..fefa6c3fea --- /dev/null +++ b/bazel/third_party/event/BUILD.bazel @@ -0,0 +1,17 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Thie empty BUILD.bazel file is required to make Bazel treat +# this directory as a package. diff --git a/bazel/third_party/event/event.BUILD b/bazel/third_party/event/event.BUILD new file mode 100644 index 0000000000..6fd67592fa --- /dev/null +++ b/bazel/third_party/event/event.BUILD @@ -0,0 +1,59 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load("@rules_foreign_cc//foreign_cc:defs.bzl", "cmake") + +filegroup( + name = "all_srcs", + srcs = glob(["**"]), +) + +cmake( + name = "event", + cache_entries = { + "EVENT__DISABLE_BENCHMARK": "ON", + "EVENT__DISABLE_TESTS": "ON", + "EVENT__DISABLE_SAMPLES": "ON", + "EVENT__LIBRARY_TYPE": "STATIC", + "OPENSSL_ROOT_DIR": "$$EXT_BUILD_DEPS$$/openssl", + }, + generate_args = ["-GNinja"], + lib_source = ":all_srcs", + linkopts = [ + "-pthread", + ], + out_static_libs = select({ + "@platforms//os:windows": [ + "event.lib", + "event_core.lib", + "event_extra.lib", + "event_openssl.lib", + "event_pthreads.lib", + ], + "//conditions:default": [ + "libevent.a", + "libevent_core.a", + "libevent_extra.a", + "libevent_openssl.a", + "libevent_pthreads.a", + ], + }), + visibility = ["//visibility:public"], + deps = [ + # Zlib is only used for testing. + "@openssl//:crypto", + "@openssl//:ssl", + ], +) diff --git a/bazel/third_party/glog/0001-improvement-copts.patch b/bazel/third_party/glog/0001-improvement-copts.patch new file mode 100644 index 0000000000..135954eabc --- /dev/null +++ b/bazel/third_party/glog/0001-improvement-copts.patch @@ -0,0 +1,43 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +diff --git a/bazel/glog.bzl b/bazel/glog.bzl +index 40833b4..589659b 100755 +--- a/bazel/glog.bzl ++++ b/bazel/glog.bzl +@@ -55,7 +55,14 @@ def glog_library(namespace = "google", with_gflags = 1, **kwargs): + "-DHAVE_STRING_H", + "-DHAVE_UNWIND_H", + "-I%s/glog_internal" % gendir, +- ] + (["-DHAVE_LIB_GFLAGS"] if with_gflags else []) ++ ] + (["-DHAVE_LIB_GFLAGS"] if with_gflags else []) + [ ++ # bRPC extensions. ++ "-DHAVE_SNPRINTF", ++ "-DHAVE_LIB_GMOCK", ++ "-DHAVE_LIB_GTEST", ++ ] + + wasm_copts = [ + # Disable warnings that exists in glog. +@@ -74,6 +81,10 @@ def glog_library(namespace = "google", with_gflags = 1, **kwargs): + # For logging.cc. + "-DHAVE_PREAD", + "-DHAVE___ATTRIBUTE__", ++ ] + [ ++ # bRPC extensions. ++ "-DHAVE_RWLOCK", ++ "-DHAVE_SIGALTSTACK", + ] + + linux_or_darwin_copts = wasm_copts + [ diff --git a/bazel/third_party/glog/0002-mark-override.patch b/bazel/third_party/glog/0002-mark-override.patch new file mode 100644 index 0000000000..7a9bbb8ff3 --- /dev/null +++ b/bazel/third_party/glog/0002-mark-override.patch @@ -0,0 +1,36 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +diff --git a/src/glog/logging.h.in b/src/glog/logging.h.in +index 421f1e0..a363141 100755 +--- a/src/glog/logging.h.in ++++ b/src/glog/logging.h.in +@@ -1334,7 +1334,7 @@ class GOOGLE_GLOG_DLL_DECL LogStreamBuf : public std::streambuf { + } + + // This effectively ignores overflow. +- int_type overflow(int_type ch) { ++ int_type overflow(int_type ch) override { + return ch; + } + +@@ -1862,7 +1862,7 @@ class GOOGLE_GLOG_DLL_DECL NullStreamFatal : public NullStream { + NullStreamFatal() { } + NullStreamFatal(const char* file, int line, const CheckOpString& result) : + NullStream(file, line, result) { } +- @ac_cv___attribute___noreturn@ ~NullStreamFatal() throw () { _exit(1); } ++ @ac_cv___attribute___noreturn@ ~NullStreamFatal() throw () override { _exit(1); } + }; + + // Install a signal handler that will dump signal information and a stack diff --git a/bazel/third_party/glog/BUILD.bazel b/bazel/third_party/glog/BUILD.bazel new file mode 100644 index 0000000000..fefa6c3fea --- /dev/null +++ b/bazel/third_party/glog/BUILD.bazel @@ -0,0 +1,17 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Thie empty BUILD.bazel file is required to make Bazel treat +# this directory as a package. diff --git a/bazel/third_party/leveldb/BUILD.bazel b/bazel/third_party/leveldb/BUILD.bazel new file mode 100644 index 0000000000..ea0c10913f --- /dev/null +++ b/bazel/third_party/leveldb/BUILD.bazel @@ -0,0 +1,21 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +exports_files( + [ + "port_config.h", + "port.h", + ], +) diff --git a/bazel/third_party/leveldb/leveldb.BUILD b/bazel/third_party/leveldb/leveldb.BUILD new file mode 100644 index 0000000000..787f77f3d3 --- /dev/null +++ b/bazel/third_party/leveldb/leveldb.BUILD @@ -0,0 +1,72 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load("@rules_cc//cc:defs.bzl", "cc_library") +load("@bazel_skylib//rules:copy_file.bzl", "copy_file") + +copy_file( + name = "port_config_h", + src = "@//bazel/third_party/leveldb:port_config.h", + out = "port/port_config.h", + allow_symlink = True, +) + +copy_file( + name = "port_h", + src = "@//bazel/third_party/leveldb:port.h", + out = "port/port.h", + allow_symlink = True, +) + +cc_library( + name = "leveldb", + srcs = glob( + [ + "db/**/*.cc", + "db/**/*.h", + "helpers/**/*.cc", + "helpers/**/*.h", + "port/**/*.cc", + "port/**/*.h", + "table/**/*.cc", + "table/**/*.h", + "util/**/*.cc", + "util/**/*.h", + ], + exclude = [ + "**/*_test.cc", + "**/testutil.*", + "**/*_bench.cc", + "**/*_windows*", + "db/leveldbutil.cc", + ], + ), + hdrs = glob( + ["include/**/*.h"], + exclude = ["doc/**"], + ) + [ + ":port_h", + ":port_config_h", + ], + includes = [ + ".", + "include", + ], + visibility = ["//visibility:public"], + deps = [ + "@com_github_google_crc32c//:crc32c", + "@com_github_google_snappy//:snappy", + ], +) diff --git a/bazel/third_party/leveldb/port.h b/bazel/third_party/leveldb/port.h new file mode 100644 index 0000000000..8c9a4eafb7 --- /dev/null +++ b/bazel/third_party/leveldb/port.h @@ -0,0 +1,34 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// +// Copyright (c) 2011 The LevelDB Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. See the AUTHORS file for names of contributors. + +#ifndef STORAGE_LEVELDB_PORT_PORT_H_ +#define STORAGE_LEVELDB_PORT_PORT_H_ + +#include + +#define LEVELDB_HAS_PORT_CONFIG_H 1 + +// Include the appropriate platform specific file below. If you are +// porting to a new platform, see "port_example.h" for documentation +// of what the new port_.h file must provide. +#include "port/port_stdcxx.h" + +#endif // STORAGE_LEVELDB_PORT_PORT_H_ diff --git a/bazel/third_party/leveldb/port_config.h b/bazel/third_party/leveldb/port_config.h new file mode 100644 index 0000000000..4ccdebfb71 --- /dev/null +++ b/bazel/third_party/leveldb/port_config.h @@ -0,0 +1,38 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// +// Copyright 2017 The LevelDB Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. See the AUTHORS file for names of contributors. + +#ifndef STORAGE_LEVELDB_PORT_PORT_CONFIG_H_ +#define STORAGE_LEVELDB_PORT_PORT_CONFIG_H_ + +// Define to 1 if you have a definition for fdatasync() in . +#define HAVE_FUNC_FDATASYNC 1 + +// Define to 1 if you have Google CRC32C. +#define HAVE_CRC32C 1 + +// Define to 1 if you have Google Snappy. +#define HAVE_SNAPPY 1 + +// Define to 1 if your processor stores words with the most significant byte +// first (like Motorola and SPARC, unlike Intel and VAX). +#define LEVELDB_IS_BIG_ENDIAN 0 + +#endif // STORAGE_LEVELDB_PORT_PORT_CONFIG_H_ diff --git a/bazel/third_party/openssl/BUILD.bazel b/bazel/third_party/openssl/BUILD.bazel new file mode 100644 index 0000000000..fefa6c3fea --- /dev/null +++ b/bazel/third_party/openssl/BUILD.bazel @@ -0,0 +1,17 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Thie empty BUILD.bazel file is required to make Bazel treat +# this directory as a package. diff --git a/bazel/third_party/openssl/openssl.BUILD b/bazel/third_party/openssl/openssl.BUILD new file mode 100644 index 0000000000..c02cb6fb5b --- /dev/null +++ b/bazel/third_party/openssl/openssl.BUILD @@ -0,0 +1,165 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Copyright 2016 The Bazel Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Copied from https://github.com/bazelbuild/rules_foreign_cc/blob/0.7.0/examples/third_party/openssl/BUILD.openssl.bazel +# +# Modifications: +# 1. Create alias `ssl` & `crypto` to align with boringssl. +# 2. Build with `@com_github_madler_zlib//:zlib`. +# 3. Add more configure options coming from debian openssl package configurations. + +load("@rules_foreign_cc//foreign_cc:defs.bzl", "configure_make", "configure_make_variant") + +filegroup( + name = "all_srcs", + srcs = glob(["**"]), +) + +CONFIGURE_OPTIONS = [ + "no-idea", + "no-mdc2", + "no-rc5", + "no-ssl3", + "no-ssl3-method", + "enable-rfc3779", + "enable-cms", + "no-capieng", + "enable-ec_nistp_64_gcc_128", + "--with-zlib-include=$$EXT_BUILD_DEPS$$", + "--with-zlib-lib=$$EXT_BUILD_DEPS$$", + # https://stackoverflow.com/questions/36220341/struct-in6-addr-has-no-member-named-s6-addr32-with-ansi + "-D_DEFAULT_SOURCE=1", + "-DPEDANTIC", +] + +LIB_NAME = "openssl" + +MAKE_TARGETS = [ + "build_libs", + "install_dev", +] + +config_setting( + name = "msvc_compiler", + flag_values = { + "@bazel_tools//tools/cpp:compiler": "msvc-cl", + }, + visibility = ["//visibility:public"], +) + +alias( + name = "ssl", + actual = "openssl", + visibility = ["//visibility:public"], +) + +alias( + name = "crypto", + actual = "openssl", + visibility = ["//visibility:public"], +) + +alias( + name = "openssl", + actual = select({ + ":msvc_compiler": "openssl_msvc", + "//conditions:default": "openssl_default", + }), + visibility = ["//visibility:public"], +) + +configure_make_variant( + name = "openssl_msvc", + build_data = [ + "@nasm//:nasm", + "@perl//:perl", + ], + configure_command = "Configure", + configure_in_place = True, + configure_options = CONFIGURE_OPTIONS + [ + "VC-WIN64A", + # Unset Microsoft Assembler (MASM) flags set by built-in MSVC toolchain, + # as NASM is unsed to build OpenSSL rather than MASM + "ASFLAGS=\" \"", + ], + configure_prefix = "$PERL", + env = { + # The Zi flag must be set otherwise OpenSSL fails to build due to missing .pdb files + "CFLAGS": "-Zi", + "PATH": "$$(dirname $(execpath @nasm//:nasm)):$$PATH", + "PERL": "$(execpath @perl//:perl)", + }, + lib_name = LIB_NAME, + lib_source = ":all_srcs", + out_static_libs = [ + "libssl.lib", + "libcrypto.lib", + ], + targets = MAKE_TARGETS, + toolchain = "@rules_foreign_cc//toolchains:preinstalled_nmake_toolchain", + deps = [ + "@com_github_madler_zlib//:zlib", + ], +) + +# https://wiki.openssl.org/index.php/Compilation_and_Installation +configure_make( + name = "openssl_default", + configure_command = "config", + configure_in_place = True, + configure_options = CONFIGURE_OPTIONS, + env = select({ + "@platforms//os:macos": { + "AR": "", + "PERL": "$$EXT_BUILD_ROOT$$/$(PERL)", + }, + "//conditions:default": { + "PERL": "$$EXT_BUILD_ROOT$$/$(PERL)", + }, + }), + lib_name = LIB_NAME, + lib_source = ":all_srcs", + # Note that for Linux builds, libssl must come before libcrypto on the linker command-line. + # As such, libssl must be listed before libcrypto + out_static_libs = [ + "libssl.a", + "libcrypto.a", + ], + targets = MAKE_TARGETS, + toolchains = ["@rules_perl//:current_toolchain"], + deps = [ + "@com_github_madler_zlib//:zlib", + ], +) + +filegroup( + name = "gen_dir", + srcs = [":openssl"], + output_group = "gen_dir", +) diff --git a/bazel/third_party/protobuf/BUILD.bazel b/bazel/third_party/protobuf/BUILD.bazel new file mode 100644 index 0000000000..fefa6c3fea --- /dev/null +++ b/bazel/third_party/protobuf/BUILD.bazel @@ -0,0 +1,17 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Thie empty BUILD.bazel file is required to make Bazel treat +# this directory as a package. diff --git a/bazel/third_party/protobuf/protobuf.BUILD b/bazel/third_party/protobuf/protobuf.BUILD new file mode 100644 index 0000000000..0d5188ea1c --- /dev/null +++ b/bazel/third_party/protobuf/protobuf.BUILD @@ -0,0 +1,498 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Copyright 2008 Google Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# Copied from https://github.com/protocolbuffers/protobuf/blob/v3.19.1/BUILD +# +# Modifications: +# 1. Remove all non-cxx rules. +# 2. Remove android support. +# 3. zlib use @com_github_madler_zlib//:zlib + +# Bazel (https://bazel.build/) BUILD file for Protobuf. + +load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", native_cc_proto_library = "cc_proto_library") +load("@rules_proto//proto:defs.bzl", "proto_lang_toolchain", "proto_library") +load(":compiler_config_setting.bzl", "create_compiler_config_setting") +load( + ":protobuf.bzl", + "adapt_proto_library", +) + +licenses(["notice"]) + +exports_files(["LICENSE"]) + +################################################################################ +# build configuration +################################################################################ + +################################################################################ +# ZLIB configuration +################################################################################ + +ZLIB_DEPS = ["@com_github_madler_zlib//:zlib"] + +################################################################################ +# Protobuf Runtime Library +################################################################################ + +MSVC_COPTS = [ + "/wd4018", # -Wno-sign-compare + "/wd4065", # switch statement contains 'default' but no 'case' labels + "/wd4146", # unary minus operator applied to unsigned type, result still unsigned + "/wd4244", # 'conversion' conversion from 'type1' to 'type2', possible loss of data + "/wd4251", # 'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2' + "/wd4267", # 'var' : conversion from 'size_t' to 'type', possible loss of data + "/wd4305", # 'identifier' : truncation from 'type1' to 'type2' + "/wd4307", # 'operator' : integral constant overflow + "/wd4309", # 'conversion' : truncation of constant value + "/wd4334", # 'operator' : result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?) + "/wd4355", # 'this' : used in base member initializer list + "/wd4506", # no definition for inline function 'function' + "/wd4800", # 'type' : forcing value to bool 'true' or 'false' (performance warning) + "/wd4996", # The compiler encountered a deprecated declaration. +] + +COPTS = select({ + ":msvc": MSVC_COPTS, + "//conditions:default": [ + "-DHAVE_ZLIB", + "-Wmissing-field-initializers", + "-Woverloaded-virtual", + "-Wno-sign-compare", + ], +}) + +create_compiler_config_setting( + name = "msvc", + value = "msvc-cl", + visibility = [ + # Public, but Protobuf only visibility. + "//:__subpackages__", + ], +) + +# Android and MSVC builds do not need to link in a separate pthread library. +LINK_OPTS = select({ + ":msvc": [ + # Suppress linker warnings about files with no symbols defined. + "-ignore:4221", + ], + "//conditions:default": [ + "-lpthread", + "-lm", + ], +}) + +cc_library( + name = "protobuf_lite", + srcs = [ + # AUTOGEN(protobuf_lite_srcs) + "src/google/protobuf/any_lite.cc", + "src/google/protobuf/arena.cc", + "src/google/protobuf/arenastring.cc", + "src/google/protobuf/extension_set.cc", + "src/google/protobuf/generated_enum_util.cc", + "src/google/protobuf/generated_message_table_driven_lite.cc", + "src/google/protobuf/generated_message_tctable_lite.cc", + "src/google/protobuf/generated_message_util.cc", + "src/google/protobuf/implicit_weak_message.cc", + "src/google/protobuf/inlined_string_field.cc", + "src/google/protobuf/io/coded_stream.cc", + "src/google/protobuf/io/io_win32.cc", + "src/google/protobuf/io/strtod.cc", + "src/google/protobuf/io/zero_copy_stream.cc", + "src/google/protobuf/io/zero_copy_stream_impl.cc", + "src/google/protobuf/io/zero_copy_stream_impl_lite.cc", + "src/google/protobuf/map.cc", + "src/google/protobuf/message_lite.cc", + "src/google/protobuf/parse_context.cc", + "src/google/protobuf/repeated_field.cc", + "src/google/protobuf/repeated_ptr_field.cc", + "src/google/protobuf/stubs/bytestream.cc", + "src/google/protobuf/stubs/common.cc", + "src/google/protobuf/stubs/int128.cc", + "src/google/protobuf/stubs/status.cc", + "src/google/protobuf/stubs/statusor.cc", + "src/google/protobuf/stubs/stringpiece.cc", + "src/google/protobuf/stubs/stringprintf.cc", + "src/google/protobuf/stubs/structurally_valid.cc", + "src/google/protobuf/stubs/strutil.cc", + "src/google/protobuf/stubs/time.cc", + "src/google/protobuf/wire_format_lite.cc", + ], + hdrs = glob([ + "src/google/protobuf/**/*.h", + "src/google/protobuf/**/*.inc", + ]), + copts = COPTS, + includes = ["src/"], + linkopts = LINK_OPTS, + visibility = ["//visibility:public"], +) + +PROTOBUF_DEPS = select({ + ":msvc": [], + "//conditions:default": ZLIB_DEPS, +}) + +cc_library( + name = "protobuf", + srcs = [ + # AUTOGEN(protobuf_srcs) + "src/google/protobuf/any.cc", + "src/google/protobuf/any.pb.cc", + "src/google/protobuf/api.pb.cc", + "src/google/protobuf/compiler/importer.cc", + "src/google/protobuf/compiler/parser.cc", + "src/google/protobuf/descriptor.cc", + "src/google/protobuf/descriptor.pb.cc", + "src/google/protobuf/descriptor_database.cc", + "src/google/protobuf/duration.pb.cc", + "src/google/protobuf/dynamic_message.cc", + "src/google/protobuf/empty.pb.cc", + "src/google/protobuf/extension_set_heavy.cc", + "src/google/protobuf/field_mask.pb.cc", + "src/google/protobuf/generated_message_bases.cc", + "src/google/protobuf/generated_message_reflection.cc", + "src/google/protobuf/generated_message_table_driven.cc", + "src/google/protobuf/generated_message_tctable_full.cc", + "src/google/protobuf/io/gzip_stream.cc", + "src/google/protobuf/io/printer.cc", + "src/google/protobuf/io/tokenizer.cc", + "src/google/protobuf/map_field.cc", + "src/google/protobuf/message.cc", + "src/google/protobuf/reflection_ops.cc", + "src/google/protobuf/service.cc", + "src/google/protobuf/source_context.pb.cc", + "src/google/protobuf/struct.pb.cc", + "src/google/protobuf/stubs/substitute.cc", + "src/google/protobuf/text_format.cc", + "src/google/protobuf/timestamp.pb.cc", + "src/google/protobuf/type.pb.cc", + "src/google/protobuf/unknown_field_set.cc", + "src/google/protobuf/util/delimited_message_util.cc", + "src/google/protobuf/util/field_comparator.cc", + "src/google/protobuf/util/field_mask_util.cc", + "src/google/protobuf/util/internal/datapiece.cc", + "src/google/protobuf/util/internal/default_value_objectwriter.cc", + "src/google/protobuf/util/internal/error_listener.cc", + "src/google/protobuf/util/internal/field_mask_utility.cc", + "src/google/protobuf/util/internal/json_escaping.cc", + "src/google/protobuf/util/internal/json_objectwriter.cc", + "src/google/protobuf/util/internal/json_stream_parser.cc", + "src/google/protobuf/util/internal/object_writer.cc", + "src/google/protobuf/util/internal/proto_writer.cc", + "src/google/protobuf/util/internal/protostream_objectsource.cc", + "src/google/protobuf/util/internal/protostream_objectwriter.cc", + "src/google/protobuf/util/internal/type_info.cc", + "src/google/protobuf/util/internal/utility.cc", + "src/google/protobuf/util/json_util.cc", + "src/google/protobuf/util/message_differencer.cc", + "src/google/protobuf/util/time_util.cc", + "src/google/protobuf/util/type_resolver_util.cc", + "src/google/protobuf/wire_format.cc", + "src/google/protobuf/wrappers.pb.cc", + ], + hdrs = glob([ + "src/**/*.h", + "src/**/*.inc", + ]), + copts = COPTS, + includes = ["src/"], + linkopts = LINK_OPTS, + visibility = ["//visibility:public"], + deps = [":protobuf_lite"] + PROTOBUF_DEPS, +) + +# This provides just the header files for use in projects that need to build +# shared libraries for dynamic loading. This target is available until Bazel +# adds native support for such use cases. +# TODO(keveman): Remove this target once the support gets added to Bazel. +cc_library( + name = "protobuf_headers", + hdrs = glob([ + "src/**/*.h", + "src/**/*.inc", + ]), + includes = ["src/"], + visibility = ["//visibility:public"], +) + +# Map of all well known protos. +# name => (include path, imports) +WELL_KNOWN_PROTO_MAP = { + "any": ("src/google/protobuf/any.proto", []), + "api": ( + "src/google/protobuf/api.proto", + [ + "source_context", + "type", + ], + ), + "compiler_plugin": ( + "src/google/protobuf/compiler/plugin.proto", + ["descriptor"], + ), + "descriptor": ("src/google/protobuf/descriptor.proto", []), + "duration": ("src/google/protobuf/duration.proto", []), + "empty": ("src/google/protobuf/empty.proto", []), + "field_mask": ("src/google/protobuf/field_mask.proto", []), + "source_context": ("src/google/protobuf/source_context.proto", []), + "struct": ("src/google/protobuf/struct.proto", []), + "timestamp": ("src/google/protobuf/timestamp.proto", []), + "type": ( + "src/google/protobuf/type.proto", + [ + "any", + "source_context", + ], + ), + "wrappers": ("src/google/protobuf/wrappers.proto", []), +} + +WELL_KNOWN_PROTOS = [value[0] for value in WELL_KNOWN_PROTO_MAP.values()] + +LITE_WELL_KNOWN_PROTO_MAP = { + "any": ("src/google/protobuf/any.proto", []), + "api": ( + "src/google/protobuf/api.proto", + [ + "source_context", + "type", + ], + ), + "duration": ("src/google/protobuf/duration.proto", []), + "empty": ("src/google/protobuf/empty.proto", []), + "field_mask": ("src/google/protobuf/field_mask.proto", []), + "source_context": ("src/google/protobuf/source_context.proto", []), + "struct": ("src/google/protobuf/struct.proto", []), + "timestamp": ("src/google/protobuf/timestamp.proto", []), + "type": ( + "src/google/protobuf/type.proto", + [ + "any", + "source_context", + ], + ), + "wrappers": ("src/google/protobuf/wrappers.proto", []), +} + +LITE_WELL_KNOWN_PROTOS = [value[0] for value in LITE_WELL_KNOWN_PROTO_MAP.values()] + +filegroup( + name = "well_known_protos", + srcs = WELL_KNOWN_PROTOS, + visibility = ["//visibility:public"], +) + +filegroup( + name = "lite_well_known_protos", + srcs = LITE_WELL_KNOWN_PROTOS, + visibility = ["//visibility:public"], +) + +adapt_proto_library( + name = "cc_wkt_protos_genproto", + visibility = ["//visibility:public"], + deps = [proto + "_proto" for proto in WELL_KNOWN_PROTO_MAP.keys()], +) + +cc_library( + name = "cc_wkt_protos", + deprecation = "Only for backward compatibility. Do not use.", + visibility = ["//visibility:public"], +) + +################################################################################ +# Well Known Types Proto Library Rules +# +# These proto_library rules can be used with one of the language specific proto +# library rules i.e. java_proto_library: +# +# java_proto_library( +# name = "any_java_proto", +# deps = ["@com_google_protobuf//:any_proto], +# ) +################################################################################ + +[proto_library( + name = proto[0] + "_proto", + srcs = [proto[1][0]], + strip_import_prefix = "src", + visibility = ["//visibility:public"], + deps = [dep + "_proto" for dep in proto[1][1]], +) for proto in WELL_KNOWN_PROTO_MAP.items()] + +[native_cc_proto_library( + name = proto + "_cc_proto", + visibility = ["//visibility:private"], + deps = [proto + "_proto"], +) for proto in WELL_KNOWN_PROTO_MAP.keys()] + +################################################################################ +# Protocol Buffers Compiler +################################################################################ + +cc_library( + name = "protoc_lib", + srcs = [ + # AUTOGEN(protoc_lib_srcs) + "src/google/protobuf/compiler/code_generator.cc", + "src/google/protobuf/compiler/command_line_interface.cc", + "src/google/protobuf/compiler/cpp/cpp_enum.cc", + "src/google/protobuf/compiler/cpp/cpp_enum_field.cc", + "src/google/protobuf/compiler/cpp/cpp_extension.cc", + "src/google/protobuf/compiler/cpp/cpp_field.cc", + "src/google/protobuf/compiler/cpp/cpp_file.cc", + "src/google/protobuf/compiler/cpp/cpp_generator.cc", + "src/google/protobuf/compiler/cpp/cpp_helpers.cc", + "src/google/protobuf/compiler/cpp/cpp_map_field.cc", + "src/google/protobuf/compiler/cpp/cpp_message.cc", + "src/google/protobuf/compiler/cpp/cpp_message_field.cc", + "src/google/protobuf/compiler/cpp/cpp_padding_optimizer.cc", + "src/google/protobuf/compiler/cpp/cpp_parse_function_generator.cc", + "src/google/protobuf/compiler/cpp/cpp_primitive_field.cc", + "src/google/protobuf/compiler/cpp/cpp_service.cc", + "src/google/protobuf/compiler/cpp/cpp_string_field.cc", + "src/google/protobuf/compiler/csharp/csharp_doc_comment.cc", + "src/google/protobuf/compiler/csharp/csharp_enum.cc", + "src/google/protobuf/compiler/csharp/csharp_enum_field.cc", + "src/google/protobuf/compiler/csharp/csharp_field_base.cc", + "src/google/protobuf/compiler/csharp/csharp_generator.cc", + "src/google/protobuf/compiler/csharp/csharp_helpers.cc", + "src/google/protobuf/compiler/csharp/csharp_map_field.cc", + "src/google/protobuf/compiler/csharp/csharp_message.cc", + "src/google/protobuf/compiler/csharp/csharp_message_field.cc", + "src/google/protobuf/compiler/csharp/csharp_primitive_field.cc", + "src/google/protobuf/compiler/csharp/csharp_reflection_class.cc", + "src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc", + "src/google/protobuf/compiler/csharp/csharp_repeated_message_field.cc", + "src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc", + "src/google/protobuf/compiler/csharp/csharp_source_generator_base.cc", + "src/google/protobuf/compiler/csharp/csharp_wrapper_field.cc", + "src/google/protobuf/compiler/java/java_context.cc", + "src/google/protobuf/compiler/java/java_doc_comment.cc", + "src/google/protobuf/compiler/java/java_enum.cc", + "src/google/protobuf/compiler/java/java_enum_field.cc", + "src/google/protobuf/compiler/java/java_enum_field_lite.cc", + "src/google/protobuf/compiler/java/java_enum_lite.cc", + "src/google/protobuf/compiler/java/java_extension.cc", + "src/google/protobuf/compiler/java/java_extension_lite.cc", + "src/google/protobuf/compiler/java/java_field.cc", + "src/google/protobuf/compiler/java/java_file.cc", + "src/google/protobuf/compiler/java/java_generator.cc", + "src/google/protobuf/compiler/java/java_generator_factory.cc", + "src/google/protobuf/compiler/java/java_helpers.cc", + "src/google/protobuf/compiler/java/java_kotlin_generator.cc", + "src/google/protobuf/compiler/java/java_map_field.cc", + "src/google/protobuf/compiler/java/java_map_field_lite.cc", + "src/google/protobuf/compiler/java/java_message.cc", + "src/google/protobuf/compiler/java/java_message_builder.cc", + "src/google/protobuf/compiler/java/java_message_builder_lite.cc", + "src/google/protobuf/compiler/java/java_message_field.cc", + "src/google/protobuf/compiler/java/java_message_field_lite.cc", + "src/google/protobuf/compiler/java/java_message_lite.cc", + "src/google/protobuf/compiler/java/java_name_resolver.cc", + "src/google/protobuf/compiler/java/java_primitive_field.cc", + "src/google/protobuf/compiler/java/java_primitive_field_lite.cc", + "src/google/protobuf/compiler/java/java_service.cc", + "src/google/protobuf/compiler/java/java_shared_code_generator.cc", + "src/google/protobuf/compiler/java/java_string_field.cc", + "src/google/protobuf/compiler/java/java_string_field_lite.cc", + "src/google/protobuf/compiler/js/js_generator.cc", + "src/google/protobuf/compiler/js/well_known_types_embed.cc", + "src/google/protobuf/compiler/objectivec/objectivec_enum.cc", + "src/google/protobuf/compiler/objectivec/objectivec_enum_field.cc", + "src/google/protobuf/compiler/objectivec/objectivec_extension.cc", + "src/google/protobuf/compiler/objectivec/objectivec_field.cc", + "src/google/protobuf/compiler/objectivec/objectivec_file.cc", + "src/google/protobuf/compiler/objectivec/objectivec_generator.cc", + "src/google/protobuf/compiler/objectivec/objectivec_helpers.cc", + "src/google/protobuf/compiler/objectivec/objectivec_map_field.cc", + "src/google/protobuf/compiler/objectivec/objectivec_message.cc", + "src/google/protobuf/compiler/objectivec/objectivec_message_field.cc", + "src/google/protobuf/compiler/objectivec/objectivec_oneof.cc", + "src/google/protobuf/compiler/objectivec/objectivec_primitive_field.cc", + "src/google/protobuf/compiler/php/php_generator.cc", + "src/google/protobuf/compiler/plugin.cc", + "src/google/protobuf/compiler/plugin.pb.cc", + "src/google/protobuf/compiler/python/python_generator.cc", + "src/google/protobuf/compiler/ruby/ruby_generator.cc", + "src/google/protobuf/compiler/subprocess.cc", + "src/google/protobuf/compiler/zip_writer.cc", + ], + copts = COPTS, + includes = ["src/"], + linkopts = LINK_OPTS, + visibility = ["//visibility:public"], + deps = [":protobuf"], +) + +cc_binary( + name = "protoc", + srcs = ["src/google/protobuf/compiler/main.cc"], + linkopts = LINK_OPTS, + visibility = ["//visibility:public"], + deps = [":protoc_lib"], +) + +proto_lang_toolchain( + name = "cc_toolchain", + blacklisted_protos = [proto + "_proto" for proto in WELL_KNOWN_PROTO_MAP.keys()], + command_line = "--cpp_out=$(OUT)", + runtime = ":protobuf", + visibility = ["//visibility:public"], +) + +alias( + name = "objectivec", + actual = "//objectivec", + visibility = ["//visibility:public"], +) + +alias( + name = "protobuf_objc", + actual = "//objectivec", + visibility = ["//visibility:public"], +) diff --git a/bazel/third_party/snappy/BUILD.bazel b/bazel/third_party/snappy/BUILD.bazel new file mode 100644 index 0000000000..fefa6c3fea --- /dev/null +++ b/bazel/third_party/snappy/BUILD.bazel @@ -0,0 +1,17 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Thie empty BUILD.bazel file is required to make Bazel treat +# this directory as a package. diff --git a/bazel/third_party/snappy/snappy.BUILD b/bazel/third_party/snappy/snappy.BUILD new file mode 100644 index 0000000000..9cfb1ade1a --- /dev/null +++ b/bazel/third_party/snappy/snappy.BUILD @@ -0,0 +1,122 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Copyright 2015 The TensorFlow Authors. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Copied from https://github.com/tensorflow/tensorflow/blob/bdd8bf316e4ab7d699127d192d30eb614a158462/third_party/snappy.BUILD + +load("@rules_cc//cc:defs.bzl", "cc_library") + +cc_library( + name = "snappy", + srcs = [ + "config.h", + "snappy.cc", + "snappy.h", + "snappy-internal.h", + "snappy-sinksource.cc", + "snappy-stubs-internal.cc", + "snappy-stubs-internal.h", + "snappy-stubs-public.h", + ], + hdrs = [ + "snappy.h", + "snappy-sinksource.h", + ], + copts = [ + "-DHAVE_CONFIG_H", + "-fno-exceptions", + "-Wno-sign-compare", + "-Wno-shift-negative-value", + ], + includes = ["."], + visibility = ["//visibility:public"], +) + +genrule( + name = "config_h", + outs = ["config.h"], + cmd = "\n".join([ + "cat <<'EOF' >$@", + "#define HAVE_STDDEF_H 1", + "#define HAVE_STDINT_H 1", + "", + "#ifdef __has_builtin", + "# if !defined(HAVE_BUILTIN_EXPECT) && __has_builtin(__builtin_expect)", + "# define HAVE_BUILTIN_EXPECT 1", + "# endif", + "# if !defined(HAVE_BUILTIN_CTZ) && __has_builtin(__builtin_ctzll)", + "# define HAVE_BUILTIN_CTZ 1", + "# endif", + "#elif defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ >= 4)", + "# ifndef HAVE_BUILTIN_EXPECT", + "# define HAVE_BUILTIN_EXPECT 1", + "# endif", + "# ifndef HAVE_BUILTIN_CTZ", + "# define HAVE_BUILTIN_CTZ 1", + "# endif", + "#endif", + "", + "#ifdef __has_include", + "# if !defined(HAVE_BYTESWAP_H) && __has_include()", + "# define HAVE_BYTESWAP_H 1", + "# endif", + "# if !defined(HAVE_UNISTD_H) && __has_include()", + "# define HAVE_UNISTD_H 1", + "# endif", + "# if !defined(HAVE_SYS_ENDIAN_H) && __has_include()", + "# define HAVE_SYS_ENDIAN_H 1", + "# endif", + "# if !defined(HAVE_SYS_MMAN_H) && __has_include()", + "# define HAVE_SYS_MMAN_H 1", + "# endif", + "# if !defined(HAVE_SYS_UIO_H) && __has_include()", + "# define HAVE_SYS_UIO_H 1", + "# endif", + "#endif", + "", + "#ifndef SNAPPY_IS_BIG_ENDIAN", + "# ifdef __s390x__", + "# define SNAPPY_IS_BIG_ENDIAN 1", + "# elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__", + "# define SNAPPY_IS_BIG_ENDIAN 1", + "# endif", + "#endif", + "EOF", + ]), +) + +genrule( + name = "snappy_stubs_public_h", + srcs = ["snappy-stubs-public.h.in"], + outs = ["snappy-stubs-public.h"], + cmd = ("sed " + + "-e 's/$${\\(.*\\)_01}/\\1/g' " + + "-e 's/$${SNAPPY_MAJOR}/1/g' " + + "-e 's/$${SNAPPY_MINOR}/1/g' " + + "-e 's/$${SNAPPY_PATCHLEVEL}/7/g' " + + "$< >$@"), +) diff --git a/bazel/third_party/thrift/BUILD.bazel b/bazel/third_party/thrift/BUILD.bazel new file mode 100644 index 0000000000..fefa6c3fea --- /dev/null +++ b/bazel/third_party/thrift/BUILD.bazel @@ -0,0 +1,17 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Thie empty BUILD.bazel file is required to make Bazel treat +# this directory as a package. diff --git a/bazel/third_party/thrift/thrift.BUILD b/bazel/third_party/thrift/thrift.BUILD new file mode 100644 index 0000000000..079606aacf --- /dev/null +++ b/bazel/third_party/thrift/thrift.BUILD @@ -0,0 +1,75 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load("@rules_foreign_cc//foreign_cc:defs.bzl", "cmake") + +filegroup( + name = "all_srcs", + srcs = glob(["**"]), +) + +cmake( + name = "thrift", + cache_entries = { + "BUILD_COMPILER": "OFF", + "BUILD_TESTING": "OFF", + "BUILD_TUTORIALS": "OFF", + "WITH_AS3": "OFF", + "WITH_CPP": "ON", + "WITH_C_GLIB": "OFF", + "WITH_JAVA": "OFF", + "WITH_JAVASCRIPT": "OFF", + "WITH_NODEJS": "OFF", + "WITH_PYTHON": "OFF", + "BUILD_SHARED_LIBS": "OFF", + "Boost_USE_STATIC_LIBS": "ON", + "BOOST_ROOT": "$$EXT_BUILD_DEPS$$", + "LIBEVENT_INCLUDE_DIRS": "$$EXT_BUILD_DEPS$$/event/include", + "LIBEVENT_LIBRARIES": "$$EXT_BUILD_DEPS$$/event/lib/libevent.a", + "OPENSSL_ROOT_DIR": "$$EXT_BUILD_DEPS$$/openssl", + "ZLIB_ROOT": "$$EXT_BUILD_DEPS$$/zlib", + }, + generate_args = ["-GNinja"], + lib_source = ":all_srcs", + linkopts = [ + "-pthread", + ], + out_static_libs = select({ + "@platforms//os:windows": [ + "thrift.lib", + "thriftnb.lib", + "thriftz.lib", + ], + "//conditions:default": [ + "libthrift.a", + "libthriftnb.a", + "libthriftz.a", + ], + }), + visibility = ["//visibility:public"], + deps = [ + "@boost//:algorithm", + "@boost//:locale", + "@boost//:noncopyable", + "@boost//:numeric_conversion", + "@boost//:scoped_array", + "@boost//:smart_ptr", + "@boost//:tokenizer", + "@com_github_libevent_libevent//:event", + "@com_github_madler_zlib//:zlib", + "@openssl//:crypto", + "@openssl//:ssl", + ], +) diff --git a/bazel/third_party/zlib/BUILD.bazel b/bazel/third_party/zlib/BUILD.bazel new file mode 100644 index 0000000000..fefa6c3fea --- /dev/null +++ b/bazel/third_party/zlib/BUILD.bazel @@ -0,0 +1,17 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Thie empty BUILD.bazel file is required to make Bazel treat +# this directory as a package. diff --git a/bazel/third_party/zlib/zlib.BUILD b/bazel/third_party/zlib/zlib.BUILD new file mode 100644 index 0000000000..d8139b63d6 --- /dev/null +++ b/bazel/third_party/zlib/zlib.BUILD @@ -0,0 +1,111 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Copyright 2008 Google Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# Copied from https://github.com/protocolbuffers/protobuf/blob/v3.9.1/third_party/zlib.BUILD + +load("@rules_cc//cc:defs.bzl", "cc_library") + +_ZLIB_HEADERS = [ + "crc32.h", + "deflate.h", + "gzguts.h", + "inffast.h", + "inffixed.h", + "inflate.h", + "inftrees.h", + "trees.h", + "zconf.h", + "zlib.h", + "zutil.h", +] + +_ZLIB_PREFIXED_HEADERS = ["zlib/include/" + hdr for hdr in _ZLIB_HEADERS] + +# In order to limit the damage from the `includes` propagation +# via `:zlib`, copy the public headers to a subdirectory and +# expose those. +genrule( + name = "copy_public_headers", + srcs = _ZLIB_HEADERS, + outs = _ZLIB_PREFIXED_HEADERS, + cmd = "cp $(SRCS) $(@D)/zlib/include/", + visibility = ["//visibility:private"], +) + +cc_library( + name = "zlib", + srcs = [ + "adler32.c", + "compress.c", + "crc32.c", + "deflate.c", + "gzclose.c", + "gzlib.c", + "gzread.c", + "gzwrite.c", + "infback.c", + "inffast.c", + "inflate.c", + "inftrees.c", + "trees.c", + "uncompr.c", + "zutil.c", + ], + hdrs = _ZLIB_PREFIXED_HEADERS, + copts = select({ + ":windows": [], + "//conditions:default": [ + "-Wno-unused-variable", + "-Wno-implicit-function-declaration", + ], + }), + includes = ["zlib/include/"], + visibility = ["//visibility:public"], +) + +config_setting( + name = "windows", + constraint_values = [ + "@platforms//os:windows", + ], +) diff --git a/example/BUILD b/example/BUILD.bazel similarity index 91% rename from example/BUILD rename to example/BUILD.bazel index d688749d83..5ef87e0a66 100644 --- a/example/BUILD +++ b/example/BUILD.bazel @@ -13,6 +13,9 @@ # See the License for the specific language governing permissions and # limitations under the License. +load("@rules_proto//proto:defs.bzl", "proto_library") +load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_proto_library") + COPTS = [ "-D__STDC_FORMAT_MACROS", "-DBTHREAD_USE_FAST_PTHREAD_MUTEX", @@ -27,7 +30,7 @@ COPTS = [ "-fno-omit-frame-pointer", "-DGFLAGS_NS=google", ] + select({ - "//:with_glog": ["-DBRPC_WITH_GLOG=1"], + "//bazel/config:brpc_with_glog": ["-DBRPC_WITH_GLOG=1"], "//conditions:default": ["-DBRPC_WITH_GLOG=0"], }) @@ -50,6 +53,7 @@ cc_binary( srcs = [ "echo_c++/server.cpp", ], + copts = COPTS, includes = [ "echo_c++", ], @@ -57,7 +61,6 @@ cc_binary( ":cc_echo_c++_proto", "//:brpc", ], - copts = COPTS, ) cc_binary( @@ -65,6 +68,7 @@ cc_binary( srcs = [ "echo_c++/client.cpp", ], + copts = COPTS, includes = [ "echo_c++", ], @@ -72,5 +76,4 @@ cc_binary( ":cc_echo_c++_proto", "//:brpc", ], - copts = COPTS, ) diff --git a/example/build_with_old_bazel/.bazelrc b/example/build_with_old_bazel/.bazelrc new file mode 100644 index 0000000000..14a9b50878 --- /dev/null +++ b/example/build_with_old_bazel/.bazelrc @@ -0,0 +1,16 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +build --incompatible_disable_deprecated_attr_params=false diff --git a/example/build_with_old_bazel/.bazelversion b/example/build_with_old_bazel/.bazelversion new file mode 100644 index 0000000000..e3eed59fa7 --- /dev/null +++ b/example/build_with_old_bazel/.bazelversion @@ -0,0 +1,16 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +0.28.0 diff --git a/example/build_with_old_bazel/BUILD.bazel b/example/build_with_old_bazel/BUILD.bazel new file mode 100644 index 0000000000..8394dcb657 --- /dev/null +++ b/example/build_with_old_bazel/BUILD.bazel @@ -0,0 +1,28 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +genrule( + name = "empty_cc", + outs = ["empty.cc"], + cmd = "echo 'int main(){return 0;}' > $@", +) + +cc_binary( + name = "empty", + srcs = [":empty_cc"], + deps = [ + "@com_github_brpc_brpc//:brpc", + ], +) diff --git a/example/build_with_old_bazel/WORKSPACE b/example/build_with_old_bazel/WORKSPACE new file mode 100644 index 0000000000..02ef4c52f9 --- /dev/null +++ b/example/build_with_old_bazel/WORKSPACE @@ -0,0 +1,134 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +# +# WARNING: This example is not a best practice for how to build with bRPC in bazel. +# + +workspace(name = "com_github_brpc_brpc_example_build_with_old_bazel") + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +# +# Constants +# + +BAZEL_SKYLIB_VERSION = "1.1.1" # 2021-09-27T17:33:49Z + +BAZEL_SKYLIB_SHA256 = "c6966ec828da198c5d9adbaa94c05e3a1c7f21bd012a0b29ba8ddbccb2c93b0d" + +RULES_PROTO_COMMIT_ID = "9f8407ec90b579cba157ce481682b2beb1f7409f" + +RULES_PROTO_SHA256 = "3a27bf90d4cd3e4546afa801857d35c3c4db5f0680c840167f6fb2f7078de177" + +RULES_CC_COMMIT_ID = "b7fe9697c0c76ab2fd431a891dbb9a6a32ed7c3e" + +RULES_CC_SHA256 = "29daf0159f0cf552fcff60b49d8bcd4f08f08506d2da6e41b07058ec50cfeaec" + +# +# Starlark libraries +# + +http_archive( + name = "bazel_skylib", + sha256 = BAZEL_SKYLIB_SHA256, + urls = [ + "https://github.com/bazelbuild/bazel-skylib/releases/download/{version}/bazel-skylib-{version}.tar.gz".format(version = BAZEL_SKYLIB_VERSION), + "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/{version}/bazel-skylib-{version}.tar.gz".format(version = BAZEL_SKYLIB_VERSION), + ], +) + +http_archive( + name = "rules_proto", + sha256 = RULES_PROTO_SHA256, + strip_prefix = "rules_proto-{version}".format(version = RULES_PROTO_COMMIT_ID), + urls = ["https://github.com/bazelbuild/rules_proto/archive/{version}.tar.gz".format(version = RULES_PROTO_COMMIT_ID)], +) + +http_archive( + name = "rules_cc", + sha256 = RULES_CC_SHA256, + strip_prefix = "rules_cc-{commit_id}".format(commit_id = RULES_CC_COMMIT_ID), + urls = [ + "https://github.com/bazelbuild/rules_cc/archive/{commit_id}.tar.gz".format(commit_id = RULES_CC_COMMIT_ID), + ], +) + +# +# C++ Dependencies +# +# Ordered lexicographical. +# + +local_repository( + name = "com_github_brpc_brpc", + path = "../../", +) + +http_archive( + name = "com_github_gflags_gflags", + sha256 = "a8263376b409900dd46830e4e34803a170484707327854cc252fc5865275a57d", + strip_prefix = "gflags-46f73f88b18aee341538c0dfc22b1710a6abedef", + url = "https://github.com/gflags/gflags/archive/46f73f88b18aee341538c0dfc22b1710a6abedef.tar.gz", +) + +http_archive( + name = "com_github_google_glog", + build_file = "//:glog.BUILD", + strip_prefix = "glog-a6a166db069520dbbd653c97c2e5b12e08a8bb26", + url = "https://github.com/google/glog/archive/a6a166db069520dbbd653c97c2e5b12e08a8bb26.tar.gz", +) + +http_archive( + name = "com_github_google_leveldb", + build_file = "//:leveldb.BUILD", + sha256 = "3912ac36dbb264a62797d68687711c8024919640d89b6733f9342ada1d16cda1", + strip_prefix = "leveldb-a53934a3ae1244679f812d998a4f16f2c7f309a6", + url = "https://github.com/google/leveldb/archive/a53934a3ae1244679f812d998a4f16f2c7f309a6.tar.gz", +) + +http_archive( + name = "com_github_madler_zlib", # 2017-01-15T17:57:23Z + build_file = "@com_github_brpc_brpc//bazel/third_party/zlib:zlib.BUILD", + sha256 = "c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1", + strip_prefix = "zlib-1.2.11", + urls = ["https://zlib.net/zlib-1.2.11.tar.gz"], +) + +http_archive( + name = "com_google_googletest", + strip_prefix = "googletest-0fe96607d85cf3a25ac40da369db62bbee2939a5", + url = "https://github.com/google/googletest/archive/0fe96607d85cf3a25ac40da369db62bbee2939a5.tar.gz", +) + +http_archive( + name = "com_google_protobuf", + sha256 = "9510dd2afc29e7245e9e884336f848c8a6600a14ae726adb6befdb4f786f0be2", + strip_prefix = "protobuf-3.6.1.3", + type = "zip", + url = "https://github.com/protocolbuffers/protobuf/archive/v3.6.1.3.zip", +) + +# This is not a correct approach, just for simplicity. +# rules_foreign_cc didn't support too early version of bazel. +# bRPC need to be patched to work with boringssl for now. + +new_local_repository( + name = "openssl", + build_file = "//:openssl.BUILD", + path = "/usr", +) diff --git a/leveldb.BUILD b/example/build_with_old_bazel/leveldb.BUILD similarity index 100% rename from leveldb.BUILD rename to example/build_with_old_bazel/leveldb.BUILD diff --git a/openssl.BUILD b/example/build_with_old_bazel/openssl.BUILD similarity index 51% rename from openssl.BUILD rename to example/build_with_old_bazel/openssl.BUILD index e2d02eb0b6..92a687a0e4 100644 --- a/openssl.BUILD +++ b/example/build_with_old_bazel/openssl.BUILD @@ -1,3 +1,18 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + package( default_visibility=["//visibility:public"] ) diff --git a/example/build_with_old_bazel/zlib.BUILD b/example/build_with_old_bazel/zlib.BUILD new file mode 100644 index 0000000000..0830cc0f93 --- /dev/null +++ b/example/build_with_old_bazel/zlib.BUILD @@ -0,0 +1,23 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +package( + default_visibility=["//visibility:public"] +) + +cc_library( + name = "zlib", + linkopts = ["-lz"], +) diff --git a/glog.BUILD b/glog.BUILD deleted file mode 100644 index c8f96dc877..0000000000 --- a/glog.BUILD +++ /dev/null @@ -1,171 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -licenses(["notice"]) - -cc_library( - name = "glog", - srcs = [ - "src/base/commandlineflags.h", - "src/base/googleinit.h", - "src/demangle.cc", - "src/logging.cc", - "src/raw_logging.cc", - "src/symbolize.cc", - "src/utilities.cc", - "src/vlog_is_on.cc", - ], - hdrs = [ - "raw_logging_h", - "src/base/mutex.h", - "src/demangle.h", - "src/symbolize.h", - "src/utilities.h", - "src/glog/log_severity.h", - ":config_h", - ":logging_h", - ":stl_logging_h", - ":vlog_is_on_h", - ], - copts = [ - # Disable warnings that exists in glog - "-Wno-sign-compare", - "-Wno-unused-local-typedefs", - # Inject google namespace as "google" - "-D_START_GOOGLE_NAMESPACE_='namespace google {'", - "-D_END_GOOGLE_NAMESPACE_='}'", - "-DGOOGLE_NAMESPACE='google'", - # Allows src/base/mutex.h to include pthread.h. - "-DHAVE_PTHREAD", - # Allows src/logging.cc to determine the host name. - "-DHAVE_SYS_UTSNAME_H", - # System header files enabler for src/utilities.cc - # Enable system calls from syscall.h - "-DHAVE_SYS_SYSCALL_H", - # Enable system calls from sys/time.h - "-DHAVE_SYS_TIME_H", - "-DHAVE_STDINT_H", - "-DHAVE_STRING_H", - # For logging.cc - "-DHAVE_PREAD", - "-DHAVE_FCNTL", - "-DHAVE_SYS_TYPES_H", - # Allows syslog support - "-DHAVE_SYSLOG_H", - # GFlags - "-isystem $(GENDIR)/external/com_github_gflags_gflags/", - "-DHAVE_LIB_GFLAGS", - # Necessary for creating soft links of log files - "-DHAVE_UNISTD_H", - ], - includes = [ - ".", - "src", - ], - visibility = ["//visibility:public"], - deps = [ - "//external:gflags", - ], -) - -# Below are the generation rules that generates the necessary header -# files for glog. Originally they are generated by CMAKE -# configure_file() command, which replaces certain template -# placeholders in the .in files with provided values. - -# gen_sh is a bash script that provides the values for generated -# header files. Under the hood it is just a wrapper over sed. -genrule( - name = "gen_sh", - outs = [ - "gen.sh", - ], - cmd = """ -cat > $@ <<"EOF" -#! /bin/sh -sed -e 's/@ac_cv_have_unistd_h@/1/g' \ - -e 's/@ac_cv_have_stdint_h@/1/g' \ - -e 's/@ac_cv_have_systypes_h@/1/g' \ - -e 's/@ac_cv_have_libgflags_h@/1/g' \ - -e 's/@ac_cv_have_uint16_t@/1/g' \ - -e 's/@ac_cv_have___builtin_expect@/1/g' \ - -e 's/@ac_cv_have_.*@/0/g' \ - -e 's/@ac_google_start_namespace@/namespace google {/g' \ - -e 's/@ac_google_end_namespace@/}/g' \ - -e 's/@ac_google_namespace@/google/g' \ - -e 's/@ac_cv___attribute___noinline@/__attribute__((noinline))/g' \ - -e 's/@ac_cv___attribute___noreturn@/__attribute__((noreturn))/g' \ - -e 's/@ac_cv___attribute___printf_4_5@/__attribute__((__format__ (__printf__, 4, 5)))/g' -EOF""", -) - -genrule( - name = "config_h", - srcs = [ - "src/config.h.cmake.in", - ], - outs = [ - "config.h", - ], - cmd = "awk '{ gsub(/^#cmakedefine/, \"//cmakedefine\"); print; }' $(<) > $(@)", -) - -genrule( - name = "logging_h", - srcs = [ - "src/glog/logging.h.in", - ], - outs = [ - "glog/logging.h", - ], - cmd = "$(location :gen_sh) < $(<) > $(@)", - tools = [":gen_sh"], -) - -genrule( - name = "raw_logging_h", - srcs = [ - "src/glog/raw_logging.h.in", - ], - outs = [ - "glog/raw_logging.h", - ], - cmd = "$(location :gen_sh) < $(<) > $(@)", - tools = [":gen_sh"], -) - -genrule( - name = "stl_logging_h", - srcs = [ - "src/glog/stl_logging.h.in", - ], - outs = [ - "glog/stl_logging.h", - ], - cmd = "$(location :gen_sh) < $(<) > $(@)", - tools = [":gen_sh"], -) - -genrule( - name = "vlog_is_on_h", - srcs = [ - "src/glog/vlog_is_on.h.in", - ], - outs = [ - "glog/vlog_is_on.h", - ], - cmd = "$(location :gen_sh) < $(<) > $(@)", - tools = [":gen_sh"], -) diff --git a/test/BUILD.bazel b/test/BUILD.bazel index a170eaf8cb..a2eea9cf08 100644 --- a/test/BUILD.bazel +++ b/test/BUILD.bazel @@ -13,13 +13,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -load("//:bazel/brpc.bzl", "brpc_proto_library") - -config_setting( - name = "darwin", - values = {"cpu": "darwin"}, - visibility = ["//visibility:public"], -) +load("@rules_proto//proto:defs.bzl", "proto_library") +load("@rules_cc//cc:defs.bzl", "cc_library", "cc_proto_library", "cc_test") +load("@com_grail_bazel_compdb//:defs.bzl", "compilation_database") +load("@com_grail_bazel_output_base_util//:defs.bzl", "OUTPUT_BASE") COPTS = [ "-D__STDC_FORMAT_MACROS", @@ -41,24 +38,10 @@ COPTS = [ "-DBVAR_NOT_LINK_DEFAULT_VARIABLES", "-DUNIT_TEST", ] + select({ - "//:with_glog": ["-DBRPC_WITH_GLOG=1"], + "//bazel/config:brpc_with_glog": ["-DBRPC_WITH_GLOG=1"], "//conditions:default": ["-DBRPC_WITH_GLOG=0"], }) -LINKOPTS = [ - "-lpthread", - "-lssl", - "-lcrypto", - "-ldl", - "-lz", -] + select({ - ":darwin": [], - "//conditions:default": [ - "-lrt", - - ], -}) - TEST_BUTIL_SOURCES = [ "at_exit_unittest.cc", "atomicops_unittest.cc", @@ -157,38 +140,39 @@ TEST_BUTIL_SOURCES = [ "bounded_queue_unittest.cc", "butil_unittest_main.cpp", ] + select({ - "@bazel_tools//tools/osx:darwin": [], - "//conditions:default": [ - "test_file_util_linux.cc", - "proc_maps_linux_unittest.cc", - ], + "@bazel_tools//tools/osx:darwin": [], + "//conditions:default": [ + "test_file_util_linux.cc", + "proc_maps_linux_unittest.cc", + ], }) proto_library( name = "test_proto", - srcs = glob([ - "*.proto", - ], - exclude = [ - "echo.proto", - ] + srcs = glob( + [ + "*.proto", + ], + exclude = [ + "echo.proto", + ], ), visibility = ["//visibility:public"], ) cc_proto_library( name = "cc_test_proto", + visibility = ["//visibility:public"], deps = [ ":test_proto", ], - visibility = ["//visibility:public"], ) cc_library( name = "sstream_workaround", hdrs = [ "sstream_workaround.h", - ] + ], ) cc_test( @@ -198,53 +182,74 @@ cc_test( "multiprocess_func_list.h", "test_switches.h", ], + copts = COPTS, deps = [ - ":sstream_workaround", ":cc_test_proto", + ":sstream_workaround", "//:brpc", "@com_google_googletest//:gtest", ], - copts = COPTS, ) cc_test( name = "bvar_test", - srcs = glob([ - "bvar_*_unittest.cpp", - ], - exclude = [ - "bvar_lock_timer_unittest.cpp", - "bvar_recorder_unittest.cpp", - ]), + srcs = glob( + [ + "bvar_*_unittest.cpp", + ], + exclude = [ + "bvar_lock_timer_unittest.cpp", + "bvar_recorder_unittest.cpp", + ], + ), + copts = COPTS, deps = [ ":sstream_workaround", "//:bvar", "@com_google_googletest//:gtest", ], - copts = COPTS, ) cc_test( name = "bthread_test", - srcs = glob([ - "bthread_*_unittest.cpp", - ], - exclude = [ - "bthread_cond_unittest.cpp", - "bthread_execution_queue_unittest.cpp", - "bthread_dispatcher_unittest.cpp", - "bthread_fd_unittest.cpp", - "bthread_mutex_unittest.cpp", - "bthread_setconcurrency_unittest.cpp", - # glog CHECK die with a fatal error - "bthread_key_unittest.cpp" - ]), + srcs = glob( + [ + "bthread_*_unittest.cpp", + ], + exclude = [ + "bthread_cond_unittest.cpp", + "bthread_execution_queue_unittest.cpp", + "bthread_dispatcher_unittest.cpp", + "bthread_fd_unittest.cpp", + "bthread_mutex_unittest.cpp", + "bthread_setconcurrency_unittest.cpp", + # glog CHECK die with a fatal error + "bthread_key_unittest.cpp", + ], + ), + copts = COPTS, deps = [ ":sstream_workaround", "//:brpc", "@com_google_googletest//:gtest", "@com_google_googletest//:gtest_main", ], - copts = COPTS, ) +compilation_database( + name = "brpc_test_compdb", + # Use test profile + testonly = True, + # OUTPUT_BASE is a dynamic value that will vary for each user workspace. + # If you would like your build outputs to be the same across users, then + # skip supplying this value, and substitute the default constant value + # "__OUTPUT_BASE__" through an external tool like `sed` or `jq` (see + # below shell commands for usage). + output_base = OUTPUT_BASE, + targets = [ + "//:brpc", + ":bvar_test", + ":bthread_test", + ":butil_test", + ], +) diff --git a/tools/BUILD b/tools/BUILD index 04b3abbf92..a836cb0449 100644 --- a/tools/BUILD +++ b/tools/BUILD @@ -27,7 +27,7 @@ COPTS = [ "-fno-omit-frame-pointer", "-DGFLAGS_NS=google", ] + select({ - "//:with_glog": ["-DBRPC_WITH_GLOG=1"], + "//bazel/config:brpc_with_glog": ["-DBRPC_WITH_GLOG=1"], "//conditions:default": ["-DBRPC_WITH_GLOG=0"], }) diff --git a/zlib.BUILD b/zlib.BUILD deleted file mode 100644 index 8b7895278a..0000000000 --- a/zlib.BUILD +++ /dev/null @@ -1,8 +0,0 @@ -package( - default_visibility=["//visibility:public"] -) - -cc_library( - name = "zlib", - linkopts = ["-lz"], -)