xref: /aosp_15_r20/external/executorch/examples/selective_build/targets.bzl (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
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