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"], )