forked from OSchip/llvm-project
113 lines
3.9 KiB
Python
113 lines
3.9 KiB
Python
# 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
|
|
|
|
"""Repository rules to configure the zlib used by LLVM.
|
|
|
|
Most users should pick one of the explicit rules to configure their use of zlib
|
|
with LLVM:
|
|
- `llvm_zlib_external` will link against an external Bazel zlib repository.
|
|
- `llvm_zlib_system` will link against the system zlib (non-hermetically).
|
|
- 'llvm_zlib_disable` will disable zlib completely.
|
|
|
|
If you would like to make your build configurable, you can use
|
|
`llvm_zlib_from_env`. By default, this will disable zlib, but will inspect
|
|
the environment variable (most easily set with a `--repo_env` flag to the
|
|
Bazel invocation) `BAZEL_LLVM_ZLIB_STRATEGY`. If it is set to `external`,
|
|
then it will behave the same as `llvm_zlib_external`. If it is set to
|
|
`system` then it will behave the same as `llvm_zlib_system`. Any other
|
|
setting will disable zlib the same as not setting it at all.
|
|
"""
|
|
|
|
def _llvm_zlib_external_impl(repository_ctx):
|
|
repository_ctx.template(
|
|
"BUILD",
|
|
repository_ctx.attr._external_build_template,
|
|
substitutions = {
|
|
"@external_zlib_repo//:zlib_rule": repository_ctx.attr.external_zlib,
|
|
},
|
|
executable = False,
|
|
)
|
|
|
|
llvm_zlib_external = repository_rule(
|
|
implementation = _llvm_zlib_external_impl,
|
|
attrs = {
|
|
"_external_build_template": attr.label(
|
|
default = Label("//utils/bazel/deps_impl:zlib_external.BUILD"),
|
|
allow_single_file = True,
|
|
),
|
|
"external_zlib": attr.string(
|
|
doc = "The dependency that should be used for the external zlib library.",
|
|
mandatory = True,
|
|
),
|
|
},
|
|
)
|
|
|
|
def _llvm_zlib_system_impl(repository_ctx):
|
|
repository_ctx.template(
|
|
"BUILD",
|
|
repository_ctx.attr._system_build_template,
|
|
executable = False,
|
|
)
|
|
|
|
# While it may seem like this needs to be local, it doesn't actually inspect
|
|
# any local state, it just configures to build against that local state.
|
|
llvm_zlib_system = repository_rule(
|
|
implementation = _llvm_zlib_system_impl,
|
|
attrs = {
|
|
"_system_build_template": attr.label(
|
|
default = Label("//utils/bazel/deps_impl:zlib_system.BUILD"),
|
|
allow_single_file = True,
|
|
),
|
|
},
|
|
)
|
|
|
|
def _llvm_zlib_disable_impl(repository_ctx):
|
|
repository_ctx.template(
|
|
"BUILD",
|
|
repository_ctx.attr._disable_build_template,
|
|
executable = False,
|
|
)
|
|
|
|
llvm_zlib_disable = repository_rule(
|
|
implementation = _llvm_zlib_disable_impl,
|
|
attrs = {
|
|
"_disable_build_template": attr.label(
|
|
default = Label("//utils/bazel/deps_impl:zlib_disable.BUILD"),
|
|
allow_single_file = True,
|
|
),
|
|
},
|
|
)
|
|
|
|
def _llvm_zlib_from_env_impl(repository_ctx):
|
|
zlib_strategy = repository_ctx.os.environ.get("BAZEL_LLVM_ZLIB_STRATEGY")
|
|
if zlib_strategy == "external":
|
|
_llvm_zlib_external_impl(repository_ctx)
|
|
elif zlib_strategy == "system":
|
|
_llvm_zlib_system_impl(repository_ctx)
|
|
else:
|
|
_llvm_zlib_disable_impl(repository_ctx)
|
|
|
|
llvm_zlib_from_env = repository_rule(
|
|
implementation = _llvm_zlib_from_env_impl,
|
|
attrs = {
|
|
"_disable_build_template": attr.label(
|
|
default = Label("//utils/bazel/deps_impl:zlib_disable.BUILD"),
|
|
allow_single_file = True,
|
|
),
|
|
"_external_build_template": attr.label(
|
|
default = Label("//utils/bazel/deps_impl:zlib_external.BUILD"),
|
|
allow_single_file = True,
|
|
),
|
|
"_system_build_template": attr.label(
|
|
default = Label("//utils/bazel/deps_impl:zlib_system.BUILD"),
|
|
allow_single_file = True,
|
|
),
|
|
"external_zlib": attr.label(
|
|
doc = "The dependency that should be used for the external zlib library.",
|
|
mandatory = True,
|
|
),
|
|
},
|
|
environ = ["BAZEL_LLVM_ZLIB_STRATEGY"],
|
|
)
|