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