rabbitmq-server/bazel/elixir/elixir.bzl

148 lines
4.3 KiB
Python

load(
":elixir_build.bzl",
"elixir_build",
"elixir_external",
)
load(
":elixir_toolchain.bzl",
"elixir_toolchain",
)
load(
"//bazel/repositories:elixir_config.bzl",
"INSTALLATION_TYPE_INTERNAL",
_elixir_config = "elixir_config",
)
def elixir_toolchain_external():
"""DEPRECATED"""
elixir_external(
name = "external_elixir_installation_ref",
target_compatible_with = [
Label("//bazel/platforms:elixir_external"),
],
)
elixir_toolchain(
name = "elixir_external",
elixir = ":external_elixir_installation_ref",
)
native.toolchain(
name = "elixir_toolchain_external",
exec_compatible_with = [
Label("@erlang_config//:erlang_external"),
],
target_compatible_with = [
Label("//bazel/platforms:elixir_external"),
],
toolchain = ":elixir_external",
toolchain_type = Label("//bazel/elixir:toolchain_type"),
visibility = ["//visibility:public"],
)
def elixir_toolchain_from_http_archive(
name_suffix = "",
url = None,
strip_prefix = None,
sha256 = None,
elixir_constraints = None):
"""DEPRECATED"""
elixir_build(
name = "elixir_build{}".format(name_suffix),
url = url,
strip_prefix = strip_prefix,
sha256 = sha256,
target_compatible_with = elixir_constraints,
)
elixir_toolchain(
name = "elixir{}".format(name_suffix),
elixir = ":elixir_build{}".format(name_suffix),
)
native.toolchain(
name = "elixir_toolchain{}".format(name_suffix),
exec_compatible_with = [
Label("@erlang_config//:erlang_internal"),
],
target_compatible_with = elixir_constraints,
toolchain = ":elixir{}".format(name_suffix),
toolchain_type = Label("//bazel/elixir:toolchain_type"),
visibility = ["//visibility:public"],
)
def elixir_toolchain_from_github_release(
name_suffix = "_default",
version = None,
sha256 = None):
"""DEPRECATED"""
[major, minor, patch] = version.split(".")
elixir_constraints = [
Label("//bazel/platforms:elixir_{}_{}".format(major, minor)),
]
url = "https://github.com/elixir-lang/elixir/archive/refs/tags/v{}.tar.gz".format(version)
elixir_toolchain_from_http_archive(
name_suffix = name_suffix,
url = url,
strip_prefix = "elixir-{}".format(version),
sha256 = sha256,
elixir_constraints = elixir_constraints,
)
DEFAULT_ELIXIR_VERSION = "1.13.4"
DEFAULT_ELIXIR_SHA256 = "95daf2dd3052e6ca7d4d849457eaaba09de52d65ca38d6933c65bc1cdf6b8579"
# Generates the @elixir_config repository, which contains erlang
# toolchains and platform defintions
def elixir_config(
rabbitmq_server_workspace = "@rabbitmq-server",
internal_elixir_configs = []):
types = {c.name: INSTALLATION_TYPE_INTERNAL for c in internal_elixir_configs}
versions = {c.name: c.version for c in internal_elixir_configs}
urls = {c.name: c.url for c in internal_elixir_configs}
strip_prefixs = {c.name: c.strip_prefix for c in internal_elixir_configs if c.strip_prefix}
sha256s = {c.name: c.sha256 for c in internal_elixir_configs if c.sha256}
_elixir_config(
name = "elixir_config",
rabbitmq_server_workspace = rabbitmq_server_workspace,
types = types,
versions = versions,
urls = urls,
strip_prefixs = strip_prefixs,
sha256s = sha256s,
)
def internal_elixir_from_http_archive(
name = None,
version = None,
url = None,
strip_prefix = None,
sha256 = None):
return struct(
name = name,
version = version,
url = url,
strip_prefix = strip_prefix,
sha256 = sha256,
)
def internal_elixir_from_github_release(
name = "internal",
version = DEFAULT_ELIXIR_VERSION,
sha256 = DEFAULT_ELIXIR_SHA256):
url = "https://github.com/elixir-lang/elixir/archive/refs/tags/v{}.tar.gz".format(
version,
)
return internal_elixir_from_http_archive(
name = name,
version = version,
url = url,
strip_prefix = "elixir-{}".format(version),
sha256 = sha256,
)