xref: /aosp_15_r20/external/executorch/backends/qualcomm/targets.bzl (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
1load(
2    "@fbsource//tools/build_defs:default_platform_defs.bzl",
3    "ANDROID",
4)
5load("@fbsource//xplat/executorch/build:runtime_wrapper.bzl", "runtime")
6load("@fbsource//xplat/executorch/backends/qualcomm/qnn_version.bzl", "get_qnn_library_verision")
7
8# Construct the input and output file names. All input and output files rely on scalar_type file.
9SCHEMA_NAME = "qc_compiler_spec"
10
11INPUT_SCHEMA = "serialization/" + SCHEMA_NAME + ".fbs"
12
13OUTPUT_SCHEMA_HEADER = SCHEMA_NAME + "_generated.h"
14
15SCHEMA_GEN_RULE_NAME = "qc_compiler_spec_generated"
16
17SCHEMA_LIRRARY_NAME = SCHEMA_NAME
18
19QC_BINARY_INFO_SCHEMA = "qc_binary_info"
20QC_BINARY_INFO_INPUT_SCHEMA = "serialization/" + QC_BINARY_INFO_SCHEMA + ".fbs"
21QC_BINARY_INFO_SCHEMA_GEN_RULE_NAME = QC_BINARY_INFO_SCHEMA + "_generated"
22QC_BINARY_INFO_OUTPUT_SCHEMA_HEADER = QC_BINARY_INFO_SCHEMA_GEN_RULE_NAME + ".h"
23QC_BINARY_INFO_SCHEMA_LIRRARY_NAME = QC_BINARY_INFO_SCHEMA
24
25def generate_schema_header(rule_name, srcs, headers, default_header):
26    """Generate header file given flatbuffer schema
27    """
28    runtime.genrule(
29        name = rule_name,
30        srcs = srcs,
31        # We're only generating a single file, so it seems like we could use
32        # `out`, but `flatc` takes a directory as a parameter, not a single
33        # file. Use `outs` so that `${OUT}` is expanded as the containing
34        # directory instead of the file itself.
35        outs = {header: [header] for header in headers},
36        default_outs = [default_header],
37        cmd = " ".join([
38            "$(exe {})".format(runtime.external_dep_location("flatc")),
39            "--cpp",
40            "--cpp-std c++11",
41            "--gen-mutable",
42            "--scoped-enums",
43            "-o ${OUT}",
44            "${SRCS}",
45            # Let our infra know that the file was generated.
46            " ".join(["&& echo // @" + "generated >> ${OUT}/" + header for header in headers]),
47        ]),
48        visibility = [],  # Private
49    )
50
51def define_common_targets():
52    """Defines targets that should be shared between fbcode and xplat.
53
54    The directory containing this targets.bzl file should also contain both
55    TARGETS and BUCK files that call this function.
56    """
57
58    generate_schema_header(
59        SCHEMA_GEN_RULE_NAME,
60        [INPUT_SCHEMA],
61        [OUTPUT_SCHEMA_HEADER],
62        OUTPUT_SCHEMA_HEADER,
63    )
64
65    # Header-only library target with the generate executorch program schema header.
66    runtime.cxx_library(
67        name = "schema",
68        srcs = [],
69        visibility = [
70            # Lock this down as tightly as possible to ensure that flatbuffers
71            # are an implementation detail. Ideally this list would only include
72            # //executorch/runtime/executor/...
73            "//executorch/codegen/tools/...",
74            "//executorch/runtime/executor/...",
75            "//executorch/backends/qualcomm/...",
76            "//executorch/backends/qualcomm/runtime/...",
77        ],
78        exported_headers = {
79            OUTPUT_SCHEMA_HEADER: ":{}[{}]".format(SCHEMA_GEN_RULE_NAME, OUTPUT_SCHEMA_HEADER),
80        },
81        exported_external_deps = ["flatbuffers-api"],
82        define_static_target = True,
83        platforms = [ANDROID],
84    )
85
86    generate_schema_header(
87        QC_BINARY_INFO_SCHEMA_GEN_RULE_NAME,
88        [QC_BINARY_INFO_INPUT_SCHEMA],
89        [QC_BINARY_INFO_OUTPUT_SCHEMA_HEADER],
90        QC_BINARY_INFO_OUTPUT_SCHEMA_HEADER,
91    )
92
93    runtime.cxx_library(
94        name = "qc_binary_info_schema",
95        srcs = [],
96        visibility = [
97            # Lock this down as tightly as possible to ensure that flatbuffers
98            # are an implementation detail. Ideally this list would only include
99            # //executorch/runtime/executor/...
100            "//executorch/codegen/tools/...",
101            "//executorch/runtime/executor/...",
102            "//executorch/backends/qualcomm/...",
103            "//executorch/backends/qualcomm/runtime/...",
104        ],
105        exported_headers = {
106             QC_BINARY_INFO_OUTPUT_SCHEMA_HEADER: ":{}[{}]".format( QC_BINARY_INFO_SCHEMA_GEN_RULE_NAME,  QC_BINARY_INFO_OUTPUT_SCHEMA_HEADER),
107        },
108        exported_external_deps = ["flatbuffers-api"],
109        define_static_target = True,
110        platforms = [ANDROID],
111    )
112
113    runtime.cxx_library(
114        name = "qnn_executorch_backend",
115        srcs = [],
116        headers = [],
117        define_static_target = True,
118        visibility = ["@EXECUTORCH_CLIENTS"],
119        deps = [
120            "fbsource//third-party/qualcomm/qnn/qnn-{0}:api".format(get_qnn_library_verision()),
121            "//executorch/runtime/backend:interface",
122            "//executorch/runtime/core:core",
123            "//executorch/backends/qualcomm/runtime:runtime",
124        ],
125        exported_deps = [
126            ":schema",
127        ],
128    )
129