xref: /aosp_15_r20/external/executorch/test/models/targets.bzl (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
1*523fa7a6SAndroid Build Coastguard Workerload("@fbsource//xplat/executorch/build:runtime_wrapper.bzl", "runtime")
2*523fa7a6SAndroid Build Coastguard Worker
3*523fa7a6SAndroid Build Coastguard Workerdef define_common_targets():
4*523fa7a6SAndroid Build Coastguard Worker    """
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    runtime.python_library(
11*523fa7a6SAndroid Build Coastguard Worker        name = "linear_model",
12*523fa7a6SAndroid Build Coastguard Worker        srcs = ["linear_model.py"],
13*523fa7a6SAndroid Build Coastguard Worker        deps = [
14*523fa7a6SAndroid Build Coastguard Worker            "//caffe2:torch",
15*523fa7a6SAndroid Build Coastguard Worker        ],
16*523fa7a6SAndroid Build Coastguard Worker        visibility = [],  # Private
17*523fa7a6SAndroid Build Coastguard Worker    )
18*523fa7a6SAndroid Build Coastguard Worker
19*523fa7a6SAndroid Build Coastguard Worker    runtime.python_library(
20*523fa7a6SAndroid Build Coastguard Worker        name = "generate_linear_out_bundled_program_lib",
21*523fa7a6SAndroid Build Coastguard Worker        srcs = ["generate_linear_out_bundled_program.py"],
22*523fa7a6SAndroid Build Coastguard Worker        deps = [
23*523fa7a6SAndroid Build Coastguard Worker            ":linear_model",
24*523fa7a6SAndroid Build Coastguard Worker            "//caffe2:torch",
25*523fa7a6SAndroid Build Coastguard Worker            "//executorch/devtools/bundled_program:config",
26*523fa7a6SAndroid Build Coastguard Worker            "//executorch/devtools:lib",
27*523fa7a6SAndroid Build Coastguard Worker            "//executorch/devtools/bundled_program/serialize:lib",
28*523fa7a6SAndroid Build Coastguard Worker            "//executorch/exir:lib",
29*523fa7a6SAndroid Build Coastguard Worker            "//executorch/exir/_serialize:lib",
30*523fa7a6SAndroid Build Coastguard Worker        ],
31*523fa7a6SAndroid Build Coastguard Worker    )
32*523fa7a6SAndroid Build Coastguard Worker
33*523fa7a6SAndroid Build Coastguard Worker    runtime.python_binary(
34*523fa7a6SAndroid Build Coastguard Worker        name = "generate_linear_out_bundled_program",
35*523fa7a6SAndroid Build Coastguard Worker        main_module = "executorch.test.models.generate_linear_out_bundled_program",
36*523fa7a6SAndroid Build Coastguard Worker        deps = [
37*523fa7a6SAndroid Build Coastguard Worker            ":generate_linear_out_bundled_program_lib",
38*523fa7a6SAndroid Build Coastguard Worker        ],
39*523fa7a6SAndroid Build Coastguard Worker    )
40*523fa7a6SAndroid Build Coastguard Worker
41*523fa7a6SAndroid Build Coastguard Worker    runtime.python_library(
42*523fa7a6SAndroid Build Coastguard Worker        name = "export_program_lib",
43*523fa7a6SAndroid Build Coastguard Worker        srcs = ["export_program.py"],
44*523fa7a6SAndroid Build Coastguard Worker        deps = [
45*523fa7a6SAndroid Build Coastguard Worker            "//caffe2:torch",
46*523fa7a6SAndroid Build Coastguard Worker            "//executorch/test/end2end:exported_module",
47*523fa7a6SAndroid Build Coastguard Worker        ],
48*523fa7a6SAndroid Build Coastguard Worker        visibility = [],  # Private
49*523fa7a6SAndroid Build Coastguard Worker    )
50*523fa7a6SAndroid Build Coastguard Worker
51*523fa7a6SAndroid Build Coastguard Worker    runtime.python_binary(
52*523fa7a6SAndroid Build Coastguard Worker        name = "export_program",
53*523fa7a6SAndroid Build Coastguard Worker        main_module = "executorch.test.models.export_program",
54*523fa7a6SAndroid Build Coastguard Worker        deps = [
55*523fa7a6SAndroid Build Coastguard Worker            ":export_program_lib",
56*523fa7a6SAndroid Build Coastguard Worker        ],
57*523fa7a6SAndroid Build Coastguard Worker        visibility = [],  # Private
58*523fa7a6SAndroid Build Coastguard Worker    )
59*523fa7a6SAndroid Build Coastguard Worker
60*523fa7a6SAndroid Build Coastguard Worker    # Class names of nn.Modules for :exported_programs to export.
61*523fa7a6SAndroid Build Coastguard Worker    MODULES_TO_EXPORT = [
62*523fa7a6SAndroid Build Coastguard Worker        "ModuleAdd",
63*523fa7a6SAndroid Build Coastguard Worker        "ModuleAddHalf",
64*523fa7a6SAndroid Build Coastguard Worker        "ModuleBasic",
65*523fa7a6SAndroid Build Coastguard Worker        "ModuleLinear",
66*523fa7a6SAndroid Build Coastguard Worker        "ModuleMultipleEntry",
67*523fa7a6SAndroid Build Coastguard Worker        "ModuleIndex",
68*523fa7a6SAndroid Build Coastguard Worker        "ModuleDynamicCatUnallocatedIO",
69*523fa7a6SAndroid Build Coastguard Worker        "ModuleSimpleTrain",
70*523fa7a6SAndroid Build Coastguard Worker    ]
71*523fa7a6SAndroid Build Coastguard Worker
72*523fa7a6SAndroid Build Coastguard Worker    # Generates Executorch .pte program files for various modules at build time.
73*523fa7a6SAndroid Build Coastguard Worker    # To use one, depend on a target like ":exported_programs[ModuleAdd.pte]".
74*523fa7a6SAndroid Build Coastguard Worker    runtime.genrule(
75*523fa7a6SAndroid Build Coastguard Worker        name = "exported_programs",
76*523fa7a6SAndroid Build Coastguard Worker        cmd = "$(exe :export_program) --modules " + ",".join(MODULES_TO_EXPORT) + " --outdir $OUT",
77*523fa7a6SAndroid Build Coastguard Worker        outs = {
78*523fa7a6SAndroid Build Coastguard Worker            fname + seg_suffix + ".pte": [fname + seg_suffix + ".pte"]
79*523fa7a6SAndroid Build Coastguard Worker            for fname in MODULES_TO_EXPORT
80*523fa7a6SAndroid Build Coastguard Worker            for seg_suffix in ["", "-no-constant-segment"]
81*523fa7a6SAndroid Build Coastguard Worker        },
82*523fa7a6SAndroid Build Coastguard Worker        default_outs = ["."],
83*523fa7a6SAndroid Build Coastguard Worker        visibility = [
84*523fa7a6SAndroid Build Coastguard Worker            "//executorch/...",
85*523fa7a6SAndroid Build Coastguard Worker            # This genrule can't run in xplat since it uses EXIR, so make its
86*523fa7a6SAndroid Build Coastguard Worker            # output visible to xplat tests. This is an exceptional case, and
87*523fa7a6SAndroid Build Coastguard Worker            # typically shouldn't be done.
88*523fa7a6SAndroid Build Coastguard Worker            "fbsource//xplat/executorch/...",
89*523fa7a6SAndroid Build Coastguard Worker        ],
90*523fa7a6SAndroid Build Coastguard Worker        # Allow the xplat entry in the visibility list. This is an exceptional
91*523fa7a6SAndroid Build Coastguard Worker        # case, and typically shouldn't be done.
92*523fa7a6SAndroid Build Coastguard Worker        _is_external_target = True,
93*523fa7a6SAndroid Build Coastguard Worker    )
94*523fa7a6SAndroid Build Coastguard Worker
95*523fa7a6SAndroid Build Coastguard Worker    runtime.python_library(
96*523fa7a6SAndroid Build Coastguard Worker        name = "export_delegated_program_lib",
97*523fa7a6SAndroid Build Coastguard Worker        srcs = ["export_delegated_program.py"],
98*523fa7a6SAndroid Build Coastguard Worker        deps = [
99*523fa7a6SAndroid Build Coastguard Worker            "//caffe2:torch",
100*523fa7a6SAndroid Build Coastguard Worker            "//executorch/exir/backend:backend_api",
101*523fa7a6SAndroid Build Coastguard Worker            "//executorch/exir/backend/test:backend_with_compiler_demo",
102*523fa7a6SAndroid Build Coastguard Worker            "//executorch/exir:lib",
103*523fa7a6SAndroid Build Coastguard Worker        ],
104*523fa7a6SAndroid Build Coastguard Worker        visibility = [],  # Private
105*523fa7a6SAndroid Build Coastguard Worker    )
106*523fa7a6SAndroid Build Coastguard Worker
107*523fa7a6SAndroid Build Coastguard Worker    runtime.python_binary(
108*523fa7a6SAndroid Build Coastguard Worker        name = "export_delegated_program",
109*523fa7a6SAndroid Build Coastguard Worker        main_module = "executorch.test.models.export_delegated_program",
110*523fa7a6SAndroid Build Coastguard Worker        # Use the https://www.internalfb.com/intern/wiki/XAR/ format so that
111*523fa7a6SAndroid Build Coastguard Worker        # python files in the archive have predictable names/paths even in opt
112*523fa7a6SAndroid Build Coastguard Worker        # mode. Without this `par_style` override, torch dynamo fails to skip
113*523fa7a6SAndroid Build Coastguard Worker        # the tracing of files under the `caffe2/torch/_dynamo` directory; the
114*523fa7a6SAndroid Build Coastguard Worker        # skips are based on the paths in the `__file__` strings at runtime, but
115*523fa7a6SAndroid Build Coastguard Worker        # normal PAR mangles them in an incompatible way in opt mode. See
116*523fa7a6SAndroid Build Coastguard Worker        # T151983912 for more background.
117*523fa7a6SAndroid Build Coastguard Worker        par_style = "xar",
118*523fa7a6SAndroid Build Coastguard Worker        deps = [
119*523fa7a6SAndroid Build Coastguard Worker            ":export_delegated_program_lib",
120*523fa7a6SAndroid Build Coastguard Worker        ],
121*523fa7a6SAndroid Build Coastguard Worker        visibility = [],  # Private
122*523fa7a6SAndroid Build Coastguard Worker    )
123*523fa7a6SAndroid Build Coastguard Worker
124*523fa7a6SAndroid Build Coastguard Worker    # Class names of nn.Modules for :exported_delegated_programs to export.
125*523fa7a6SAndroid Build Coastguard Worker    DELEGATED_MODULES_TO_EXPORT = [
126*523fa7a6SAndroid Build Coastguard Worker        "ModuleAddMul",
127*523fa7a6SAndroid Build Coastguard Worker    ]
128*523fa7a6SAndroid Build Coastguard Worker
129*523fa7a6SAndroid Build Coastguard Worker    # Name of the backend to use when exporting delegated programs.
130*523fa7a6SAndroid Build Coastguard Worker    BACKEND_ID = "StubBackend"
131*523fa7a6SAndroid Build Coastguard Worker
132*523fa7a6SAndroid Build Coastguard Worker    # Generates Executorch .pte program files for various modules at build time.
133*523fa7a6SAndroid Build Coastguard Worker    # To use one, depend on a target like
134*523fa7a6SAndroid Build Coastguard Worker    # ":exported_delegated_programs[ModuleAdd.pte]" or
135*523fa7a6SAndroid Build Coastguard Worker    # ":exported_delegated_programs[ModuleAdd-nosegments.pte]" (which does not
136*523fa7a6SAndroid Build Coastguard Worker    # extract the delegate data blobs into segments).
137*523fa7a6SAndroid Build Coastguard Worker    runtime.genrule(
138*523fa7a6SAndroid Build Coastguard Worker        name = "exported_delegated_programs",
139*523fa7a6SAndroid Build Coastguard Worker        cmd = "$(exe :export_delegated_program)" +
140*523fa7a6SAndroid Build Coastguard Worker              " --modules " + ",".join(DELEGATED_MODULES_TO_EXPORT) +
141*523fa7a6SAndroid Build Coastguard Worker              " --backend_id " + BACKEND_ID +
142*523fa7a6SAndroid Build Coastguard Worker              " --outdir $OUT",
143*523fa7a6SAndroid Build Coastguard Worker        outs = {
144*523fa7a6SAndroid Build Coastguard Worker            fname + seg_suffix + da_suffix + ".pte": [fname + seg_suffix + da_suffix + ".pte"]
145*523fa7a6SAndroid Build Coastguard Worker            for fname in DELEGATED_MODULES_TO_EXPORT
146*523fa7a6SAndroid Build Coastguard Worker            for seg_suffix in ["", "-nosegments"]
147*523fa7a6SAndroid Build Coastguard Worker            # "da" = delegate alignment
148*523fa7a6SAndroid Build Coastguard Worker            for da_suffix in ["", "-da1024"]
149*523fa7a6SAndroid Build Coastguard Worker        },
150*523fa7a6SAndroid Build Coastguard Worker        default_outs = ["."],
151*523fa7a6SAndroid Build Coastguard Worker        visibility = [
152*523fa7a6SAndroid Build Coastguard Worker            "//executorch/runtime/executor/test/...",
153*523fa7a6SAndroid Build Coastguard Worker            "//executorch/test/...",
154*523fa7a6SAndroid Build Coastguard Worker        ],
155*523fa7a6SAndroid Build Coastguard Worker    )
156