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