|
| 1 | +load("@fbsource//xplat/executorch/build:runtime_wrapper.bzl", "runtime") |
| 2 | + |
| 3 | +def prim_ops_registry_selective(name, selected_prim_ops_header_target, aten_suffix="", **kwargs): |
| 4 | + """ |
| 5 | + Create a selective prim ops registry target. |
| 6 | +
|
| 7 | + Args: |
| 8 | + name: Name of the target to create |
| 9 | + selected_prim_ops_header_target: Target that generates selected_prim_ops.h |
| 10 | + aten_suffix: Suffix for aten mode (e.g. "_aten") |
| 11 | + **kwargs: Additional arguments passed to runtime.cxx_library |
| 12 | + """ |
| 13 | + |
| 14 | + target = "//executorch/kernels/prim_ops:prim_ops_sources" |
| 15 | + header_target = "//executorch/kernels/prim_ops:selective_build_prim_ops.h" |
| 16 | + source_name = "register_prim_ops.cpp" |
| 17 | + header_name = "selective_build_prim_ops.h" |
| 18 | + genrule_dep_name = name + "_register_prim_ops_srcs_copy" |
| 19 | + runtime.genrule( |
| 20 | + name = genrule_dep_name, |
| 21 | + cmd = "cp -f $(location {})/{} $OUT/{} && cp -f $(location {})/{} $OUT/{} && cp -f $(location {selected_prim_ops_header_target})/selected_prim_ops.h $OUT/selected_prim_ops.h".format( |
| 22 | + target, source_name, source_name, |
| 23 | + header_target, header_name, header_name, |
| 24 | + selected_prim_ops_header_target=selected_prim_ops_header_target |
| 25 | + ), |
| 26 | + outs = { |
| 27 | + source_name: [source_name], |
| 28 | + header_name: [header_name], |
| 29 | + "selected_prim_ops.h": ["selected_prim_ops.h"] |
| 30 | + }, |
| 31 | + default_outs = ["."], |
| 32 | + ) |
| 33 | + runtime.cxx_library( |
| 34 | + name = name, |
| 35 | + srcs = [":" + genrule_dep_name + "[register_prim_ops.cpp]"], |
| 36 | + exported_headers = { |
| 37 | + "selective_build_prim_ops.h": ":" + genrule_dep_name + "[selective_build_prim_ops.h]", |
| 38 | + "selected_prim_ops.h": ":" + genrule_dep_name + "[selected_prim_ops.h]" |
| 39 | + }, |
| 40 | + visibility = [ |
| 41 | + "//executorch/...", |
| 42 | + "@EXECUTORCH_CLIENTS", |
| 43 | + ], |
| 44 | + # @lint-ignore BUCKLINT link_whole, need this to register prim ops. |
| 45 | + link_whole = True, |
| 46 | + # prim ops are registered through a global table so the ctor needs to be allowed |
| 47 | + compiler_flags = select({ |
| 48 | + "DEFAULT": ["-Wno-global-constructors"], |
| 49 | + "ovr_config//os:windows": [], |
| 50 | + }) + ["-DET_PRIM_OPS_SELECTIVE_BUILD"], |
| 51 | + deps = [ |
| 52 | + "//executorch/kernels/prim_ops:et_copy_index" + aten_suffix, |
| 53 | + "//executorch/kernels/prim_ops:et_view" + aten_suffix, |
| 54 | + "//executorch/runtime/core:evalue" + aten_suffix, |
| 55 | + "//executorch/runtime/kernel:operator_registry" + aten_suffix, |
| 56 | + "//executorch/runtime/kernel:kernel_includes" + aten_suffix, |
| 57 | + ], |
| 58 | + **kwargs |
| 59 | + ) |
0 commit comments