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