blob: 13ef166ece6eab186a83861483a4a8b1ac6a962d [file] [log] [blame] [edit]
load("@fbsource//xplat/executorch/build:runtime_wrapper.bzl", "runtime")
load("@fbsource//xplat/executorch/codegen:codegen.bzl", "et_operator_library", "executorch_generated_lib", "exir_custom_ops_aot_lib")
def define_common_targets():
runtime.export_file(
name = "quantized.yaml",
visibility = [
"@EXECUTORCH_CLIENTS",
],
)
# Excluding embedding_byte ops because we choose to define them
# in python separately, mostly to be easy to share with oss.
et_operator_library(
name = "quantized_ops_need_aot_registration",
ops = [
"quantized_decomposed::add.out",
"quantized_decomposed::choose_qparams.Tensor_out",
"quantized_decomposed::choose_qparams_per_token_asymmetric.out",
"quantized_decomposed::dequantize_per_channel.out",
"quantized_decomposed::dequantize_per_tensor.out",
"quantized_decomposed::dequantize_per_tensor.Tensor_out",
"quantized_decomposed::dequantize_per_token.out",
"quantized_decomposed::mixed_linear.out",
"quantized_decomposed::mixed_mm.out",
"quantized_decomposed::quantize_per_channel.out",
"quantized_decomposed::quantize_per_tensor.out",
"quantized_decomposed::quantize_per_tensor.Tensor_out",
"quantized_decomposed::quantize_per_token.out",
],
define_static_targets = True,
)
# lib used to register quantized ops into EXIR
exir_custom_ops_aot_lib(
name = "custom_ops_generated_lib",
yaml_target = ":quantized.yaml",
visibility = ["//executorch/...", "@EXECUTORCH_CLIENTS"],
kernels = [":quantized_operators_aten"],
deps = [
":quantized_ops_need_aot_registration",
],
)
# lib used to register quantized ops into EXIR
# TODO: merge this with custom_ops_generated_lib
exir_custom_ops_aot_lib(
name = "aot_lib",
yaml_target = ":quantized.yaml",
visibility = ["//executorch/..."],
kernels = [":quantized_operators_aten"],
deps = [
":quantized_ops_need_aot_registration",
],
)
et_operator_library(
name = "all_quantized_ops",
ops_schema_yaml_target = ":quantized.yaml",
define_static_targets = True,
)
# On Windows we can only compile these two ops currently, so adding a
# separate target for this.
et_operator_library(
name = "q_dq_ops",
ops = [
"quantized_decomposed::dequantize_per_tensor.out",
"quantized_decomposed::dequantize_per_tensor.Tensor_out",
"quantized_decomposed::quantize_per_tensor.out",
"quantized_decomposed::quantize_per_tensor.Tensor_out",
],
)
for aten_mode in (True, False):
aten_suffix = "_aten" if aten_mode else ""
runtime.cxx_library(
name = "quantized_operators" + aten_suffix,
srcs = [],
visibility = [
"//executorch/...",
"@EXECUTORCH_CLIENTS",
],
exported_deps = [
"//executorch/kernels/quantized/cpu:quantized_cpu" + aten_suffix,
],
)
executorch_generated_lib(
name = "generated_lib" + aten_suffix,
deps = [
":quantized_operators" + aten_suffix,
":all_quantized_ops",
],
custom_ops_yaml_target = ":quantized.yaml",
custom_ops_aten_kernel_deps = [":quantized_operators_aten"] if aten_mode else [],
custom_ops_requires_aot_registration = False,
aten_mode = aten_mode,
visibility = [
"//executorch/...",
"@EXECUTORCH_CLIENTS",
],
define_static_targets = True,
)
# On Windows we can only compile these two ops currently, so adding a
# separate target for this.
executorch_generated_lib(
name = "q_dq_ops_generated_lib" + aten_suffix,
custom_ops_yaml_target = ":quantized.yaml",
kernel_deps = [
"//executorch/kernels/quantized/cpu:op_quantize" + aten_suffix,
"//executorch/kernels/quantized/cpu:op_dequantize" + aten_suffix,
],
aten_mode = aten_mode,
deps = [
":q_dq_ops",
],
visibility = [
"//executorch/...",
"@EXECUTORCH_CLIENTS",
],
)
runtime.python_library(
name = "quantized_ops_lib",
srcs = ["__init__.py"],
deps = [
"//caffe2:torch",
],
visibility = [
"//executorch/kernels/quantized/...",
"@EXECUTORCH_CLIENTS",
],
)