| load("@bazel_skylib//rules:copy_file.bzl", "copy_file") |
| 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", |
| ] |
| |
| # In order to limit the damage from the `includes` propagation |
| # via `:zlib`, copy the public headers to a subdirectory and |
| # expose those. |
| _ZLIB_HEADER_PREFIX = "zlib/include" |
| |
| _ZLIB_PREFIXED_HEADERS = ["{}/{}".format(_ZLIB_HEADER_PREFIX, hdr) for hdr in _ZLIB_HEADERS] |
| |
| [ |
| copy_file( |
| name = "{}.copy".format(hdr), |
| src = hdr, |
| out = "{}/{}".format(_ZLIB_HEADER_PREFIX, hdr), |
| ) |
| for hdr in _ZLIB_HEADERS |
| ] |
| |
| _COMMON_COPTS = [ |
| "-Wno-deprecated-non-prototype", |
| "-Wno-unused-variable", |
| "-Wno-implicit-function-declaration", |
| ] |
| |
| 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 = select({ |
| "@platforms//os:linux": [ |
| # Required for opt builds to avoid |
| # `libzlib.a(crc32.o): requires unsupported dynamic reloc 11; recompile with -fPIC` |
| "-fPIC", |
| # Silence all warnings |
| "-w", |
| ] + _COMMON_COPTS, |
| "@platforms//os:windows": [], |
| "//conditions:default": _COMMON_COPTS, |
| }), |
| includes = ["zlib/include/"], |
| visibility = ["//visibility:public"], |
| ) |