# This file is licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
load("@bazel_skylib//rules:common_settings.bzl", "bool_flag")
load("@bazel_skylib//rules:expand_template.bzl", "expand_template")
package(
default_visibility = ["//visibility:public"],
# BSD/MIT-like license (for zlib)
licenses = ["notice"],
)
bool_flag(
name = "llvm_enable_zlib",
build_setting_default = True,
)
config_setting(
name = "llvm_zlib_enabled",
flag_values = {":llvm_enable_zlib": "true"},
)
genrule(
# The input template is identical to the CMake output.
name = "zconf_gen",
srcs = ["zconf.h.in"],
outs = ["zconf.h"],
cmd = "cp $(SRCS) $(OUTS)",
)
cc_library(
name = "zlib",
srcs = select({
":llvm_zlib_enabled": [
"adler32.c",
"adler32_p.h",
"chunkset.c",
"chunkset_tpl.h",
"compare258.c",
"compress.c",
"crc32.c",
"crc32_comb.c",
"crc32_comb_tbl.h",
"crc32_p.h",
"crc32_tbl.h",
"deflate.c",
"deflate.h",
"deflate_fast.c",
"deflate_medium.c",
"deflate_p.h",
"deflate_quick.c",
"deflate_slow.c",
"fallback_builtins.h",
"functable.c",
"functable.h",
"infback.c",
"inffast.c",
"inffast.h",
"inffixed_tbl.h",
"inflate.c",
"inflate.h",
"inflate_p.h",
"inftrees.c",
"inftrees.h",
"insert_string.c",
"insert_string_tpl.h",
"match_tpl.h",
"trees.c",
"trees.h",
"trees_emit.h",
"trees_tbl.h",
"uncompr.c",
"zbuild.h",
"zendian.h",
"zutil.c",
"zutil.h",
"zutil_p.h",
],
"//conditions:default": [],
}),
hdrs = select({
":llvm_zlib_enabled": [
"zlib.h",
":zconf_gen",
],
"//conditions:default": [],
}),
copts = [
"-std=c11",
"-DZLIB_COMPAT",
"-DWITH_GZFILEOP",
"-DWITH_OPTIM",
"-DWITH_NEW_STRATEGIES",
# For local builds you might want to add "-DWITH_NATIVE_INSTRUCTIONS"
# here to improve performance. Native instructions aren't enabled in
# the default config for reproducibility.
],
defines = select({
":llvm_zlib_enabled": [
"LLVM_ENABLE_ZLIB=1",
],
"//conditions:default": [],
}),
# Clang includes zlib with angled instead of quoted includes, so we need
# strip_include_prefix here.
strip_include_prefix = ".",
visibility = ["//visibility:public"],
)