xref: /aosp_15_r20/external/executorch/schema/targets.bzl (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
1*523fa7a6SAndroid Build Coastguard Workerload("@fbsource//xplat/executorch/build:runtime_wrapper.bzl", "runtime")
2*523fa7a6SAndroid Build Coastguard Worker
3*523fa7a6SAndroid Build Coastguard Worker# Construct the input and output file names. All input and output files rely on scalar_type file.
4*523fa7a6SAndroid Build Coastguard WorkerPROGRAM_STEM = "program"
5*523fa7a6SAndroid Build Coastguard WorkerSCALAR_TYPE_STEM = "scalar_type"
6*523fa7a6SAndroid Build Coastguard Worker
7*523fa7a6SAndroid Build Coastguard WorkerINPUT_PROGRAM = PROGRAM_STEM + ".fbs"
8*523fa7a6SAndroid Build Coastguard WorkerINPUT_SCALAR_TYPE = SCALAR_TYPE_STEM + ".fbs"
9*523fa7a6SAndroid Build Coastguard Worker
10*523fa7a6SAndroid Build Coastguard WorkerOUTPUT_PROGRAM_HEADER = PROGRAM_STEM + "_generated.h"
11*523fa7a6SAndroid Build Coastguard WorkerOUTPUT_SCALAR_TYPE_HEADER = SCALAR_TYPE_STEM + "_generated.h"
12*523fa7a6SAndroid Build Coastguard Worker
13*523fa7a6SAndroid Build Coastguard WorkerPROGRAM_GEN_RULE_NAME = "generate_program"
14*523fa7a6SAndroid Build Coastguard Worker
15*523fa7a6SAndroid Build Coastguard WorkerPROGRAM_LIRRARY_NAME = PROGRAM_STEM
16*523fa7a6SAndroid Build Coastguard Worker
17*523fa7a6SAndroid Build Coastguard Workerdef _generate_schema_header(rule_name, srcs, headers, default_header):
18*523fa7a6SAndroid Build Coastguard Worker    """Generate header file given flatbuffer schema
19*523fa7a6SAndroid Build Coastguard Worker    """
20*523fa7a6SAndroid Build Coastguard Worker    runtime.genrule(
21*523fa7a6SAndroid Build Coastguard Worker        name = rule_name,
22*523fa7a6SAndroid Build Coastguard Worker        srcs = srcs,
23*523fa7a6SAndroid Build Coastguard Worker        # We're only generating a single file, so it seems like we could use
24*523fa7a6SAndroid Build Coastguard Worker        # `out`, but `flatc` takes a directory as a parameter, not a single
25*523fa7a6SAndroid Build Coastguard Worker        # file. Use `outs` so that `${OUT}` is expanded as the containing
26*523fa7a6SAndroid Build Coastguard Worker        # directory instead of the file itself.
27*523fa7a6SAndroid Build Coastguard Worker        outs = {header: [header] for header in headers},
28*523fa7a6SAndroid Build Coastguard Worker        default_outs = [default_header],
29*523fa7a6SAndroid Build Coastguard Worker        cmd = " ".join([
30*523fa7a6SAndroid Build Coastguard Worker            "$(exe {})".format(runtime.external_dep_location("flatc")),
31*523fa7a6SAndroid Build Coastguard Worker            "--cpp",
32*523fa7a6SAndroid Build Coastguard Worker            "--cpp-std c++11",
33*523fa7a6SAndroid Build Coastguard Worker            "--gen-mutable",
34*523fa7a6SAndroid Build Coastguard Worker            "--scoped-enums",
35*523fa7a6SAndroid Build Coastguard Worker            "-o ${OUT}",
36*523fa7a6SAndroid Build Coastguard Worker            "${SRCS}",
37*523fa7a6SAndroid Build Coastguard Worker            # Let our infra know that the file was generated.
38*523fa7a6SAndroid Build Coastguard Worker            " ".join(["&& echo // @" + "generated >> ${OUT}/" + header for header in headers]),
39*523fa7a6SAndroid Build Coastguard Worker        ]),
40*523fa7a6SAndroid Build Coastguard Worker        visibility = [],  # Private
41*523fa7a6SAndroid Build Coastguard Worker    )
42*523fa7a6SAndroid Build Coastguard Worker
43*523fa7a6SAndroid Build Coastguard Workerdef define_common_targets():
44*523fa7a6SAndroid Build Coastguard Worker    """Defines targets that should be shared between fbcode and xplat.
45*523fa7a6SAndroid Build Coastguard Worker
46*523fa7a6SAndroid Build Coastguard Worker    The directory containing this targets.bzl file should also contain both
47*523fa7a6SAndroid Build Coastguard Worker    TARGETS and BUCK files that call this function.
48*523fa7a6SAndroid Build Coastguard Worker    """
49*523fa7a6SAndroid Build Coastguard Worker
50*523fa7a6SAndroid Build Coastguard Worker    runtime.export_file(
51*523fa7a6SAndroid Build Coastguard Worker        name = INPUT_PROGRAM,
52*523fa7a6SAndroid Build Coastguard Worker        visibility = [
53*523fa7a6SAndroid Build Coastguard Worker            "//executorch/exir/_serialize/...",
54*523fa7a6SAndroid Build Coastguard Worker        ],
55*523fa7a6SAndroid Build Coastguard Worker    )
56*523fa7a6SAndroid Build Coastguard Worker    runtime.export_file(
57*523fa7a6SAndroid Build Coastguard Worker        name = INPUT_SCALAR_TYPE,
58*523fa7a6SAndroid Build Coastguard Worker        visibility = [
59*523fa7a6SAndroid Build Coastguard Worker            "//executorch/exir/_serialize/...",
60*523fa7a6SAndroid Build Coastguard Worker            "//executorch/devtools/etdump/...",
61*523fa7a6SAndroid Build Coastguard Worker        ],
62*523fa7a6SAndroid Build Coastguard Worker    )
63*523fa7a6SAndroid Build Coastguard Worker
64*523fa7a6SAndroid Build Coastguard Worker    _generate_schema_header(
65*523fa7a6SAndroid Build Coastguard Worker        PROGRAM_GEN_RULE_NAME,
66*523fa7a6SAndroid Build Coastguard Worker        [INPUT_PROGRAM, INPUT_SCALAR_TYPE],
67*523fa7a6SAndroid Build Coastguard Worker        [OUTPUT_PROGRAM_HEADER, OUTPUT_SCALAR_TYPE_HEADER],
68*523fa7a6SAndroid Build Coastguard Worker        OUTPUT_PROGRAM_HEADER,
69*523fa7a6SAndroid Build Coastguard Worker    )
70*523fa7a6SAndroid Build Coastguard Worker
71*523fa7a6SAndroid Build Coastguard Worker    # Header-only library target with the generate executorch program schema header.
72*523fa7a6SAndroid Build Coastguard Worker    runtime.cxx_library(
73*523fa7a6SAndroid Build Coastguard Worker        name = PROGRAM_LIRRARY_NAME,
74*523fa7a6SAndroid Build Coastguard Worker        srcs = [],
75*523fa7a6SAndroid Build Coastguard Worker        visibility = [
76*523fa7a6SAndroid Build Coastguard Worker            # Lock this down as tightly as possible to ensure that flatbuffers
77*523fa7a6SAndroid Build Coastguard Worker            # are an implementation detail. Ideally this list would only include
78*523fa7a6SAndroid Build Coastguard Worker            # //executorch/runtime/executor/...
79*523fa7a6SAndroid Build Coastguard Worker            "//executorch/codegen/tools/...",
80*523fa7a6SAndroid Build Coastguard Worker            "//executorch/runtime/executor/...",
81*523fa7a6SAndroid Build Coastguard Worker        ],
82*523fa7a6SAndroid Build Coastguard Worker        exported_headers = {
83*523fa7a6SAndroid Build Coastguard Worker            OUTPUT_PROGRAM_HEADER: ":{}[{}]".format(PROGRAM_GEN_RULE_NAME, OUTPUT_PROGRAM_HEADER),
84*523fa7a6SAndroid Build Coastguard Worker            OUTPUT_SCALAR_TYPE_HEADER: ":{}[{}]".format(PROGRAM_GEN_RULE_NAME, OUTPUT_SCALAR_TYPE_HEADER),
85*523fa7a6SAndroid Build Coastguard Worker        },
86*523fa7a6SAndroid Build Coastguard Worker        exported_external_deps = ["flatbuffers-api"],
87*523fa7a6SAndroid Build Coastguard Worker    )
88*523fa7a6SAndroid Build Coastguard Worker
89*523fa7a6SAndroid Build Coastguard Worker    runtime.cxx_library(
90*523fa7a6SAndroid Build Coastguard Worker        name = "extended_header",
91*523fa7a6SAndroid Build Coastguard Worker        srcs = ["extended_header.cpp"],
92*523fa7a6SAndroid Build Coastguard Worker        exported_headers = [
93*523fa7a6SAndroid Build Coastguard Worker            "extended_header.h",
94*523fa7a6SAndroid Build Coastguard Worker        ],
95*523fa7a6SAndroid Build Coastguard Worker        visibility = [
96*523fa7a6SAndroid Build Coastguard Worker            "//executorch/runtime/executor/...",
97*523fa7a6SAndroid Build Coastguard Worker            "//executorch/schema/test/...",
98*523fa7a6SAndroid Build Coastguard Worker        ],
99*523fa7a6SAndroid Build Coastguard Worker        exported_deps = [
100*523fa7a6SAndroid Build Coastguard Worker            "//executorch/runtime/core:core",
101*523fa7a6SAndroid Build Coastguard Worker        ],
102*523fa7a6SAndroid Build Coastguard Worker    )
103