xref: /aosp_15_r20/external/executorch/kernels/quantized/targets.bzl (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
1*523fa7a6SAndroid Build Coastguard Workerload("@fbsource//xplat/executorch/build:runtime_wrapper.bzl", "runtime")
2*523fa7a6SAndroid Build Coastguard Workerload("@fbsource//xplat/executorch/codegen:codegen.bzl", "et_operator_library", "executorch_generated_lib", "exir_custom_ops_aot_lib")
3*523fa7a6SAndroid Build Coastguard Worker
4*523fa7a6SAndroid Build Coastguard Workerdef define_common_targets():
5*523fa7a6SAndroid Build Coastguard Worker    runtime.export_file(
6*523fa7a6SAndroid Build Coastguard Worker        name = "quantized.yaml",
7*523fa7a6SAndroid Build Coastguard Worker        visibility = [
8*523fa7a6SAndroid Build Coastguard Worker            "@EXECUTORCH_CLIENTS",
9*523fa7a6SAndroid Build Coastguard Worker        ],
10*523fa7a6SAndroid Build Coastguard Worker    )
11*523fa7a6SAndroid Build Coastguard Worker
12*523fa7a6SAndroid Build Coastguard Worker    # Excluding embedding_byte ops because we choose to define them
13*523fa7a6SAndroid Build Coastguard Worker    # in python separately, mostly to be easy to share with oss.
14*523fa7a6SAndroid Build Coastguard Worker    et_operator_library(
15*523fa7a6SAndroid Build Coastguard Worker        name = "quantized_ops_need_aot_registration",
16*523fa7a6SAndroid Build Coastguard Worker        ops = [
17*523fa7a6SAndroid Build Coastguard Worker            "quantized_decomposed::add.out",
18*523fa7a6SAndroid Build Coastguard Worker            "quantized_decomposed::choose_qparams.Tensor_out",
19*523fa7a6SAndroid Build Coastguard Worker            "quantized_decomposed::choose_qparams_per_token_asymmetric.out",
20*523fa7a6SAndroid Build Coastguard Worker            "quantized_decomposed::dequantize_per_channel.out",
21*523fa7a6SAndroid Build Coastguard Worker            "quantized_decomposed::dequantize_per_tensor.out",
22*523fa7a6SAndroid Build Coastguard Worker            "quantized_decomposed::dequantize_per_tensor.Tensor_out",
23*523fa7a6SAndroid Build Coastguard Worker            "quantized_decomposed::dequantize_per_token.out",
24*523fa7a6SAndroid Build Coastguard Worker            "quantized_decomposed::mixed_linear.out",
25*523fa7a6SAndroid Build Coastguard Worker            "quantized_decomposed::mixed_mm.out",
26*523fa7a6SAndroid Build Coastguard Worker            "quantized_decomposed::quantize_per_channel.out",
27*523fa7a6SAndroid Build Coastguard Worker            "quantized_decomposed::quantize_per_tensor.out",
28*523fa7a6SAndroid Build Coastguard Worker            "quantized_decomposed::quantize_per_tensor.Tensor_out",
29*523fa7a6SAndroid Build Coastguard Worker            "quantized_decomposed::quantize_per_token.out",
30*523fa7a6SAndroid Build Coastguard Worker        ],
31*523fa7a6SAndroid Build Coastguard Worker        define_static_targets = True,
32*523fa7a6SAndroid Build Coastguard Worker    )
33*523fa7a6SAndroid Build Coastguard Worker
34*523fa7a6SAndroid Build Coastguard Worker    # lib used to register quantized ops into EXIR
35*523fa7a6SAndroid Build Coastguard Worker    exir_custom_ops_aot_lib(
36*523fa7a6SAndroid Build Coastguard Worker        name = "custom_ops_generated_lib",
37*523fa7a6SAndroid Build Coastguard Worker        yaml_target = ":quantized.yaml",
38*523fa7a6SAndroid Build Coastguard Worker        visibility = ["//executorch/...", "@EXECUTORCH_CLIENTS"],
39*523fa7a6SAndroid Build Coastguard Worker        kernels = [":quantized_operators_aten"],
40*523fa7a6SAndroid Build Coastguard Worker        deps = [
41*523fa7a6SAndroid Build Coastguard Worker            ":quantized_ops_need_aot_registration",
42*523fa7a6SAndroid Build Coastguard Worker        ],
43*523fa7a6SAndroid Build Coastguard Worker    )
44*523fa7a6SAndroid Build Coastguard Worker
45*523fa7a6SAndroid Build Coastguard Worker    # lib used to register quantized ops into EXIR
46*523fa7a6SAndroid Build Coastguard Worker    # TODO: merge this with custom_ops_generated_lib
47*523fa7a6SAndroid Build Coastguard Worker    exir_custom_ops_aot_lib(
48*523fa7a6SAndroid Build Coastguard Worker        name = "aot_lib",
49*523fa7a6SAndroid Build Coastguard Worker        yaml_target = ":quantized.yaml",
50*523fa7a6SAndroid Build Coastguard Worker        visibility = ["//executorch/..."],
51*523fa7a6SAndroid Build Coastguard Worker        kernels = [":quantized_operators_aten"],
52*523fa7a6SAndroid Build Coastguard Worker        deps = [
53*523fa7a6SAndroid Build Coastguard Worker            ":quantized_ops_need_aot_registration",
54*523fa7a6SAndroid Build Coastguard Worker        ],
55*523fa7a6SAndroid Build Coastguard Worker    )
56*523fa7a6SAndroid Build Coastguard Worker
57*523fa7a6SAndroid Build Coastguard Worker    et_operator_library(
58*523fa7a6SAndroid Build Coastguard Worker        name = "all_quantized_ops",
59*523fa7a6SAndroid Build Coastguard Worker        ops_schema_yaml_target = ":quantized.yaml",
60*523fa7a6SAndroid Build Coastguard Worker        define_static_targets = True,
61*523fa7a6SAndroid Build Coastguard Worker    )
62*523fa7a6SAndroid Build Coastguard Worker
63*523fa7a6SAndroid Build Coastguard Worker    # On Windows we can only compile these two ops currently, so adding a
64*523fa7a6SAndroid Build Coastguard Worker    # separate target for this.
65*523fa7a6SAndroid Build Coastguard Worker    et_operator_library(
66*523fa7a6SAndroid Build Coastguard Worker        name = "q_dq_ops",
67*523fa7a6SAndroid Build Coastguard Worker            ops = [
68*523fa7a6SAndroid Build Coastguard Worker                "quantized_decomposed::dequantize_per_tensor.out",
69*523fa7a6SAndroid Build Coastguard Worker                "quantized_decomposed::dequantize_per_tensor.Tensor_out",
70*523fa7a6SAndroid Build Coastguard Worker                "quantized_decomposed::quantize_per_tensor.out",
71*523fa7a6SAndroid Build Coastguard Worker                "quantized_decomposed::quantize_per_tensor.Tensor_out",
72*523fa7a6SAndroid Build Coastguard Worker            ],
73*523fa7a6SAndroid Build Coastguard Worker    )
74*523fa7a6SAndroid Build Coastguard Worker
75*523fa7a6SAndroid Build Coastguard Worker    for aten_mode in (True, False):
76*523fa7a6SAndroid Build Coastguard Worker        aten_suffix = "_aten" if aten_mode else ""
77*523fa7a6SAndroid Build Coastguard Worker
78*523fa7a6SAndroid Build Coastguard Worker        runtime.cxx_library(
79*523fa7a6SAndroid Build Coastguard Worker            name = "quantized_operators" + aten_suffix,
80*523fa7a6SAndroid Build Coastguard Worker            srcs = [],
81*523fa7a6SAndroid Build Coastguard Worker            visibility = [
82*523fa7a6SAndroid Build Coastguard Worker                "//executorch/...",
83*523fa7a6SAndroid Build Coastguard Worker                "@EXECUTORCH_CLIENTS",
84*523fa7a6SAndroid Build Coastguard Worker            ],
85*523fa7a6SAndroid Build Coastguard Worker            exported_deps = [
86*523fa7a6SAndroid Build Coastguard Worker                "//executorch/kernels/quantized/cpu:quantized_cpu" + aten_suffix,
87*523fa7a6SAndroid Build Coastguard Worker            ],
88*523fa7a6SAndroid Build Coastguard Worker        )
89*523fa7a6SAndroid Build Coastguard Worker
90*523fa7a6SAndroid Build Coastguard Worker        executorch_generated_lib(
91*523fa7a6SAndroid Build Coastguard Worker            name = "generated_lib" + aten_suffix,
92*523fa7a6SAndroid Build Coastguard Worker            deps = [
93*523fa7a6SAndroid Build Coastguard Worker                ":quantized_operators" + aten_suffix,
94*523fa7a6SAndroid Build Coastguard Worker                ":all_quantized_ops",
95*523fa7a6SAndroid Build Coastguard Worker            ],
96*523fa7a6SAndroid Build Coastguard Worker            custom_ops_yaml_target = ":quantized.yaml",
97*523fa7a6SAndroid Build Coastguard Worker            custom_ops_aten_kernel_deps = [":quantized_operators_aten"] if aten_mode else [],
98*523fa7a6SAndroid Build Coastguard Worker            custom_ops_requires_aot_registration = False,
99*523fa7a6SAndroid Build Coastguard Worker            aten_mode = aten_mode,
100*523fa7a6SAndroid Build Coastguard Worker            visibility = [
101*523fa7a6SAndroid Build Coastguard Worker                "//executorch/...",
102*523fa7a6SAndroid Build Coastguard Worker                "@EXECUTORCH_CLIENTS",
103*523fa7a6SAndroid Build Coastguard Worker            ],
104*523fa7a6SAndroid Build Coastguard Worker            define_static_targets = True,
105*523fa7a6SAndroid Build Coastguard Worker        )
106*523fa7a6SAndroid Build Coastguard Worker
107*523fa7a6SAndroid Build Coastguard Worker        # On Windows we can only compile these two ops currently, so adding a
108*523fa7a6SAndroid Build Coastguard Worker        # separate target for this.
109*523fa7a6SAndroid Build Coastguard Worker        executorch_generated_lib(
110*523fa7a6SAndroid Build Coastguard Worker            name = "q_dq_ops_generated_lib" + aten_suffix,
111*523fa7a6SAndroid Build Coastguard Worker            custom_ops_yaml_target = ":quantized.yaml",
112*523fa7a6SAndroid Build Coastguard Worker            kernel_deps = [
113*523fa7a6SAndroid Build Coastguard Worker                "//executorch/kernels/quantized/cpu:op_quantize" + aten_suffix,
114*523fa7a6SAndroid Build Coastguard Worker                "//executorch/kernels/quantized/cpu:op_dequantize" + aten_suffix,
115*523fa7a6SAndroid Build Coastguard Worker            ],
116*523fa7a6SAndroid Build Coastguard Worker            aten_mode = aten_mode,
117*523fa7a6SAndroid Build Coastguard Worker            deps = [
118*523fa7a6SAndroid Build Coastguard Worker                ":q_dq_ops",
119*523fa7a6SAndroid Build Coastguard Worker            ],
120*523fa7a6SAndroid Build Coastguard Worker            visibility = [
121*523fa7a6SAndroid Build Coastguard Worker                "//executorch/...",
122*523fa7a6SAndroid Build Coastguard Worker                "@EXECUTORCH_CLIENTS",
123*523fa7a6SAndroid Build Coastguard Worker            ],
124*523fa7a6SAndroid Build Coastguard Worker        )
125*523fa7a6SAndroid Build Coastguard Worker
126*523fa7a6SAndroid Build Coastguard Worker    runtime.python_library(
127*523fa7a6SAndroid Build Coastguard Worker        name = "quantized_ops_lib",
128*523fa7a6SAndroid Build Coastguard Worker        srcs = ["__init__.py"],
129*523fa7a6SAndroid Build Coastguard Worker        deps = [
130*523fa7a6SAndroid Build Coastguard Worker            "//caffe2:torch",
131*523fa7a6SAndroid Build Coastguard Worker        ],
132*523fa7a6SAndroid Build Coastguard Worker        visibility = [
133*523fa7a6SAndroid Build Coastguard Worker            "//executorch/kernels/quantized/...",
134*523fa7a6SAndroid Build Coastguard Worker            "@EXECUTORCH_CLIENTS",
135*523fa7a6SAndroid Build Coastguard Worker        ],
136*523fa7a6SAndroid Build Coastguard Worker    )
137