blob: 173ab63fe444dfa77d19b5cd10ba287d2ec11ebb [file] [edit]
load("@fbsource//xplat/executorch/build:runtime_wrapper.bzl", "get_oss_build_kwargs", "is_xplat", "runtime")
load("@fbsource//xplat/executorch/codegen:codegen.bzl", "et_operator_library", "executorch_generated_lib")
def define_common_targets():
"""Defines targets that should be shared between fbcode and xplat.
The directory containing this targets.bzl file should also contain both
TARGETS and BUCK files that call this function.
"""
# Select all ops: register all the ops in portable/functions.yaml
et_operator_library(
name = "select_all_ops",
include_all_operators = True,
)
executorch_generated_lib(
name = "select_all_lib",
functions_yaml_target = "//executorch/kernels/portable:functions.yaml",
kernel_deps = [
"//executorch/kernels/portable:operators",
],
deps = [
":select_all_ops",
],
)
# Select a list of operators: defined in `ops`
et_operator_library(
name = "select_ops_in_list",
ops = [
"aten::add.out",
"aten::mm.out",
],
)
executorch_generated_lib(
name = "select_ops_in_list_lib",
functions_yaml_target = "//executorch/kernels/portable:functions.yaml",
kernel_deps = [
"//executorch/kernels/portable:operators",
],
deps = [
":select_ops_in_list",
],
)
# Select a dictionary of ops with kernel metadata
et_operator_library(
name = "select_ops_in_dict",
ops_dict = {
"aten::add.out": ["v1/3;0,1", "v1/6;0,1"], # int, float
"aten::mm.out": [], # all dtypes
},
)
executorch_generated_lib(
name = "select_ops_in_dict_lib",
functions_yaml_target = "//executorch/kernels/portable:functions.yaml",
kernel_deps = [
"//executorch/kernels/portable:operators",
],
deps = [
":select_ops_in_dict",
],
dtype_selective_build = True,
visibility = ["//executorch/..."],
)
# Select all ops from a yaml file
et_operator_library(
name = "select_ops_from_yaml",
ops_schema_yaml_target = "//executorch/examples/portable/custom_ops:custom_ops.yaml",
)
executorch_generated_lib(
name = "select_ops_from_yaml_lib",
custom_ops_yaml_target = "//executorch/examples/portable/custom_ops:custom_ops.yaml",
kernel_deps = [
"//executorch/examples/portable/custom_ops:custom_ops_1",
"//executorch/examples/portable/custom_ops:custom_ops_2",
],
deps = [
":select_ops_from_yaml",
],
)
# Select all ops from a given model
# TODO(larryliu0820): Add this
if not runtime.is_oss and not is_xplat():
runtime.genrule(
name = "add_mul_model",
outs = {"add_mul": ["add_mul.pte"]},
cmd = "$(exe fbcode//executorch/examples/portable/scripts:export) --model_name add_mul --output_dir $OUT",
macros_only = False,
visibility = ["//executorch/..."],
)
et_operator_library(
name = "select_ops_from_model",
model = ":add_mul_model[add_mul]",
)
executorch_generated_lib(
name = "select_ops_from_model_lib",
functions_yaml_target = "//executorch/kernels/portable:functions.yaml",
kernel_deps = ["//executorch/kernels/portable:operators"],
deps = [":select_ops_from_model"],
visibility = ["//executorch/kernels/..."],
)
# ~~~ Test binary for selective build ~~~
select_ops = native.read_config("executorch", "select_ops", None)
lib = []
if select_ops == "all":
lib.append(":select_all_lib")
elif select_ops == "list":
lib.append(":select_ops_in_list_lib")
elif select_ops == "dict":
lib.append(":select_ops_in_dict_lib")
elif select_ops == "yaml":
lib.append(":select_ops_from_yaml_lib")
elif select_ops == "model":
lib.append(":select_ops_from_model_lib")
runtime.cxx_binary(
name = "selective_build_test",
srcs = [],
deps = [
"//executorch/examples/portable/executor_runner:executor_runner_lib",
] + lib,
define_static_target = True,
**get_oss_build_kwargs()
)