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