xref: /aosp_15_r20/external/federated-compute/fcp/tracing/build_defs.bzl (revision 14675a029014e728ec732f129a32e299b2da0601)
1*14675a02SAndroid Build Coastguard Worker"""Build rule for tracing schemas to be used with fcp/tracing library.
2*14675a02SAndroid Build Coastguard Worker"""
3*14675a02SAndroid Build Coastguard Worker
4*14675a02SAndroid Build Coastguard Workerload("//fcp:config.bzl", "FCP_COPTS")
5*14675a02SAndroid Build Coastguard Workerload("@flatbuffers//:build_defs.bzl", "flatbuffer_cc_library")
6*14675a02SAndroid Build Coastguard Worker
7*14675a02SAndroid Build Coastguard Workerdef tracing_schema_cc_library(
8*14675a02SAndroid Build Coastguard Worker        name,
9*14675a02SAndroid Build Coastguard Worker        srcs,
10*14675a02SAndroid Build Coastguard Worker        includes = [],
11*14675a02SAndroid Build Coastguard Worker        visibility = None,
12*14675a02SAndroid Build Coastguard Worker        testonly = None):
13*14675a02SAndroid Build Coastguard Worker    """Rule to generate tracing-schema C++ files from .fbs file.
14*14675a02SAndroid Build Coastguard Worker
15*14675a02SAndroid Build Coastguard Worker    This macro produces the following output:
16*14675a02SAndroid Build Coastguard Worker
17*14675a02SAndroid Build Coastguard Worker    <name>: a cc_library including C++ code generated from .fbs file.
18*14675a02SAndroid Build Coastguard Worker
19*14675a02SAndroid Build Coastguard Worker    <srcs>.h: header file to be included by the code using the tracing schema.
20*14675a02SAndroid Build Coastguard Worker
21*14675a02SAndroid Build Coastguard Worker    <srcs>.bfbs: binary representation of the tracing schema.
22*14675a02SAndroid Build Coastguard Worker
23*14675a02SAndroid Build Coastguard Worker    <srcs>_generated.h: a header file produced by flatc. Note: this file is
24*14675a02SAndroid Build Coastguard Worker      already included by <srcs>.h, not to be consumed directly.
25*14675a02SAndroid Build Coastguard Worker
26*14675a02SAndroid Build Coastguard Worker    Args:
27*14675a02SAndroid Build Coastguard Worker      name: The label for the library, typically "tracing_schema".
28*14675a02SAndroid Build Coastguard Worker      srcs: Single .fbs source file, typically [ "tracing_schema.fbs" ].
29*14675a02SAndroid Build Coastguard Worker      includes: optional list of .fbs includes
30*14675a02SAndroid Build Coastguard Worker      visibility: standard visibility
31*14675a02SAndroid Build Coastguard Worker      testonly: standard testonly
32*14675a02SAndroid Build Coastguard Worker    """
33*14675a02SAndroid Build Coastguard Worker
34*14675a02SAndroid Build Coastguard Worker    # Validate only 1 src file is specified in the build rule.
35*14675a02SAndroid Build Coastguard Worker    if (len(srcs) != 1):
36*14675a02SAndroid Build Coastguard Worker        fail("Only 1 .fbs file can be specified per build rule.")
37*14675a02SAndroid Build Coastguard Worker
38*14675a02SAndroid Build Coastguard Worker    # Rule to invoke flatc on the fbs file (produces <name>_generated.h):
39*14675a02SAndroid Build Coastguard Worker    flatbuffer_cc_library(
40*14675a02SAndroid Build Coastguard Worker        name = name + "_fb",
41*14675a02SAndroid Build Coastguard Worker        srcs = srcs,
42*14675a02SAndroid Build Coastguard Worker        includes =
43*14675a02SAndroid Build Coastguard Worker            includes + ["//fcp/tracing:tracing_schema_common_fbs"],
44*14675a02SAndroid Build Coastguard Worker        flatc_args = [
45*14675a02SAndroid Build Coastguard Worker            "--gen-object-api",
46*14675a02SAndroid Build Coastguard Worker            "--gen-generated",
47*14675a02SAndroid Build Coastguard Worker            "--reflect-names",
48*14675a02SAndroid Build Coastguard Worker            "--bfbs-comments",
49*14675a02SAndroid Build Coastguard Worker            "--keep-prefix",
50*14675a02SAndroid Build Coastguard Worker        ],
51*14675a02SAndroid Build Coastguard Worker        gen_reflections = True,
52*14675a02SAndroid Build Coastguard Worker        include_paths = [".", "third_party/fcp/tracing"],
53*14675a02SAndroid Build Coastguard Worker    )
54*14675a02SAndroid Build Coastguard Worker
55*14675a02SAndroid Build Coastguard Worker    # Get generated flatbuff files from flatbuffer_cc_library rule.
56*14675a02SAndroid Build Coastguard Worker    src_bfbs = srcs[0].replace(".fbs", ".bfbs")
57*14675a02SAndroid Build Coastguard Worker    src_generated_h = srcs[0].replace(".fbs", "_generated.h")
58*14675a02SAndroid Build Coastguard Worker    src_generated_h_rootpath = "$(rootpath " + src_generated_h + ") "
59*14675a02SAndroid Build Coastguard Worker    src_bfbs_rootpath = "$(location " + src_bfbs + ") "
60*14675a02SAndroid Build Coastguard Worker    src_fbs_rootpath = "$(rootpath " + srcs[0] + ")"
61*14675a02SAndroid Build Coastguard Worker    out_header = srcs[0].replace(".fbs", ".h")
62*14675a02SAndroid Build Coastguard Worker
63*14675a02SAndroid Build Coastguard Worker    # Generating <name>.h with additional traits
64*14675a02SAndroid Build Coastguard Worker    native.genrule(
65*14675a02SAndroid Build Coastguard Worker        name = name + "_h",
66*14675a02SAndroid Build Coastguard Worker        srcs = [
67*14675a02SAndroid Build Coastguard Worker            src_bfbs,
68*14675a02SAndroid Build Coastguard Worker            src_generated_h,
69*14675a02SAndroid Build Coastguard Worker            srcs[0],
70*14675a02SAndroid Build Coastguard Worker        ],
71*14675a02SAndroid Build Coastguard Worker        outs = [out_header],
72*14675a02SAndroid Build Coastguard Worker        cmd = ("$(location //fcp/tracing/tools:tracing_traits_generator) " +
73*14675a02SAndroid Build Coastguard Worker               src_generated_h_rootpath + src_bfbs_rootpath + src_fbs_rootpath + "> $@"),
74*14675a02SAndroid Build Coastguard Worker        tools = [
75*14675a02SAndroid Build Coastguard Worker            "//fcp/tracing/tools:tracing_traits_generator",
76*14675a02SAndroid Build Coastguard Worker        ],
77*14675a02SAndroid Build Coastguard Worker    )
78*14675a02SAndroid Build Coastguard Worker
79*14675a02SAndroid Build Coastguard Worker    # Packaging everything into cc_library:
80*14675a02SAndroid Build Coastguard Worker    native.cc_library(
81*14675a02SAndroid Build Coastguard Worker        name = name,
82*14675a02SAndroid Build Coastguard Worker        hdrs = [
83*14675a02SAndroid Build Coastguard Worker            ":" + out_header,
84*14675a02SAndroid Build Coastguard Worker            "//fcp/tracing:tracing_schema_common_generated.h",
85*14675a02SAndroid Build Coastguard Worker            "//fcp/tracing:tracing_severity.h",
86*14675a02SAndroid Build Coastguard Worker            "//fcp/tracing:tracing_tag.h",
87*14675a02SAndroid Build Coastguard Worker            "//fcp/tracing:tracing_traits.h",
88*14675a02SAndroid Build Coastguard Worker        ],
89*14675a02SAndroid Build Coastguard Worker        deps = [
90*14675a02SAndroid Build Coastguard Worker            ":" + name + "_fb",
91*14675a02SAndroid Build Coastguard Worker            "@com_google_absl//absl/base:core_headers",
92*14675a02SAndroid Build Coastguard Worker            "@com_google_absl//absl/strings",
93*14675a02SAndroid Build Coastguard Worker            "@com_google_absl//absl/memory",
94*14675a02SAndroid Build Coastguard Worker            "@flatbuffers//:flatbuffers",
95*14675a02SAndroid Build Coastguard Worker            "//fcp/base",
96*14675a02SAndroid Build Coastguard Worker        ],
97*14675a02SAndroid Build Coastguard Worker        data = [
98*14675a02SAndroid Build Coastguard Worker            srcs[0],
99*14675a02SAndroid Build Coastguard Worker            "//fcp/tracing:tracing_schema_common.fbs",
100*14675a02SAndroid Build Coastguard Worker        ],
101*14675a02SAndroid Build Coastguard Worker        copts = FCP_COPTS,
102*14675a02SAndroid Build Coastguard Worker        visibility = visibility,
103*14675a02SAndroid Build Coastguard Worker        testonly = testonly,
104*14675a02SAndroid Build Coastguard Worker    )
105