James Kuszmaul | f5eb468 | 2023-09-22 17:16:59 -0700 | [diff] [blame] | 1 | load("@aspect_bazel_lib//lib:run_binary.bzl", "run_binary") |
Austin Schuh | 8f99c82 | 2024-05-05 22:43:40 -0700 | [diff] [blame] | 2 | load("@com_github_google_flatbuffers//:build_defs.bzl", "flatbuffer_cc_library") |
James Kuszmaul | ac0912d | 2024-05-21 15:56:59 -0700 | [diff] [blame] | 3 | load("//tools/build_rules:clean_dep.bzl", "aos_repo_name", "clean_dep") |
James Kuszmaul | f5eb468 | 2023-09-22 17:16:59 -0700 | [diff] [blame] | 4 | |
James Kuszmaul | 9a2d5f0 | 2023-12-14 11:38:35 -0800 | [diff] [blame] | 5 | def static_flatbuffer(name, visibility = None, deps = [], srcs = [], **kwargs): |
James Kuszmaul | f5eb468 | 2023-09-22 17:16:59 -0700 | [diff] [blame] | 6 | """Generates the code for the static C++ flatbuffer API for the specified fbs file. |
| 7 | |
| 8 | Generates a cc_library of name name that can be depended on by C++ code and other |
| 9 | static_flatbuffer rules. |
| 10 | |
| 11 | The cc_library will consist of a single file suffixed with _static.h and prefixed |
| 12 | with the name of the flatbuffer file itself (i.e., if you have a src of foo.fbs, then |
| 13 | the resulting header will be foo_static.h). |
| 14 | |
| 15 | Args: |
| 16 | name: Target name. |
James Kuszmaul | 9a2d5f0 | 2023-12-14 11:38:35 -0800 | [diff] [blame] | 17 | srcs: List of fbs files to codegen. |
James Kuszmaul | f5eb468 | 2023-09-22 17:16:59 -0700 | [diff] [blame] | 18 | visibility: Desired rule visibility. |
| 19 | deps: List of static_flatbuffer dependencies of this rule. |
| 20 | """ |
| 21 | fbs_suffix = "_fbs" |
James Kuszmaul | 9a2d5f0 | 2023-12-14 11:38:35 -0800 | [diff] [blame] | 22 | |
James Kuszmaul | f5eb468 | 2023-09-22 17:16:59 -0700 | [diff] [blame] | 23 | flatbuffer_cc_library( |
| 24 | name = name + fbs_suffix, |
James Kuszmaul | 9a2d5f0 | 2023-12-14 11:38:35 -0800 | [diff] [blame] | 25 | srcs = srcs, |
James Kuszmaul | f5eb468 | 2023-09-22 17:16:59 -0700 | [diff] [blame] | 26 | deps = [dep + fbs_suffix for dep in deps], |
| 27 | gen_reflections = True, |
| 28 | visibility = visibility, |
| 29 | **kwargs |
| 30 | ) |
| 31 | |
| 32 | # Until we make this a proper rule with providers or the such, we just manage headers |
| 33 | # by having a strong convention where the header will be a function of the fbs name |
| 34 | # rather than a function of the rule name. |
James Kuszmaul | 9a2d5f0 | 2023-12-14 11:38:35 -0800 | [diff] [blame] | 35 | header_names = [file.removesuffix(".fbs") + "_static.h" for file in srcs] |
James Kuszmaul | f5eb468 | 2023-09-22 17:16:59 -0700 | [diff] [blame] | 36 | reflection_out = name + fbs_suffix + "_reflection_out" |
| 37 | |
| 38 | run_binary( |
| 39 | name = name + "_gen", |
James Kuszmaul | ac0912d | 2024-05-21 15:56:59 -0700 | [diff] [blame] | 40 | tool = clean_dep("//aos/flatbuffers:generate_wrapper"), |
James Kuszmaul | f5eb468 | 2023-09-22 17:16:59 -0700 | [diff] [blame] | 41 | srcs = [reflection_out], |
James Kuszmaul | 9a2d5f0 | 2023-12-14 11:38:35 -0800 | [diff] [blame] | 42 | outs = header_names, |
| 43 | env = { |
James Kuszmaul | ac0912d | 2024-05-21 15:56:59 -0700 | [diff] [blame] | 44 | "AOS_REPO_NAME": aos_repo_name(), |
James Kuszmaul | 9a2d5f0 | 2023-12-14 11:38:35 -0800 | [diff] [blame] | 45 | "BFBS_FILES": "$(execpaths %s)" % (reflection_out,), |
| 46 | "BASE_FILES": " ".join(srcs), |
| 47 | "OUT_FILES": " ".join(["$(execpath %s)" % (name,) for name in header_names]), |
| 48 | }, |
James Kuszmaul | f5eb468 | 2023-09-22 17:16:59 -0700 | [diff] [blame] | 49 | ) |
| 50 | native.cc_library( |
| 51 | name = name, |
James Kuszmaul | 9a2d5f0 | 2023-12-14 11:38:35 -0800 | [diff] [blame] | 52 | hdrs = header_names, |
James Kuszmaul | ac0912d | 2024-05-21 15:56:59 -0700 | [diff] [blame] | 53 | deps = [clean_dep("//aos/flatbuffers:static_table"), clean_dep("//aos/flatbuffers:static_vector"), name + fbs_suffix] + deps, |
James Kuszmaul | f5eb468 | 2023-09-22 17:16:59 -0700 | [diff] [blame] | 54 | visibility = visibility, |
| 55 | ) |
| 56 | native.alias( |
| 57 | name = name + "_reflection_out", |
| 58 | actual = name + fbs_suffix + "_reflection_out", |
James Kuszmaul | 9068b08 | 2023-12-08 12:25:57 -0800 | [diff] [blame] | 59 | visibility = visibility, |
James Kuszmaul | f5eb468 | 2023-09-22 17:16:59 -0700 | [diff] [blame] | 60 | ) |