Skip to content

Commit

Permalink
Add Bazel config for zlib support (#5389)
Browse files Browse the repository at this point in the history
* Add Bazel config for optional zlib support

* Add hard dependency on zlib

* Remove unused config_setting
  • Loading branch information
schroederc authored and acozzette committed Dec 11, 2018
1 parent 8bd1542 commit 802d543
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 3 deletions.
16 changes: 14 additions & 2 deletions BUILD
Expand Up @@ -15,6 +15,12 @@ config_setting(
},
)

################################################################################
# ZLIB configuration
################################################################################

ZLIB_DEPS = ["//external:zlib"]

################################################################################
# Protobuf Runtime Library
################################################################################
Expand Down Expand Up @@ -42,6 +48,7 @@ COPTS = select({
":msvc" : MSVC_COPTS,
"//conditions:default": [
"-DHAVE_PTHREAD",
"-DHAVE_ZLIB",
"-Wall",
"-Woverloaded-virtual",
"-Wno-sign-compare",
Expand Down Expand Up @@ -117,6 +124,11 @@ cc_library(
visibility = ["//visibility:public"],
)

PROTOBUF_DEPS = select({
":msvc": [],
"//conditions:default": ZLIB_DEPS,
})

cc_library(
name = "protobuf",
srcs = [
Expand Down Expand Up @@ -182,7 +194,7 @@ cc_library(
includes = ["src/"],
linkopts = LINK_OPTS,
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
Expand Down Expand Up @@ -590,7 +602,7 @@ cc_test(
":protobuf",
":protoc_lib",
"//external:gtest_main",
],
] + PROTOBUF_DEPS,
)

################################################################################
Expand Down
16 changes: 15 additions & 1 deletion WORKSPACE
@@ -1,10 +1,11 @@
workspace(name = "com_google_protobuf")

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

new_local_repository(
name = "submodule_gmock",
build_file = "@//:third_party/googletest/BUILD.bazel",
path = "third_party/googletest",
build_file = "@//:third_party/googletest/BUILD.bazel"
)

http_archive(
Expand All @@ -21,6 +22,14 @@ http_archive(
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(
name = "python_headers",
actual = "//util/python:python_headers",
Expand Down Expand Up @@ -60,3 +69,8 @@ bind(
name = "gson",
actual = "@gson_maven//jar",
)

bind(
name = "zlib",
actual = "@net_zlib//:zlib",
)
60 changes: 60 additions & 0 deletions third_party/zlib.BUILD
@@ -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/"],
)

0 comments on commit 802d543

Please sign in to comment.