Add Bazel config for zlib support (#5389)

* Add Bazel config for optional zlib support

* Add hard dependency on zlib

* Remove unused config_setting
This commit is contained in:
Cody Schroeder 2018-12-11 11:58:26 -08:00
parent 81f6aa404c
commit 21c3801369
3 changed files with 89 additions and 3 deletions

16
BUILD
View File

@ -15,6 +15,12 @@ config_setting(
}, },
) )
################################################################################
# ZLIB configuration
################################################################################
ZLIB_DEPS = ["//external:zlib"]
################################################################################ ################################################################################
# Protobuf Runtime Library # Protobuf Runtime Library
################################################################################ ################################################################################
@ -42,6 +48,7 @@ COPTS = select({
":msvc" : MSVC_COPTS, ":msvc" : MSVC_COPTS,
"//conditions:default": [ "//conditions:default": [
"-DHAVE_PTHREAD", "-DHAVE_PTHREAD",
"-DHAVE_ZLIB",
"-Wall", "-Wall",
"-Woverloaded-virtual", "-Woverloaded-virtual",
"-Wno-sign-compare", "-Wno-sign-compare",
@ -117,6 +124,11 @@ cc_library(
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
) )
PROTOBUF_DEPS = select({
":msvc": [],
"//conditions:default": ZLIB_DEPS,
})
cc_library( cc_library(
name = "protobuf", name = "protobuf",
srcs = [ srcs = [
@ -182,7 +194,7 @@ cc_library(
includes = ["src/"], includes = ["src/"],
linkopts = LINK_OPTS, linkopts = LINK_OPTS,
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = [":protobuf_lite"], deps = [":protobuf_lite"] + PROTOBUF_DEPS,
) )
# This provides just the header files for use in projects that need to build # This provides just the header files for use in projects that need to build
@ -590,7 +602,7 @@ cc_test(
":protobuf", ":protobuf",
":protoc_lib", ":protoc_lib",
"//external:gtest_main", "//external:gtest_main",
], ] + PROTOBUF_DEPS,
) )
################################################################################ ################################################################################

View File

@ -1,10 +1,11 @@
workspace(name = "com_google_protobuf") workspace(name = "com_google_protobuf")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
new_local_repository( new_local_repository(
name = "submodule_gmock", name = "submodule_gmock",
build_file = "@//:third_party/googletest/BUILD.bazel",
path = "third_party/googletest", path = "third_party/googletest",
build_file = "@//:third_party/googletest/BUILD.bazel"
) )
http_archive( http_archive(
@ -21,6 +22,14 @@ http_archive(
urls = ["https://github.com/bazelbuild/bazel-skylib/archive/2169ae1c374aab4a09aa90e65efe1a3aad4e279b.tar.gz"], urls = ["https://github.com/bazelbuild/bazel-skylib/archive/2169ae1c374aab4a09aa90e65efe1a3aad4e279b.tar.gz"],
) )
http_archive(
name = "net_zlib",
build_file = "//:third_party/zlib.BUILD",
sha256 = "c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1",
strip_prefix = "zlib-1.2.11",
urls = ["https://zlib.net/zlib-1.2.11.tar.gz"],
)
bind( bind(
name = "python_headers", name = "python_headers",
actual = "//util/python:python_headers", actual = "//util/python:python_headers",
@ -60,3 +69,8 @@ bind(
name = "gson", name = "gson",
actual = "@gson_maven//jar", actual = "@gson_maven//jar",
) )
bind(
name = "zlib",
actual = "@net_zlib//:zlib",
)

60
third_party/zlib.BUILD vendored Normal file
View File

@ -0,0 +1,60 @@
package(default_visibility = ["//visibility:public"])
licenses(["notice"]) # BSD/MIT-like license (for zlib)
_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",
# Include the un-prefixed headers in srcs to work
# around the fact that zlib isn't consistent in its
# choice of <> or "" delimiter when including itself.
] + _ZLIB_HEADERS,
hdrs = _ZLIB_PREFIXED_HEADERS,
copts = [
"-Wno-unused-variable",
"-Wno-implicit-function-declaration",
],
includes = ["zlib/include/"],
)