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