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