blob: 81852e23eca642606246fa2fadd8e934bfb02285 [file] [edit]
# Copyright 2020 Google LLC
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
#
# Description:
# XNNPACK - optimized floating-point neural network operators library
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
load("@bazel_skylib//lib:selects.bzl", "selects") # buildifier: disable=out-of-order-load
load("@rules_python//python:py_binary.bzl", "py_binary")
load(
":build_defs.bzl",
"xnnpack_cc_library",
"xnnpack_cxx_library",
"xnnpack_if_kleidiai_enabled",
"xnnpack_min_size_copts",
"xnnpack_select_if",
"xnnpack_slinky_deps",
"xnnpack_source_list_file",
"xnnpack_transitive_source_list",
"xnnpack_visibility",
)
load(
":build_params.bzl",
"xnnpack_archs",
"xnnpack_cc_library_for_arch",
"xnnpack_cond_for_arch",
"xnnpack_list_sum",
"xnnpack_simd_f16_archs",
"xnnpack_simd_f32_archs",
"xnnpack_simd_s16_archs",
"xnnpack_simd_s32_archs",
"xnnpack_simd_s8_archs",
"xnnpack_simd_u8_archs",
)
load(
"//gen:microkernels.bzl",
"all_srcs_for_arch",
"non_prod_asm_srcs_for_arch",
"non_prod_c_srcs_for_arch",
"prod_asm_srcs_for_arch",
"prod_c_srcs_for_arch",
)
load(
":build_srcs.bzl",
"LOGGING_SRCS",
"MICROKERNEL_DEFS",
"MICROKERNEL_HDRS",
"OPERATOR_SRCS",
"SUBGRAPH_SRCS",
"TABLE_SRCS",
)
package(default_visibility = ["//:__subpackages__"])
licenses(["notice"])
exports_files(["LICENSE"] + glob(["**/*.h"]))
exports_files(["preamble.js.lds"])
MICROKERNEL_DEPS = [
":assembly",
":common",
":intrinsics_polyfill",
":math",
":microkernel_hdrs",
":microparams_h",
":microparams_init",
":prefetch",
":sanitizers",
":simd_hdrs",
":tables",
":unaligned",
"//src/configs:hardware_config",
":logging",
]
SIMD_HEADERS = [
"src/xnnpack/simd/f32-avx-base.h",
"src/xnnpack/simd/f32-sse2-base.h",
"src/xnnpack/simd/f32-wasmsimd-base.h",
] + [
"src/xnnpack/simd/f32-" + arch + ".h"
for arch in xnnpack_simd_f32_archs()
] + [
"src/xnnpack/simd/f16-" + arch + ".h"
for arch in xnnpack_simd_f16_archs()
] + [
"src/xnnpack/simd/s16-" + arch + ".h"
for arch in xnnpack_simd_s16_archs()
] + [
"src/xnnpack/simd/s32-" + arch + ".h"
for arch in xnnpack_simd_s32_archs()
] + [
"src/xnnpack/simd/s8-" + arch + ".h"
for arch in xnnpack_simd_s8_archs()
] + [
"src/xnnpack/simd/u8-" + arch + ".h"
for arch in xnnpack_simd_u8_archs()
]
exports_files(SIMD_HEADERS)
ALL_MICROKERNEL_SRCS = xnnpack_list_sum(
[all_srcs_for_arch(arch) for arch in xnnpack_archs()],
[],
)
filegroup(
name = "microkernel_source_files",
data = ALL_MICROKERNEL_SRCS + ["src/microparams-init.c"],
visibility = xnnpack_visibility(),
)
filegroup(
name = "microkernel_header_files",
data = MICROKERNEL_HDRS + ["src/xnnpack/microparams.h"],
visibility = xnnpack_visibility(),
)
# Collection of internal microkernel related headers that declares all the microkernel functions.
xnnpack_cc_library(
name = "microkernel_hdrs",
hdrs = MICROKERNEL_HDRS,
deps = [
":common",
":math",
":microkernel_defs",
":microparams_h",
"//src/configs:config_hdrs",
],
)
xnnpack_cc_library(
name = "xnnpack_h",
hdrs = [
"include/experimental.h",
"include/xnnpack.h",
],
deps = [
":fingerprint_id",
"@pthreadpool",
],
)
xnnpack_cc_library(
name = "intrinsics_polyfill",
hdrs = ["src/xnnpack/intrinsics-polyfill.h"],
deps = [
":common",
":unaligned",
],
)
xnnpack_cc_library(
name = "microkernel_defs",
hdrs = MICROKERNEL_DEFS,
deps = [
":common",
":math",
],
)
xnnpack_cc_library(
name = "simd_hdrs",
hdrs = SIMD_HEADERS,
deps = [
":common",
":intrinsics_polyfill",
":math",
":unaligned",
],
)
xnnpack_cc_library(
name = "common",
hdrs = ["src/xnnpack/common.h"],
)
xnnpack_cc_library(
name = "init_once",
hdrs = ["src/xnnpack/init-once.h"],
deps = [
":common",
":xnnpack_h",
],
)
xnnpack_cc_library(
name = "microparams_h",
hdrs = [
"src/xnnpack/microparams.h",
],
deps = [
":common",
":math",
":xnnpack_h",
],
)
xnnpack_cc_library(
name = "microfnptr_h",
hdrs = [
"src/xnnpack/microfnptr.h",
],
deps = [
":common",
":math",
":microparams_h",
":xnnpack_h",
],
)
xnnpack_cc_library(
name = "params",
srcs = ["src/params.c"],
hdrs = [
"src/xnnpack/params.h",
],
deps = [
":common",
":xnnpack_h",
],
)
xnnpack_cc_library(
name = "fp16",
hdrs = ["src/xnnpack/fp16.h"],
)
xnnpack_cc_library(
name = "math",
hdrs = ["src/xnnpack/math.h"],
deps = [
":common",
":fp16",
],
)
xnnpack_cc_library(
name = "prefetch",
hdrs = ["src/xnnpack/prefetch.h"],
deps = [
":common",
],
)
xnnpack_cc_library(
name = "unaligned",
hdrs = ["src/xnnpack/unaligned.h"],
deps = [
":common",
],
)
xnnpack_cc_library(
name = "microparams_init",
srcs = ["src/microparams-init.c"],
hdrs = ["src/xnnpack/microparams-init.h"],
deps = [
":common",
":math",
":microparams_h",
":requantization",
":unaligned",
":xnnpack_h",
],
)
xnnpack_cc_library(
name = "node_type",
hdrs = [
"src/xnnpack/node-type.h",
"src/xnnpack/node-type-defs.inc",
],
deps = [
":common",
],
)
xnnpack_cc_library(
name = "allocation_type",
hdrs = [
"src/xnnpack/allocation-type.h",
"src/xnnpack/allocation-type-defs.inc",
],
deps = [
":common",
],
)
xnnpack_cc_library(
name = "operator_type",
hdrs = [
"src/xnnpack/operator-type.h",
"src/xnnpack/operator-type-defs.inc",
],
deps = [
":common",
],
)
xnnpack_cc_library(
name = "microkernel_type",
hdrs = [
"src/xnnpack/microkernel-type.h",
"src/xnnpack/microkernel-type-defs.inc",
],
deps = [
":common",
],
)
xnnpack_cc_library(
name = "internal",
hdrs = ["src/xnnpack/internal.h"],
deps = [
":math",
":subgraph_h",
":xnnpack_h",
"//src/configs:config_hdrs",
"@pthreadpool",
],
)
xnnpack_cc_library(
name = "allocator",
srcs = [
"src/allocator.c",
],
hdrs = ["src/xnnpack/allocator.h"],
deps = [
":common",
":params",
":xnnpack_h",
],
)
xnnpack_cc_library(
name = "aligned_allocator",
hdrs = [
"src/xnnpack/aligned-allocator.h",
],
)
# TODO: This should be test_only = True.
xnnpack_cxx_library(
name = "buffer",
hdrs = ["src/xnnpack/buffer.h"],
deps = [
":common",
":datatype",
":logging",
":math",
":reference_ukernels",
":xnnpack_h",
],
)
xnnpack_cc_library(
name = "isa_checks",
hdrs = [
"src/xnnpack/isa-checks.h",
],
deps = [
":common",
"//src/configs:hardware_config",
],
)
xnnpack_cc_library(
name = "memory",
srcs = [
"src/memory.c",
],
hdrs = ["src/xnnpack/memory.h"],
# Override using xnnpack_gcc_std_copts, as it defines -std=c99, which then makes MAP_ANONYMOUS
# undefined
gcc_copts = [],
deps = [
":common",
":init_once",
":logging",
":math",
":xnnpack_h",
],
)
xnnpack_cc_library(
name = "quantization",
hdrs = ["src/xnnpack/quantization.h"],
deps = [
":math",
":microparams_h",
],
)
xnnpack_cc_library(
name = "requantization",
hdrs = ["src/xnnpack/requantization.h"],
deps = [
":common",
":math",
":microparams_h",
],
)
xnnpack_cc_library(
name = "requantization_stubs",
hdrs = ["src/xnnpack/requantization-stubs.h"],
)
xnnpack_cc_library(
name = "tables",
srcs = TABLE_SRCS,
deps = [
":common",
],
)
xnnpack_cc_library(
name = "assembly",
textual_hdrs = ["src/xnnpack/assembly.h"],
)
# Generate the prod/all microkernel libraries for each architecture.
[
[
xnnpack_cc_library_for_arch(
name = arch + "_prod_microkernels",
srcs = prod_c_srcs_for_arch(arch) + xnnpack_select_if(
":assembly_enabled",
prod_asm_srcs_for_arch(arch),
),
arch = arch,
# Internal build flag.
tags = ["nobuilder"],
deps = MICROKERNEL_DEPS,
),
xnnpack_cc_library_for_arch(
name = arch + "_all_microkernels",
srcs = non_prod_c_srcs_for_arch(arch) + xnnpack_select_if(
":assembly_enabled",
non_prod_asm_srcs_for_arch(arch),
),
arch = arch,
tags = ["nobuilder"],
deps = MICROKERNEL_DEPS + [":" + arch + "_prod_microkernels"],
),
]
for arch in xnnpack_archs()
]
xnnpack_cc_library(
name = "log_level_default",
defines = select({
# No logging in optimized mode
":optimized_build": ["XNN_LOG_LEVEL=0"],
# Info logging in debug mode. Use `--define=xnn_log_level=debug` for full logging.
":debug_build": ["XNN_LOG_LEVEL=4"],
# Error-only logging in default (fastbuild) mode
"//conditions:default": ["XNN_LOG_LEVEL=2"],
}),
)
xnnpack_cc_library(
name = "logging",
srcs = LOGGING_SRCS,
hdrs = ["src/xnnpack/log.h"],
copts = select({
":debug_build": [],
"//conditions:default": xnnpack_min_size_copts(),
}) + select({
":xnn_log_to_stdio_explicit_true": ["-DXNN_LOG_TO_STDIO=1"],
"//conditions:default": [],
}),
defines = select({
":xnn_log_level_explicit_none": ["XNN_LOG_LEVEL=0"],
":xnn_log_level_explicit_fatal": ["XNN_LOG_LEVEL=1"],
":xnn_log_level_explicit_error": ["XNN_LOG_LEVEL=2"],
":xnn_log_level_explicit_warning": ["XNN_LOG_LEVEL=3"],
":xnn_log_level_explicit_info": ["XNN_LOG_LEVEL=4"],
":xnn_log_level_explicit_debug": ["XNN_LOG_LEVEL=5"],
"//conditions:default": [],
}),
visibility = xnnpack_visibility(),
deps = select({
":xnn_log_level_explicit_none": [],
":xnn_log_level_explicit_fatal": [],
":xnn_log_level_explicit_error": [],
":xnn_log_level_explicit_warning": [],
":xnn_log_level_explicit_info": [],
":xnn_log_level_explicit_debug": [],
"//conditions:default": [":log_level_default"],
}) + [
":allocation_type",
":common",
":microkernel_type",
":node_type",
":operator_type",
":xnnpack_h",
],
)
[
xnnpack_cc_library(
name = lib + "_microkernels",
deps = xnnpack_list_sum(
[
xnnpack_select_if(
xnnpack_cond_for_arch(arch),
[":" + arch + "_" + lib + "_microkernels"],
)
for arch in xnnpack_archs()
],
[],
),
)
for lib in ("prod", "all")
]
xnnpack_cc_library(
name = "indirection",
srcs = ["src/indirection.c"],
hdrs = ["src/xnnpack/indirection.h"],
deps = [
":common",
":math",
":microparams_h",
":operator_h",
":xnnpack_h",
"@FXdiv",
],
)
xnnpack_cxx_library(
name = "pack_lh",
srcs = ["src/pack-lh.cc"],
deps = [
":common",
":logging",
":math",
":microfnptr_h",
":microkernel_hdrs",
":microparams_h",
":quantization",
"//src/configs:config_hdrs",
"//src/configs:hardware_config",
] + xnnpack_if_kleidiai_enabled([
"@KleidiAI//kai/ukernels/matmul",
]),
)
xnnpack_cxx_library(
name = "packing",
srcs = ["src/reference/packing.cc"],
hdrs = ["src/xnnpack/pack.h"],
deps = [
":allocator",
":common",
":logging",
":math",
":microfnptr_h",
":microparams_h",
":microparams_init",
":unaligned",
":xnnpack_h",
"//src/configs:config_hdrs",
] + xnnpack_if_kleidiai_enabled([
"@KleidiAI//kai/ukernels/matmul",
]),
)
py_binary(
name = "generate_build_identifier_py",
srcs = ["scripts/generate-build-identifier.py"],
main = "scripts/generate-build-identifier.py",
tags = ["notap"], # This should only be built as part of the related genrule.
target_compatible_with = select({
"//build_config:emscripten": ["@platforms//:incompatible"],
"//conditions:default": [],
}),
)
# This target gathers the transitive sources from its deps and adds them to the
# srcs attribute.
xnnpack_transitive_source_list(
name = "build_identifier_ukernel_srcs",
srcs = ["src/reference/packing.cc"],
deps = [":prod_microkernels"],
)
# Windows builds fail on the generate_build_identifier genrule because the
# command line is too long when expanding the source file paths to feed to the
# Python generation script. To work around this, we write those files to a
# single file that we.
#
# This is what the below command does. It ONLY exposes the list file as an output.
#
# See the next genrule comment for the rest of the explanation.
xnnpack_source_list_file(
name = "build_identifier_ukernel_srcs_list",
srcs = [":build_identifier_ukernel_srcs"],
)
# When the python script gets executed, the files it has access to are limited
# to what is explicitely requested in the `srcs` attribute. We add the "list"
# and the source paths to the sources to make them available to the Python
# script and only expand the list file path to keep the command line short
# enough to avoid having Windows break down.
#
# I have not found a way to transitively pull the source files from the "list"
# target and make them available from the Python script without adding them to
# the `srcs` attribute (making them expanded in the "$(SRCS)" variable), thus
# the repetition.
genrule(
name = "generate_build_identifier",
srcs = [
":build_identifier_ukernel_srcs_list",
":build_identifier_ukernel_srcs",
],
outs = ["src/build_identifier.c"],
cmd = "$(location generate_build_identifier_py) --output $@ --input_file_list $(location :build_identifier_ukernel_srcs_list)",
tools = [":generate_build_identifier_py"],
)
xnnpack_cc_library(
name = "build_identifier",
srcs = ["src/build_identifier.c"],
)
xnnpack_cc_library(
name = "cache",
srcs = ["src/cache.c"],
hdrs = ["src/xnnpack/cache.h"],
deps = [
":allocator",
":common",
":logging",
":math",
":memory",
":mutex",
":xnnpack_h",
],
)
# Define a library with just the header to remove circular dependencies:
# operator-run (compute) <-> operators.
xnnpack_cc_library(
name = "compute_h",
hdrs = [
"src/xnnpack/compute.h",
],
deps = [
":common",
":microfnptr_h",
":microparams_h",
":operator_type",
":xnnpack_h",
"//src/configs:config_hdrs",
"@pthreadpool",
],
)
xnnpack_cc_library(
name = "microkernel_utils",
srcs = ["src/microkernel-utils.c"],
hdrs = ["src/xnnpack/microkernel-utils.h"],
deps = [
":common",
":logging",
":math",
"//src/configs:config_hdrs",
"//src/configs:hardware_config",
],
)
# Define a library with just the header to remove circular dependencies:
# indirection <-> operators.
xnnpack_cc_library(
name = "operator_h",
hdrs = [
"src/xnnpack/operator.h",
],
deps = [
":common",
":compute_h",
":microfnptr_h",
":microkernel_type",
":microparams_h",
":node_type",
":operator_type",
":packing",
":xnnpack_h",
"//src/configs:config_hdrs",
"@pthreadpool",
],
)
xnnpack_cc_library(
name = "operator_utils",
srcs = ["src/operator-utils.c"],
hdrs = ["src/xnnpack/operator-utils.h"],
deps = [
":allocator",
":common",
":logging",
":math",
":microfnptr_h",
":node_type",
":operator_h",
":operator_type",
":params",
":xnnpack_h",
],
)
xnnpack_cxx_library(
name = "reference_ukernels",
srcs = [
"src/reference/binary-elementwise.cc",
"src/reference/unary-elementwise.cc",
],
hdrs = [
"src/xnnpack/reference-config.h",
"src/xnnpack/reference-utils.h",
],
deps = [
":common",
":datatype",
":math",
":microfnptr_h",
":microparams_h",
":xnnpack_h",
"//src/configs:config_hdrs",
],
)
xnnpack_cc_library(
name = "datatype",
srcs = ["src/datatype.c"],
hdrs = ["src/xnnpack/datatype.h"],
deps = [
":common",
":math",
":xnnpack_h",
],
)
xnnpack_cc_library(
name = "fingerprint_id",
srcs = ["src/operators/fingerprint_id.c"],
hdrs = [
"src/operators/fingerprint_id.h",
"src/operators/fingerprint_id.h.inc",
],
)
xnnpack_cc_library(
name = "fingerprint_cache",
srcs = ["src/operators/fingerprint_cache.c"],
hdrs = ["src/operators/fingerprint_cache.h"],
deps = [
":allocator",
":cache",
":fingerprint_id",
":init_once",
":mutex",
":operator_delete",
":xnnpack_h",
],
)
xnnpack_cc_library(
name = "fingerprint_check",
srcs = ["src/xnnpack/fingerprint_check.c"],
deps = [
":common",
":fingerprint_cache", # build_cleaner: keep
":fingerprint_id",
":internal",
":logging",
":xnnpack_h",
],
)
xnnpack_cc_library(
name = "operator_delete",
srcs = ["src/operator-delete.c"],
deps = [
":allocator",
":logging",
":operator_h",
":operator_utils",
":params",
":xnnpack_h",
],
)
xnnpack_cc_library(
name = "operators",
srcs = OPERATOR_SRCS,
hdrs = [
"src/xnnpack/compute.h",
"src/xnnpack/operator.h",
],
copts = select({
":debug_build": [],
"//conditions:default": xnnpack_min_size_copts(),
}) + select({
":xnn_enable_hmp_explicit_false": ["-DXNN_MAX_UARCH_TYPES=1"],
"//conditions:default": [],
}),
deps = [
":allocator",
":cache",
":common",
":datatype",
":fingerprint_cache",
":fingerprint_id",
":indirection",
":internal",
":logging",
":math",
":microfnptr_h",
":microkernel_hdrs",
":microkernel_type",
":microkernel_utils",
":microparams_h",
":microparams_init",
":node_type",
":normalization",
":operator_delete",
":operator_type",
":operator_utils",
":pack_lh",
":packing",
":params",
":quantization",
":reference_ukernels",
":subgraph_h",
":xnnpack_h",
"//src/configs:config_hdrs",
"//src/configs:hardware_config",
"//src/configs:microkernel_configs",
"@pthreadpool",
],
)
xnnpack_cc_library(
name = "sanitizers",
srcs = [
"src/sanitizers.c",
],
)
xnnpack_cc_library(
name = "subgraph_h",
hdrs = [
"src/xnnpack/subgraph.h",
],
deps = [
":allocation_type",
":common",
":math",
":node_type",
":xnnpack_h",
"//src/configs:config_hdrs",
"@pthreadpool",
],
)
xnnpack_cc_library(
name = "subgraph",
srcs = SUBGRAPH_SRCS,
hdrs = [
"src/subgraph/subgraph-utils.h",
"src/xnnpack/memory-planner.h",
"src/xnnpack/reshape-helpers.h",
"src/xnnpack/subgraph.h",
"src/xnnpack/subgraph-validation.h",
],
deps = [
":allocation_type",
":allocator",
":cache",
":common",
":datatype",
":fp16",
":internal",
":logging",
":math",
":memory",
":microkernel_hdrs",
":microkernel_type",
":mutex",
":node_type",
":operator_type",
":operator_utils",
":operators",
":params",
":requantization",
":subgraph_h",
":xnnpack_h",
"//src/configs:config_hdrs",
"//src/configs:hardware_config",
"//src/configs:microkernel_configs",
"@pthreadpool",
] + xnnpack_slinky_deps(),
)
xnnpack_cc_library(
name = "mutex",
srcs = [
"src/mutex.c",
],
hdrs = [
"src/xnnpack/mutex.h",
],
deps = [
":common",
":logging",
":xnnpack_h",
],
)
xnnpack_cc_library(
name = "normalization",
srcs = ["src/normalization.c"],
hdrs = [
"src/xnnpack/normalization.h",
],
deps = [
":common",
":math",
":xnnpack_h",
],
)
xnnpack_cc_library(
name = "XNNPACK",
srcs = select({
"//ynnpack/xnnpack:use_ynnpack": [],
"//conditions:default": ["src/init.c"],
}),
hdrs = [
"include/experimental.h",
"include/xnnpack.h",
],
copts = select({
":debug_build": [],
"//conditions:default": xnnpack_min_size_copts(),
}) + select({
":xnn_enable_hmp_explicit_false": ["-DXNN_MAX_UARCH_TYPES=1"],
"//conditions:default": [],
}),
visibility = xnnpack_visibility(),
deps = select({
"//ynnpack/xnnpack:use_ynnpack": ["//ynnpack/xnnpack"],
"//conditions:default": [
"//:allocator",
"//:build_identifier", # build_cleaner: keep
"//:common", # build_cleaner: keep
"//:fingerprint_check",
"//:fingerprint_id",
"//:init_once",
"//:logging",
"//:math", # build_cleaner: keep
"//:microkernel_hdrs", # build_cleaner: keep
"//:microparams_h", # build_cleaner: keep
"//:microparams_init", # build_cleaner: keep
"//:operators", # build_cleaner: keep
"//:params",
"//:subgraph", # build_cleaner: keep
"//src/configs:hardware_config",
"//src/configs:microkernel_configs", # build_cleaner: keep
"@pthreadpool",
],
}) + xnnpack_if_kleidiai_enabled([
"@KleidiAI//:common",
]),
)
############################# Build configurations #############################
# Enables usage of ARM FP16 (FP16 arithmetics) scalar kernels.
config_setting(
name = "xnn_enable_arm_fp16_scalar_explicit_true",
define_values = {"xnn_enable_arm_fp16_scalar": "true"},
)
# Disables usage of ARM FP16 (FP16 arithmetics) scalar kernels.
config_setting(
name = "xnn_enable_arm_fp16_scalar_explicit_false",
define_values = {"xnn_enable_arm_fp16_scalar": "false"},
)
# Enables usage of ARM FP16 (FP16 arithmetics) vector kernels.
config_setting(
name = "xnn_enable_arm_fp16_vector_explicit_true",
define_values = {"xnn_enable_arm_fp16_vector": "true"},
)
# Disables usage of ARM FP16 (FP16 arithmetics) vector kernels.
config_setting(
name = "xnn_enable_arm_fp16_vector_explicit_false",
define_values = {"xnn_enable_arm_fp16_vector": "false"},
)
# Enables usage of ARM BF16 (BF16 arithmetics) kernels.
config_setting(
name = "xnn_enable_arm_bf16_explicit_true",
define_values = {"xnn_enable_arm_bf16": "true"},
)
# Disables usage of ARM BF16 (BF16 arithmetics) kernels.
config_setting(
name = "xnn_enable_arm_bf16_explicit_false",
define_values = {"xnn_enable_arm_bf16": "false"},
)
# Enables usage of ARM DotProd (integer dot product) kernels.
config_setting(
name = "xnn_enable_arm_dotprod_explicit_true",
define_values = {"xnn_enable_arm_dotprod": "true"},
)
# Disables usage of ARM DotProd (integer dot product) kernels.
config_setting(
name = "xnn_enable_arm_dotprod_explicit_false",
define_values = {"xnn_enable_arm_dotprod": "false"},
)
# Enables usage of ARM I8MM (8-bit integer matrix multiply accumulate) kernels.
config_setting(
name = "xnn_enable_arm_i8mm_explicit_true",
define_values = {"xnn_enable_arm_i8mm": "true"},
)
# Disables usage of ARM I8MM (8-bit integer matrix multiply accumulate) kernels.
config_setting(
name = "xnn_enable_arm_i8mm_explicit_false",
define_values = {"xnn_enable_arm_i8mm": "false"},
)
# Enables usage of ARM SME kernels.
config_setting(
name = "xnn_enable_arm_sme_explicit_true",
define_values = {"xnn_enable_arm_sme": "true"},
)
# Disables usage of ARM SME kernels.
config_setting(
name = "xnn_enable_arm_sme_explicit_false",
define_values = {"xnn_enable_arm_sme": "false"},
)
# Enables usage of ARM SME2 kernels.
config_setting(
name = "xnn_enable_arm_sme2_explicit_true",
define_values = {"xnn_enable_arm_sme2": "true"},
)
# Disables usage of ARM SME2 kernels.
config_setting(
name = "xnn_enable_arm_sme2_explicit_false",
define_values = {"xnn_enable_arm_sme2": "false"},
)
# Enables usage of Intel AVX512F (evex512) kernels.
config_setting(
name = "xnn_enable_avx512f_explicit_true",
define_values = {"xnn_enable_avx512f": "true"},
)
# Disables usage of Intel AVX512F (evex512) kernels.
config_setting(
name = "xnn_enable_avx512f_explicit_false",
define_values = {"xnn_enable_avx512f": "false"},
)
# Enables usage of Intel AVX512SKX (evex512) kernels.
config_setting(
name = "xnn_enable_avx512skx_explicit_true",
define_values = {"xnn_enable_avx512skx": "true"},
)
# Disables usage of Intel AVX512SKX (evex512) kernels.
config_setting(
name = "xnn_enable_avx512skx_explicit_false",
define_values = {"xnn_enable_avx512skx": "false"},
)
# Enables usage of Intel AVX512VBMI (evex512) kernels.
config_setting(
name = "xnn_enable_avx512vbmi_explicit_true",
define_values = {"xnn_enable_avx512vbmi": "true"},
)
# Disables usage of Intel AVX512VBMI (evex512) kernels.
config_setting(
name = "xnn_enable_avx512vbmi_explicit_false",
define_values = {"xnn_enable_avx512vbmi": "false"},
)
# Enables usage of Intel AVX512VNNI (evex512) kernels.
config_setting(
name = "xnn_enable_avx512vnni_explicit_true",
define_values = {"xnn_enable_avx512vnni": "true"},
)
# Disables usage of Intel AVX512VNNI (evex512) kernels.
config_setting(
name = "xnn_enable_avx512vnni_explicit_false",
define_values = {"xnn_enable_avx512vnni": "false"},
)
# Enables usage of Intel AVX512VNNIGFNI (evex512) kernels.
config_setting(
name = "xnn_enable_avx512vnnigfni_explicit_true",
define_values = {"xnn_enable_avx512vnnigfni": "true"},
)
# Disables usage of Intel AVX512VNNIGFNI (evex512) kernels.
config_setting(
name = "xnn_enable_avx512vnnigfni_explicit_false",
define_values = {"xnn_enable_avx512vnnigfni": "false"},
)
# Enables usage of Intel AVX512-AMX (integer matrix multiply) kernels.
config_setting(
name = "xnn_enable_avx512amx_explicit_true",
define_values = {"xnn_enable_avx512amx": "true"},
)
# Disables usage of Intel AVX512-AMX (integer matrix multiply) kernels.
config_setting(
name = "xnn_enable_avx512amx_explicit_false",
define_values = {"xnn_enable_avx512amx": "false"},
)
# Enables usage of Intel AVX512-FP16 (fp16 arithmetic) kernels.
config_setting(
name = "xnn_enable_avx512fp16_explicit_true",
define_values = {"xnn_enable_avx512fp16": "true"},
)
# Disables usage of Intel AVX512-FP16 (fp16 arithmetic) kernels.
config_setting(
name = "xnn_enable_avx512fp16_explicit_false",
define_values = {"xnn_enable_avx512fp16": "false"},
)
# Enables usage of Intel AVX512-BF16 (bf16 arithmetic) kernels.
config_setting(
name = "xnn_enable_avx512bf16_explicit_true",
define_values = {"xnn_enable_avx512bf16": "true"},
)
# Disables usage of Intel AVX512-BF16 (bf16 arithmetic) kernels.
config_setting(
name = "xnn_enable_avx512bf16_explicit_false",
define_values = {"xnn_enable_avx512bf16": "false"},
)
# Enables usage of Intel SSE kernels.
config_setting(
name = "xnn_enable_sse_explicit_true",
define_values = {"xnn_enable_sse": "true"},
)
# Disables usage of Intel SSE kernels.
config_setting(
name = "xnn_enable_sse_explicit_false",
define_values = {"xnn_enable_sse": "false"},
)
# Enables usage of Intel SSE2 kernels.
config_setting(
name = "xnn_enable_sse2_explicit_true",
define_values = {"xnn_enable_sse2": "true"},
)
# Disables usage of Intel SSE2 kernels.
config_setting(
name = "xnn_enable_sse2_explicit_false",
define_values = {"xnn_enable_sse2": "false"},
)
# Enables usage of Intel SSSE3 kernels.
config_setting(
name = "xnn_enable_ssse3_explicit_true",
define_values = {"xnn_enable_ssse3": "true"},
)
# Disables usage of Intel SSSE3 kernels.
config_setting(
name = "xnn_enable_ssse3_explicit_false",
define_values = {"xnn_enable_ssse3": "false"},
)
# Enables usage of Intel SSE41 kernels.
config_setting(
name = "xnn_enable_sse41_explicit_true",
define_values = {"xnn_enable_sse41": "true"},
)
# Disables usage of Intel SSE41 kernels.
config_setting(
name = "xnn_enable_sse41_explicit_false",
define_values = {"xnn_enable_sse41": "false"},
)
# Enables usage of Intel AVX kernels.
config_setting(
name = "xnn_enable_avx_explicit_true",
define_values = {"xnn_enable_avx": "true"},
)
# Disables usage of Intel AVX kernels.
config_setting(
name = "xnn_enable_avx_explicit_false",
define_values = {"xnn_enable_avx": "false"},
)
# Enables usage of Intel F16C (f16 convert) kernels.
config_setting(
name = "xnn_enable_f16c_explicit_true",
define_values = {"xnn_enable_f16c": "true"},
)
# Disables usage of Intel F16C (f16 convert) kernels.
config_setting(
name = "xnn_enable_f16c_explicit_false",
define_values = {"xnn_enable_f16c": "false"},
)
# Enables usage of Intel FMA3 (fused multiply accumulate) kernels.
config_setting(
name = "xnn_enable_fma3_explicit_true",
define_values = {"xnn_enable_fma3": "true"},
)
# Disables usage of Intel FMA3 (fused multiply accumulate) kernels.
config_setting(
name = "xnn_enable_fma3_explicit_false",
define_values = {"xnn_enable_fma3": "false"},
)
# Enables usage of Intel AVX2 kernels.
config_setting(
name = "xnn_enable_avx2_explicit_true",
define_values = {"xnn_enable_avx2": "true"},
)
# Disables usage of Intel AVX2 kernels.
config_setting(
name = "xnn_enable_avx2_explicit_false",
define_values = {"xnn_enable_avx2": "false"},
)
# Enables usage of Intel AVX-VNNI (integer dot product) kernels.
config_setting(
name = "xnn_enable_avxvnni_explicit_true",
define_values = {"xnn_enable_avxvnni": "true"},
)
# Disables usage of Intel AVX-VNNI (integer dot product) kernels.
config_setting(
name = "xnn_enable_avxvnni_explicit_false",
define_values = {"xnn_enable_avxvnni": "false"},
)
# Enables usage of Intel AVX-VNNI-INT8 (integer dot product) kernels.
config_setting(
name = "xnn_enable_avxvnniint8_explicit_true",
define_values = {"xnn_enable_avxvnniint8": "true"},
)
# Disables usage of Intel AVX-VNNI-INT8 (integer dot product) kernels.
config_setting(
name = "xnn_enable_avxvnniint8_explicit_false",
define_values = {"xnn_enable_avxvnniint8": "false"},
)
# Enables usage of Intel AVX256SKX (evex256) kernels.
config_setting(
name = "xnn_enable_avx256skx_explicit_true",
define_values = {"xnn_enable_avx256skx": "true"},
)
# Disables usage of Intel AVX256SKX (evex256) kernels.
config_setting(
name = "xnn_enable_avx256skx_explicit_false",
define_values = {"xnn_enable_avx256skx": "false"},
)
# Enables usage of Intel AVX256VNNI (evex256) kernels.
config_setting(
name = "xnn_enable_avx256vnni_explicit_true",
define_values = {"xnn_enable_avx256vnni": "true"},
)
# Disables usage of Intel AVX256VNNI (evex256) kernels.
config_setting(
name = "xnn_enable_avx256vnni_explicit_false",
define_values = {"xnn_enable_avx256vnni": "false"},
)
# Enables usage of Intel AVX256VNNIGFNI (evex256) kernels.
config_setting(
name = "xnn_enable_avx256vnnigfni_explicit_true",
define_values = {"xnn_enable_avx256vnnigfni": "true"},
)
# Disables usage of Intel AVX256VNNIGFNI (evex256) kernels.
config_setting(
name = "xnn_enable_avx256vnnigfni_explicit_false",
define_values = {"xnn_enable_avx256vnnigfni": "false"},
)
# Enables usage of Hexagon HVX kernels.
config_setting(
name = "xnn_enable_hvx_explicit_true",
define_values = {"xnn_enable_hvx": "true"},
)
# Disables usage of Hexagon HVX kernels.
config_setting(
name = "xnn_enable_hvx_explicit_false",
define_values = {"xnn_enable_hvx": "false"},
)
# Enables usage of RISC-V Vector kernels.
config_setting(
name = "xnn_enable_riscv_vector_explicit_true",
define_values = {"xnn_enable_riscv_vector": "true"},
)
# Disables usage of RISC-V Vector kernels.
config_setting(
name = "xnn_enable_riscv_vector_explicit_false",
define_values = {"xnn_enable_riscv_vector": "false"},
)
# Enables usage of RISC-V FP16 (FP16 arithmetics) vector kernels.
config_setting(
name = "xnn_enable_riscv_fp16_vector_explicit_true",
define_values = {"xnn_enable_riscv_fp16_vector": "true"},
)
# Disables usage of RISC-V FP16 (FP16 arithmetics) vector kernels.
config_setting(
name = "xnn_enable_riscv_fp16_vector_explicit_false",
define_values = {"xnn_enable_riscv_fp16_vector": "false"},
)
# Enables usage of cpuinfo library.
config_setting(
name = "xnn_enable_cpuinfo_explicit_true",
define_values = {"xnn_enable_cpuinfo": "true"},
)
# Disables usage of cpuinfo library.
config_setting(
name = "xnn_enable_cpuinfo_explicit_false",
define_values = {"xnn_enable_cpuinfo": "false"},
)
# Enables usage of the KleidiAI library.
config_setting(
name = "xnn_enable_kleidiai_explicit_true",
define_values = {"xnn_enable_kleidiai": "true"},
)
# Disables usage of the KleidiAI library.
config_setting(
name = "xnn_enable_kleidiai_explicit_false",
define_values = {"xnn_enable_kleidiai": "false"},
)
# Enables usage of assembly kernels.
config_setting(
name = "xnn_enable_assembly_explicit_true",
define_values = {"xnn_enable_assembly": "true"},
)
# Disables usage of assembly kernels.
config_setting(
name = "xnn_enable_assembly_explicit_false",
define_values = {"xnn_enable_assembly": "false"},
)
# Enables usage of sparse inference.
config_setting(
name = "xnn_enable_sparse_explicit_true",
define_values = {"xnn_enable_sparse": "true"},
)
# Disables usage of sparse inference.
config_setting(
name = "xnn_enable_sparse_explicit_false",
define_values = {"xnn_enable_sparse": "false"},
)
# Disables usage of HMP-aware optimizations.
config_setting(
name = "xnn_enable_hmp_explicit_false",
define_values = {"xnn_enable_hmp": "false"},
)
# Enables usage of slinky locality optimizations
config_setting(
name = "xnn_use_slinky_explicit_true",
define_values = {"xnn_use_slinky": "true"},
)
config_setting(
name = "xnn_use_slinky_explicit_false",
define_values = {"xnn_use_slinky": "false"},
)
# Enables usage of WASM SIMD AVX-256 revectorization kernels.
config_setting(
name = "xnn_enable_wasm_revectorize_explicit_true",
define_values = {"xnn_enable_wasm_revectorize": "true"},
)
# Disables usage of WASM SIMD AVX-256 revectorization kernels.
config_setting(
name = "xnn_enable_wasm_revectorize_explicit_false",
define_values = {"xnn_enable_wasm_revectorize": "false"},
)
# Force logging to stderr/stdout
config_setting(
name = "xnn_log_to_stdio_explicit_true",
define_values = {"xnn_log_to_stdio": "true"},
)
# Fully disable logging
config_setting(
name = "xnn_log_level_explicit_none",
define_values = {"xnn_log_level": "none"},
)
# Log fatal errors only
config_setting(
name = "xnn_log_level_explicit_fatal",
define_values = {"xnn_log_level": "fatal"},
)
# Log fatal and non-fatal errors
config_setting(
name = "xnn_log_level_explicit_error",
define_values = {"xnn_log_level": "error"},
)
# Log warnings and errors
config_setting(
name = "xnn_log_level_explicit_warning",
define_values = {"xnn_log_level": "warning"},
)
# Log information messages, warnings and errors
config_setting(
name = "xnn_log_level_explicit_info",
define_values = {"xnn_log_level": "info"},
)
# Log all messages, including debug messages
config_setting(
name = "xnn_log_level_explicit_debug",
define_values = {"xnn_log_level": "debug"},
)
# Builds with -c dbg
config_setting(
name = "debug_build",
values = {
"compilation_mode": "dbg",
},
)
# Builds with -c opt
config_setting(
name = "optimized_build",
values = {
"compilation_mode": "opt",
},
)
######################## Composite build configurations #######################
selects.config_setting_group(
name = "arm_fp16_scalar_enabled_by_default",
match_any = [
"//build_config:aarch32",
"//build_config:aarch64",
],
)
alias(
name = "arm_fp16_scalar_enabled",
actual = select({
":xnn_enable_arm_fp16_scalar_explicit_true": ":xnn_enable_arm_fp16_scalar_explicit_true",
":xnn_enable_arm_fp16_scalar_explicit_false": ":xnn_enable_arm_fp16_scalar_explicit_true",
"//conditions:default": ":arm_fp16_scalar_enabled_by_default",
}),
)
selects.config_setting_group(
name = "arm_fp16_vector_enabled_by_default",
match_any = [
"//build_config:aarch32",
"//build_config:aarch64",
],
)
selects.config_setting_group(
name = "arm_neondotfp16_enabled",
match_all = [
":arm_fp16_vector_enabled",
":arm_dotprod_enabled",
],
)
alias(
name = "arm_fp16_vector_enabled",
actual = select({
":xnn_enable_arm_fp16_vector_explicit_true": ":xnn_enable_arm_fp16_vector_explicit_true",
":xnn_enable_arm_fp16_vector_explicit_false": ":xnn_enable_arm_fp16_vector_explicit_true",
"//conditions:default": ":arm_fp16_vector_enabled_by_default",
}),
)
selects.config_setting_group(
name = "arm_aarch64_fp16_vector_enabled",
match_all = [
":arm_fp16_vector_enabled",
"//build_config:aarch64",
],
)
selects.config_setting_group(
name = "avx512bf16_enabled_by_default",
match_any = [
"//build_config:x86_64",
],
)
alias(
name = "avx512bf16_enabled",
actual = select({
":xnn_enable_avx512bf16_explicit_true": ":xnn_enable_avx512bf16_explicit_true",
":xnn_enable_avx512bf16_explicit_false": ":xnn_enable_avx512bf16_explicit_true",
"//conditions:default": ":avx512bf16_enabled_by_default",
}),
)
selects.config_setting_group(
name = "arm_bf16_enabled_by_default",
match_any = [
"//build_config:aarch64",
],
)
alias(
name = "arm_bf16_enabled",
actual = select({
":xnn_enable_arm_bf16_explicit_true": ":xnn_enable_arm_bf16_explicit_true",
":xnn_enable_arm_bf16_explicit_false": ":xnn_enable_arm_bf16_explicit_true",
"//conditions:default": ":arm_bf16_enabled_by_default",
}),
)
selects.config_setting_group(
name = "arm_dotprod_enabled_by_default",
match_any = [
"//build_config:aarch32",
"//build_config:aarch64",
],
)
alias(
name = "arm_dotprod_enabled",
actual = select({
":xnn_enable_arm_dotprod_explicit_true": ":xnn_enable_arm_dotprod_explicit_true",
":xnn_enable_arm_dotprod_explicit_false": ":xnn_enable_arm_dotprod_explicit_true",
"//conditions:default": ":arm_dotprod_enabled_by_default",
}),
)
selects.config_setting_group(
name = "arm_aarch64_dotprod_enabled",
match_all = [
":arm_dotprod_enabled",
"//build_config:aarch64",
],
)
selects.config_setting_group(
name = "arm_i8mm_enabled_by_default",
match_any = [
"//build_config:aarch64",
],
)
alias(
name = "arm_i8mm_enabled",
actual = select({
":xnn_enable_arm_i8mm_explicit_true": ":xnn_enable_arm_i8mm_explicit_true",
":xnn_enable_arm_i8mm_explicit_false": ":xnn_enable_arm_i8mm_explicit_true",
"//conditions:default": ":arm_i8mm_enabled_by_default",
}),
)
selects.config_setting_group(
name = "arm_sme_enabled_by_default",
match_any = [
"//build_config:aarch64",
],
)
alias(
name = "arm_sme_enabled",
actual = select({
":xnn_enable_arm_sme_explicit_true": ":xnn_enable_arm_sme_explicit_true",
":xnn_enable_arm_sme_explicit_false": ":xnn_enable_arm_sme_explicit_true",
"//conditions:default": ":arm_sme_enabled_by_default",
}),
)
selects.config_setting_group(
name = "arm_sme2_enabled_by_default",
match_any = [
"//build_config:aarch64",
],
)
alias(
name = "arm_sme2_enabled",
actual = select({
":xnn_enable_arm_sme2_explicit_true": ":xnn_enable_arm_sme2_explicit_true",
":xnn_enable_arm_sme2_explicit_false": ":xnn_enable_arm_sme2_explicit_true",
"//conditions:default": ":arm_sme2_enabled_by_default",
}),
)
selects.config_setting_group(
name = "avx512f_enabled_by_default",
match_any = [
"//build_config:x86",
],
)
alias(
name = "avx512f_enabled",
actual = select({
":xnn_enable_avx512f_explicit_true": ":xnn_enable_avx512f_explicit_true",
":xnn_enable_avx512f_explicit_false": ":xnn_enable_avx512f_explicit_true",
"//conditions:default": ":avx512f_enabled_by_default",
}),
)
selects.config_setting_group(
name = "avx512skx_enabled_by_default",
match_any = [
"//build_config:x86",
],
)
alias(
name = "avx512skx_enabled",
actual = select({
":xnn_enable_avx512skx_explicit_true": ":xnn_enable_avx512skx_explicit_true",
":xnn_enable_avx512skx_explicit_false": ":xnn_enable_avx512skx_explicit_true",
"//conditions:default": ":avx512skx_enabled_by_default",
}),
)
selects.config_setting_group(
name = "avx512vbmi_enabled_by_default",
match_any = [
"//build_config:x86",
],
)
alias(
name = "avx512vbmi_enabled",
actual = select({
":xnn_enable_avx512vbmi_explicit_true": ":xnn_enable_avx512vbmi_explicit_true",
":xnn_enable_avx512vbmi_explicit_false": ":xnn_enable_avx512vbmi_explicit_true",
"//conditions:default": ":avx512vbmi_enabled_by_default",
}),
)
selects.config_setting_group(
name = "avx512vnni_enabled_by_default",
match_any = [
"//build_config:x86",
],
)
alias(
name = "avx512vnni_enabled",
actual = select({
":xnn_enable_avx512vnni_explicit_true": ":xnn_enable_avx512vnni_explicit_true",
":xnn_enable_avx512vnni_explicit_false": ":xnn_enable_avx512vnni_explicit_true",
"//conditions:default": ":avx512vnni_enabled_by_default",
}),
)
selects.config_setting_group(
name = "avx512vnnigfni_enabled_by_default",
match_any = [
"//build_config:x86",
],
)
alias(
name = "avx512vnnigfni_enabled",
actual = select({
":xnn_enable_avx512vnnigfni_explicit_true": ":xnn_enable_avx512vnnigfni_explicit_true",
":xnn_enable_avx512vnnigfni_explicit_false": ":xnn_enable_avx512vnnigfni_explicit_true",
"//conditions:default": ":avx512vnnigfni_enabled_by_default",
}),
)
selects.config_setting_group(
name = "avx512amx_enabled_by_default",
match_any = [
"//build_config:x86",
],
)
alias(
name = "avx512amx_enabled",
actual = select({
":xnn_enable_avx512amx_explicit_true": ":xnn_enable_avx512amx_explicit_true",
":xnn_enable_avx512amx_explicit_false": ":xnn_enable_avx512amx_explicit_true",
"//build_config:windows_lexan": ":xnn_enable_avx512amx_explicit_true",
"//conditions:default": ":avx512amx_enabled_by_default",
}),
)
selects.config_setting_group(
name = "avx512fp16_enabled_by_default",
match_any = [
"//build_config:x86",
],
)
alias(
name = "avx512fp16_enabled",
actual = select({
":xnn_enable_avx512fp16_explicit_true": ":xnn_enable_avx512fp16_explicit_true",
":xnn_enable_avx512fp16_explicit_false": ":xnn_enable_avx512fp16_explicit_true",
"//conditions:default": ":avx512fp16_enabled_by_default",
}),
)
selects.config_setting_group(
name = "sse_enabled_by_default",
match_any = [
"//build_config:x86",
],
)
alias(
name = "sse_enabled",
actual = select({
":xnn_enable_sse_explicit_true": ":xnn_enable_sse_explicit_true",
":xnn_enable_sse_explicit_false": ":xnn_enable_sse_explicit_true",
"//conditions:default": ":sse_enabled_by_default",
}),
)
selects.config_setting_group(
name = "sse2_enabled_by_default",
match_any = [
"//build_config:x86",
],
)
alias(
name = "sse2_enabled",
actual = select({
":xnn_enable_sse2_explicit_true": ":xnn_enable_sse2_explicit_true",
":xnn_enable_sse2_explicit_false": ":xnn_enable_sse2_explicit_true",
"//conditions:default": ":sse2_enabled_by_default",
}),
)
selects.config_setting_group(
name = "ssse3_enabled_by_default",
match_any = [
"//build_config:x86",
],
)
alias(
name = "ssse3_enabled",
actual = select({
":xnn_enable_ssse3_explicit_true": ":xnn_enable_ssse3_explicit_true",
":xnn_enable_ssse3_explicit_false": ":xnn_enable_ssse3_explicit_true",
"//conditions:default": ":ssse3_enabled_by_default",
}),
)
selects.config_setting_group(
name = "sse41_enabled_by_default",
match_any = [
"//build_config:x86",
],
)
alias(
name = "sse41_enabled",
actual = select({
":xnn_enable_sse41_explicit_true": ":xnn_enable_sse41_explicit_true",
":xnn_enable_sse41_explicit_false": ":xnn_enable_sse41_explicit_true",
"//conditions:default": ":sse41_enabled_by_default",
}),
)
selects.config_setting_group(
name = "avx_enabled_by_default",
match_any = [
"//build_config:x86",
],
)
alias(
name = "avx_enabled",
actual = select({
":xnn_enable_avx_explicit_true": ":xnn_enable_avx_explicit_true",
":xnn_enable_avx_explicit_false": ":xnn_enable_avx_explicit_true",
"//conditions:default": ":avx_enabled_by_default",
}),
)
selects.config_setting_group(
name = "f16c_enabled_by_default",
match_any = [
"//build_config:x86",
],
)
alias(
name = "f16c_enabled",
actual = select({
":xnn_enable_f16c_explicit_true": ":xnn_enable_f16c_explicit_true",
":xnn_enable_f16c_explicit_false": ":xnn_enable_f16c_explicit_true",
"//conditions:default": ":f16c_enabled_by_default",
}),
)
selects.config_setting_group(
name = "fma3_enabled_by_default",
match_any = [
"//build_config:x86",
],
)
alias(
name = "fma3_enabled",
actual = select({
":xnn_enable_fma3_explicit_true": ":xnn_enable_fma3_explicit_true",
":xnn_enable_fma3_explicit_false": ":xnn_enable_fma3_explicit_true",
"//conditions:default": ":fma3_enabled_by_default",
}),
)
selects.config_setting_group(
name = "avx2_enabled_by_default",
match_any = [
"//build_config:x86",
],
)
alias(
name = "avx2_enabled",
actual = select({
":xnn_enable_avx2_explicit_true": ":xnn_enable_avx2_explicit_true",
":xnn_enable_avx2_explicit_false": ":xnn_enable_avx2_explicit_true",
"//conditions:default": ":avx2_enabled_by_default",
}),
)
selects.config_setting_group(
name = "avxvnni_enabled_by_default",
match_any = [
"//build_config:x86",
],
)
alias(
name = "avxvnni_enabled",
actual = select({
":xnn_enable_avxvnni_explicit_true": ":xnn_enable_avxvnni_explicit_true",
":xnn_enable_avxvnni_explicit_false": ":xnn_enable_avxvnni_explicit_true",
"//conditions:default": ":avxvnni_enabled_by_default",
}),
)
selects.config_setting_group(
name = "avxvnniint8_enabled_by_default",
match_any = [
"//build_config:x86",
],
)
alias(
name = "avxvnniint8_enabled",
actual = select({
":xnn_enable_avxvnniint8_explicit_true": ":xnn_enable_avxvnniint8_explicit_true",
":xnn_enable_avxvnniint8_explicit_false": ":xnn_enable_avxvnniint8_explicit_true",
"//build_config:ios_x86_64": ":xnn_enable_avxvnniint8_explicit_true",
"//build_config:ios": ":xnn_enable_avxvnniint8_explicit_true",
"//conditions:default": ":avxvnniint8_enabled_by_default",
}),
)
selects.config_setting_group(
name = "avx256skx_enabled_by_default",
match_any = [
"//build_config:x86",
],
)
alias(
name = "avx256skx_enabled",
actual = select({
":xnn_enable_avx256skx_explicit_true": ":xnn_enable_avx256skx_explicit_true",
":xnn_enable_avx256skx_explicit_false": ":xnn_enable_avx256skx_explicit_true",
"//conditions:default": ":avx256skx_enabled_by_default",
}),
)
selects.config_setting_group(
name = "avx256vnni_enabled_by_default",
match_any = [
"//build_config:x86",
],
)
alias(
name = "avx256vnni_enabled",
actual = select({
":xnn_enable_avx256vnni_explicit_true": ":xnn_enable_avx256vnni_explicit_true",
":xnn_enable_avx256vnni_explicit_false": ":xnn_enable_avx256vnni_explicit_true",
"//conditions:default": ":avx256vnni_enabled_by_default",
}),
)
selects.config_setting_group(
name = "avx256vnnigfni_enabled_by_default",
match_any = [
"//build_config:x86",
],
)
alias(
name = "avx256vnnigfni_enabled",
actual = select({
":xnn_enable_avx256vnnigfni_explicit_true": ":xnn_enable_avx256vnnigfni_explicit_true",
":xnn_enable_avx256vnnigfni_explicit_false": ":xnn_enable_avx256vnnigfni_explicit_true",
"//conditions:default": ":avx256vnnigfni_enabled_by_default",
}),
)
selects.config_setting_group(
name = "hvx_enabled_by_default",
match_any = [
"//build_config:hexagon",
],
)
alias(
name = "hvx_enabled",
actual = select({
":xnn_enable_hvx_explicit_true": ":xnn_enable_hvx_explicit_true",
":xnn_enable_hvx_explicit_false": ":xnn_enable_hvx_explicit_true",
"//conditions:default": ":hvx_enabled_by_default",
}),
)
selects.config_setting_group(
name = "riscv_vector_enabled_by_default",
match_any = [
"//build_config:riscv",
],
)
alias(
name = "riscv_vector_enabled",
actual = select({
":xnn_enable_riscv_vector_explicit_true": ":xnn_enable_riscv_vector_explicit_true",
":xnn_enable_riscv_vector_explicit_false": ":xnn_enable_riscv_vector_explicit_true",
"//conditions:default": ":riscv_vector_enabled_by_default",
}),
)
selects.config_setting_group(
name = "riscv_fp16_vector_enabled_by_default",
match_any = [
"//build_config:riscv",
],
)
# Temporary disable fp16 vectors on Android
alias(
name = "riscv_fp16_vector_enabled",
actual = select({
":xnn_enable_riscv_fp16_vector_explicit_true": ":xnn_enable_riscv_fp16_vector_explicit_true",
":xnn_enable_riscv_fp16_vector_explicit_false": ":xnn_enable_riscv_fp16_vector_explicit_true",
"//build_config:android": ":xnn_enable_riscv_fp16_vector_explicit_false",
"//conditions:default": ":riscv_fp16_vector_enabled_by_default",
}),
)
selects.config_setting_group(
name = "cpuinfo_enabled_by_default",
match_any = [
"//build_config:aarch32",
"//build_config:aarch64",
"//build_config:x86",
],
)
alias(
name = "cpuinfo_enabled",
actual = select({
":xnn_enable_cpuinfo_explicit_true": ":xnn_enable_cpuinfo_explicit_true",
":xnn_enable_cpuinfo_explicit_false": ":xnn_enable_cpuinfo_explicit_true",
"//conditions:default": ":cpuinfo_enabled_by_default",
}),
)
selects.config_setting_group(
name = "slinky_enabled_by_default",
match_any = [
"//build_config:linux_x86",
"//build_config:linux_arm64",
],
)
alias(
name = "slinky_enabled",
actual = select({
":xnn_use_slinky_explicit_true": ":xnn_use_slinky_explicit_true",
":xnn_use_slinky_explicit_false": ":xnn_use_slinky_explicit_true",
"//conditions:default": ":slinky_enabled_by_default",
}),
)
alias(
name = "use_slinky",
actual = select({
":xnn_use_slinky_explicit_true": ":xnn_use_slinky_explicit_true",
":xnn_use_slinky_explicit_false": ":xnn_use_slinky_explicit_true",
"//conditions:default": ":xnn_use_slinky_explicit_true",
}),
)
selects.config_setting_group(
name = "kleidiai_enabled_by_default",
match_all = [
"//build_config:aarch64",
":arm_i8mm_enabled",
],
)
alias(
name = "kleidiai_enabled",
actual = select({
":xnn_enable_kleidiai_explicit_true": ":xnn_enable_kleidiai_explicit_true",
":xnn_enable_kleidiai_explicit_false": ":xnn_enable_kleidiai_explicit_true",
# Disable for Windows ARM64 unless explicitly enabled
"//build_config:windows_aarch64": ":xnn_enable_kleidiai_explicit_true",
"//conditions:default": ":kleidiai_enabled_by_default",
}),
)
selects.config_setting_group(
name = "assembly_enabled_by_default",
match_any = [
"//conditions:default",
],
)
alias(
name = "assembly_enabled",
actual = select({
":xnn_enable_assembly_explicit_true": ":xnn_enable_assembly_explicit_true",
":xnn_enable_assembly_explicit_false": ":xnn_enable_assembly_explicit_true",
"//conditions:default": ":assembly_enabled_by_default",
}),
)
selects.config_setting_group(
name = "sparse_enabled_by_default",
match_any = [
"//conditions:default",
],
)
alias(
name = "sparse_enabled",
actual = select({
":xnn_enable_sparse_explicit_true": ":xnn_enable_sparse_explicit_true",
":xnn_enable_sparse_explicit_false": ":xnn_enable_sparse_explicit_true",
"//conditions:default": ":sparse_enabled_by_default",
}),
)
selects.config_setting_group(
name = "wasm_revectorize_enabled_by_default",
match_any = [
"//build_config:emscripten_wasmsimd",
"//build_config:emscripten_wasmrelaxedsimd",
],
)
alias(
name = "wasm_revectorize_enabled",
actual = select({
":xnn_enable_wasm_revectorize_explicit_true": ":xnn_enable_wasm_revectorize_explicit_true",
":xnn_enable_wasm_revectorize_explicit_false": ":xnn_enable_wasm_revectorize_explicit_true",
"//conditions:default": ":wasm_revectorize_enabled_by_default",
}),
)
bzl_library(
name = "build_defs_bzl",
srcs = ["build_defs.bzl"],
visibility = ["//visibility:private"],
deps = ["@rules_cc//cc:core_rules"],
)
bzl_library(
name = "build_params_bzl",
srcs = ["build_params.bzl"],
visibility = ["//visibility:private"],
)