llvm/utils/bazel/third_party_build/zlib-ng.BUILD

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