jemalloc/settings/platform/BUILD.bazel
Connor McEntee 7f192e9919 feat: Introduce stable Bazel build
The initial migration to a Bazel based build. All attempts have been made
to maintain configuration parity with the upstream build.
2025-03-03 19:43:24 -07:00

214 lines
5.3 KiB
Text

load("@bazel_skylib//lib:selects.bzl", "selects")
load("@bazel_skylib//rules:common_settings.bzl", "int_flag", "string_flag")
### Bazel-ification of platform feature detection performed by ./configure ###
# If "yes", the glibc hooks __libc_calloc, __libc_free, __libc_malloc, etc are available for override
string_flag(
name = "glibc_overrides_support",
build_setting_default = "__auto__",
values = [
"yes",
"no",
"__auto__",
],
visibility = ["//visibility:public"],
)
config_setting(
name = "has_glibc_overrides",
flag_values = {":glibc_overrides_support": "yes"},
visibility = ["//visibility:public"],
)
config_setting(
name = "no_glibc_overrides",
flag_values = {":glibc_overrides_support": "no"},
visibility = ["//visibility:public"],
)
# Whether the target libc has `malloc_size` available for linking
string_flag(
name = "malloc_size_support",
build_setting_default = "__auto__",
values = [
"yes",
"no",
"__auto__",
],
visibility = ["//visibility:public"],
)
config_setting(
name = "has_malloc_size",
flag_values = {":malloc_size_support": "yes"},
visibility = ["//visibility:public"],
)
config_setting(
name = "no_malloc_size",
flag_values = {":malloc_size_support": "no"},
visibility = ["//visibility:public"],
)
# JEMALLOC_USABLE_SIZE_CONST: Whether malloc_usable_size can accepts const, glibc on linux apparently omits it
string_flag(
name = "usable_size_const",
build_setting_default = "__auto__",
make_variable = "JEMALLOC_USABLE_SIZE_CONST",
values = [
"",
"const",
"__auto__",
],
visibility = ["//visibility:public"],
)
string_flag(
name = "memalign_support",
build_setting_default = "__auto__",
values = [
"yes",
"no",
"__auto__",
],
visibility = ["//visibility:public"],
)
config_setting(
name = "has_memalign",
flag_values = {":memalign_support": "yes"},
visibility = ["//visibility:public"],
)
config_setting(
name = "no_memalign",
flag_values = {":memalign_support": "no"},
visibility = ["//visibility:public"],
)
# LG_HUGEPAGE Base 2 log of system huge page size, can be explicitly set --with-lg-hugepage
# The correct setting depends on the kernel. configure defaults to 21 (2 MiB) when detection fails and
# there is runtime detection to gracefully handle a misconfigure value
int_flag(
name = "lg_hugepage",
build_setting_default = 21,
make_variable = "LG_HUGEPAGE",
visibility = ["//visibility:public"],
)
# LG_PAGE Base 2 log of system page size, can be explicitly set --with-lg-page
string_flag(
name = "lg_page",
build_setting_default = "__auto__",
make_variable = "LG_PAGE",
visibility = ["//visibility:public"],
)
# LLG_VADDR Number of significant virtual address bits, can be explicitly set --with-lg-vaddr
# The configure cross compilation fallback is the default. This should be safe for any 64-bit target even if the OS
# doesn't allow it because of runtime checks. However, 32-bit architectures should explicitly declare this
# need to declare
int_flag(
name = "lg_vaddr",
build_setting_default = 57,
make_variable = "LG_VADDR",
visibility = ["//visibility:public"],
)
string_flag(
name = "valloc_support",
build_setting_default = "__auto__",
values = [
"yes",
"no",
"__auto__",
],
visibility = ["//visibility:public"],
)
config_setting(
name = "has_valloc",
flag_values = {":valloc_support": "yes"},
visibility = ["//visibility:public"],
)
config_setting(
name = "no_valloc",
flag_values = {":valloc_support": "no"},
visibility = ["//visibility:public"],
)
### Convenience settings groups ###
# ARM
selects.config_setting_group(
name = "aarch",
match_any = [
"@platforms//cpu:aarch32",
"@platforms//cpu:aarch64",
],
visibility = ["//:__subpackages__"],
)
# X86
selects.config_setting_group(
name = "x86",
match_any = [
"@platforms//cpu:x86_32",
"@platforms//cpu:x86_64",
],
visibility = ["//:__subpackages__"],
)
# BSD systems
selects.config_setting_group(
name = "bsd",
match_any = [
"@platforms//os:freebsd",
"@platforms//os:ios",
"@platforms//os:macos",
"@platforms//os:openbsd",
"@platforms//os:tvos",
"@platforms//os:watchos",
],
visibility = ["//:__subpackages__"],
)
# Darwin systems
selects.config_setting_group(
name = "darwin",
match_any = [
"@platforms//os:ios",
"@platforms//os:macos",
"@platforms//os:tvos",
"@platforms//os:watchos",
],
visibility = ["//:__subpackages__"],
)
# GNU systems
selects.config_setting_group(
name = "gnu",
match_any = [
"@platforms//os:android",
"@platforms//os:linux",
],
visibility = ["//:__subpackages__"],
)
# POSIX systems
selects.config_setting_group(
name = "posix",
match_any = [
"@platforms//os:android",
"@platforms//os:freebsd",
"@platforms//os:ios",
"@platforms//os:linux",
"@platforms//os:macos",
"@platforms//os:openbsd",
"@platforms//os:tvos",
"@platforms//os:watchos",
],
visibility = ["//:__subpackages__"],
)