1*523fa7a6SAndroid Build Coastguard Workerload("@fbsource//xplat/executorch/build:runtime_wrapper.bzl", "get_oss_build_kwargs", "is_xplat", "runtime") 2*523fa7a6SAndroid Build Coastguard Workerload("@fbsource//xplat/executorch/codegen:codegen.bzl", "et_operator_library", "executorch_generated_lib") 3*523fa7a6SAndroid Build Coastguard Worker 4*523fa7a6SAndroid Build Coastguard Workerdef define_common_targets(): 5*523fa7a6SAndroid Build Coastguard Worker """Defines targets that should be shared between fbcode and xplat. 6*523fa7a6SAndroid Build Coastguard Worker 7*523fa7a6SAndroid Build Coastguard Worker The directory containing this targets.bzl file should also contain both 8*523fa7a6SAndroid Build Coastguard Worker TARGETS and BUCK files that call this function. 9*523fa7a6SAndroid Build Coastguard Worker """ 10*523fa7a6SAndroid Build Coastguard Worker 11*523fa7a6SAndroid Build Coastguard Worker # Select all ops: register all the ops in portable/functions.yaml 12*523fa7a6SAndroid Build Coastguard Worker et_operator_library( 13*523fa7a6SAndroid Build Coastguard Worker name = "select_all_ops", 14*523fa7a6SAndroid Build Coastguard Worker include_all_operators = True, 15*523fa7a6SAndroid Build Coastguard Worker ) 16*523fa7a6SAndroid Build Coastguard Worker 17*523fa7a6SAndroid Build Coastguard Worker executorch_generated_lib( 18*523fa7a6SAndroid Build Coastguard Worker name = "select_all_lib", 19*523fa7a6SAndroid Build Coastguard Worker functions_yaml_target = "//executorch/kernels/portable:functions.yaml", 20*523fa7a6SAndroid Build Coastguard Worker kernel_deps = [ 21*523fa7a6SAndroid Build Coastguard Worker "//executorch/kernels/portable:operators", 22*523fa7a6SAndroid Build Coastguard Worker ], 23*523fa7a6SAndroid Build Coastguard Worker deps = [ 24*523fa7a6SAndroid Build Coastguard Worker ":select_all_ops", 25*523fa7a6SAndroid Build Coastguard Worker ], 26*523fa7a6SAndroid Build Coastguard Worker ) 27*523fa7a6SAndroid Build Coastguard Worker 28*523fa7a6SAndroid Build Coastguard Worker # Select a list of operators: defined in `ops` 29*523fa7a6SAndroid Build Coastguard Worker et_operator_library( 30*523fa7a6SAndroid Build Coastguard Worker name = "select_ops_in_list", 31*523fa7a6SAndroid Build Coastguard Worker ops = [ 32*523fa7a6SAndroid Build Coastguard Worker "aten::add.out", 33*523fa7a6SAndroid Build Coastguard Worker "aten::mm.out", 34*523fa7a6SAndroid Build Coastguard Worker ], 35*523fa7a6SAndroid Build Coastguard Worker ) 36*523fa7a6SAndroid Build Coastguard Worker 37*523fa7a6SAndroid Build Coastguard Worker executorch_generated_lib( 38*523fa7a6SAndroid Build Coastguard Worker name = "select_ops_in_list_lib", 39*523fa7a6SAndroid Build Coastguard Worker functions_yaml_target = "//executorch/kernels/portable:functions.yaml", 40*523fa7a6SAndroid Build Coastguard Worker kernel_deps = [ 41*523fa7a6SAndroid Build Coastguard Worker "//executorch/kernels/portable:operators", 42*523fa7a6SAndroid Build Coastguard Worker ], 43*523fa7a6SAndroid Build Coastguard Worker deps = [ 44*523fa7a6SAndroid Build Coastguard Worker ":select_ops_in_list", 45*523fa7a6SAndroid Build Coastguard Worker ], 46*523fa7a6SAndroid Build Coastguard Worker ) 47*523fa7a6SAndroid Build Coastguard Worker 48*523fa7a6SAndroid Build Coastguard Worker # Select a dictionary of ops with kernel metadata 49*523fa7a6SAndroid Build Coastguard Worker et_operator_library( 50*523fa7a6SAndroid Build Coastguard Worker name = "select_ops_in_dict", 51*523fa7a6SAndroid Build Coastguard Worker ops_dict = { 52*523fa7a6SAndroid Build Coastguard Worker "aten::add.out": ["v1/3;0,1", "v1/6;0,1"], # int, float 53*523fa7a6SAndroid Build Coastguard Worker "aten::mm.out": [], # all dtypes 54*523fa7a6SAndroid Build Coastguard Worker }, 55*523fa7a6SAndroid Build Coastguard Worker ) 56*523fa7a6SAndroid Build Coastguard Worker 57*523fa7a6SAndroid Build Coastguard Worker executorch_generated_lib( 58*523fa7a6SAndroid Build Coastguard Worker name = "select_ops_in_dict_lib", 59*523fa7a6SAndroid Build Coastguard Worker functions_yaml_target = "//executorch/kernels/portable:functions.yaml", 60*523fa7a6SAndroid Build Coastguard Worker kernel_deps = [ 61*523fa7a6SAndroid Build Coastguard Worker "//executorch/kernels/portable:operators", 62*523fa7a6SAndroid Build Coastguard Worker ], 63*523fa7a6SAndroid Build Coastguard Worker deps = [ 64*523fa7a6SAndroid Build Coastguard Worker ":select_ops_in_dict", 65*523fa7a6SAndroid Build Coastguard Worker ], 66*523fa7a6SAndroid Build Coastguard Worker dtype_selective_build = True, 67*523fa7a6SAndroid Build Coastguard Worker visibility = ["//executorch/..."], 68*523fa7a6SAndroid Build Coastguard Worker ) 69*523fa7a6SAndroid Build Coastguard Worker 70*523fa7a6SAndroid Build Coastguard Worker # Select all ops from a yaml file 71*523fa7a6SAndroid Build Coastguard Worker et_operator_library( 72*523fa7a6SAndroid Build Coastguard Worker name = "select_ops_from_yaml", 73*523fa7a6SAndroid Build Coastguard Worker ops_schema_yaml_target = "//executorch/examples/portable/custom_ops:custom_ops.yaml", 74*523fa7a6SAndroid Build Coastguard Worker ) 75*523fa7a6SAndroid Build Coastguard Worker 76*523fa7a6SAndroid Build Coastguard Worker executorch_generated_lib( 77*523fa7a6SAndroid Build Coastguard Worker name = "select_ops_from_yaml_lib", 78*523fa7a6SAndroid Build Coastguard Worker custom_ops_yaml_target = "//executorch/examples/portable/custom_ops:custom_ops.yaml", 79*523fa7a6SAndroid Build Coastguard Worker kernel_deps = [ 80*523fa7a6SAndroid Build Coastguard Worker "//executorch/examples/portable/custom_ops:custom_ops_1", 81*523fa7a6SAndroid Build Coastguard Worker "//executorch/examples/portable/custom_ops:custom_ops_2", 82*523fa7a6SAndroid Build Coastguard Worker ], 83*523fa7a6SAndroid Build Coastguard Worker deps = [ 84*523fa7a6SAndroid Build Coastguard Worker ":select_ops_from_yaml", 85*523fa7a6SAndroid Build Coastguard Worker ], 86*523fa7a6SAndroid Build Coastguard Worker ) 87*523fa7a6SAndroid Build Coastguard Worker 88*523fa7a6SAndroid Build Coastguard Worker # Select all ops from a given model 89*523fa7a6SAndroid Build Coastguard Worker # TODO(larryliu0820): Add this 90*523fa7a6SAndroid Build Coastguard Worker 91*523fa7a6SAndroid Build Coastguard Worker if not runtime.is_oss and not is_xplat(): 92*523fa7a6SAndroid Build Coastguard Worker runtime.genrule( 93*523fa7a6SAndroid Build Coastguard Worker name = "add_mul_model", 94*523fa7a6SAndroid Build Coastguard Worker outs = {"add_mul": ["add_mul.pte"]}, 95*523fa7a6SAndroid Build Coastguard Worker cmd = "$(exe fbcode//executorch/examples/portable/scripts:export) --model_name add_mul --output_dir $OUT", 96*523fa7a6SAndroid Build Coastguard Worker macros_only = False, 97*523fa7a6SAndroid Build Coastguard Worker visibility = ["//executorch/..."], 98*523fa7a6SAndroid Build Coastguard Worker ) 99*523fa7a6SAndroid Build Coastguard Worker 100*523fa7a6SAndroid Build Coastguard Worker et_operator_library( 101*523fa7a6SAndroid Build Coastguard Worker name = "select_ops_from_model", 102*523fa7a6SAndroid Build Coastguard Worker model = ":add_mul_model[add_mul]", 103*523fa7a6SAndroid Build Coastguard Worker ) 104*523fa7a6SAndroid Build Coastguard Worker 105*523fa7a6SAndroid Build Coastguard Worker executorch_generated_lib( 106*523fa7a6SAndroid Build Coastguard Worker name = "select_ops_from_model_lib", 107*523fa7a6SAndroid Build Coastguard Worker functions_yaml_target = "//executorch/kernels/portable:functions.yaml", 108*523fa7a6SAndroid Build Coastguard Worker kernel_deps = ["//executorch/kernels/portable:operators"], 109*523fa7a6SAndroid Build Coastguard Worker deps = [":select_ops_from_model"], 110*523fa7a6SAndroid Build Coastguard Worker visibility = ["//executorch/kernels/..."], 111*523fa7a6SAndroid Build Coastguard Worker ) 112*523fa7a6SAndroid Build Coastguard Worker 113*523fa7a6SAndroid Build Coastguard Worker # ~~~ Test binary for selective build ~~~ 114*523fa7a6SAndroid Build Coastguard Worker select_ops = native.read_config("executorch", "select_ops", None) 115*523fa7a6SAndroid Build Coastguard Worker lib = [] 116*523fa7a6SAndroid Build Coastguard Worker if select_ops == "all": 117*523fa7a6SAndroid Build Coastguard Worker lib.append(":select_all_lib") 118*523fa7a6SAndroid Build Coastguard Worker elif select_ops == "list": 119*523fa7a6SAndroid Build Coastguard Worker lib.append(":select_ops_in_list_lib") 120*523fa7a6SAndroid Build Coastguard Worker elif select_ops == "dict": 121*523fa7a6SAndroid Build Coastguard Worker lib.append(":select_ops_in_dict_lib") 122*523fa7a6SAndroid Build Coastguard Worker elif select_ops == "yaml": 123*523fa7a6SAndroid Build Coastguard Worker lib.append(":select_ops_from_yaml_lib") 124*523fa7a6SAndroid Build Coastguard Worker elif select_ops == "model": 125*523fa7a6SAndroid Build Coastguard Worker lib.append(":select_ops_from_model_lib") 126*523fa7a6SAndroid Build Coastguard Worker runtime.cxx_binary( 127*523fa7a6SAndroid Build Coastguard Worker name = "selective_build_test", 128*523fa7a6SAndroid Build Coastguard Worker srcs = [], 129*523fa7a6SAndroid Build Coastguard Worker deps = [ 130*523fa7a6SAndroid Build Coastguard Worker "//executorch/examples/portable/executor_runner:executor_runner_lib", 131*523fa7a6SAndroid Build Coastguard Worker ] + lib, 132*523fa7a6SAndroid Build Coastguard Worker define_static_target = True, 133*523fa7a6SAndroid Build Coastguard Worker **get_oss_build_kwargs() 134*523fa7a6SAndroid Build Coastguard Worker ) 135