Skip to content

Commit

Permalink
bazel: tests work as expected
Browse files Browse the repository at this point in the history
Now things work as expected and we can generate the required java
libraries
  • Loading branch information
manuelnaranjo committed Sep 2, 2024
1 parent 5ae62ef commit 4602b9f
Show file tree
Hide file tree
Showing 10 changed files with 235 additions and 187 deletions.
2 changes: 1 addition & 1 deletion BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,6 @@ buildifier(

buildifier_test(
name = "buildifier.test",
srcs = ["BUILD"],
srcs = ["BUILD.bazel"],
lint_mode = "warn",
)
52 changes: 47 additions & 5 deletions docs/rules.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions e2e/smoke/.bazelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
build --output_filter=DO_NOT_MATCH_ANYTHING
4 changes: 4 additions & 0 deletions e2e/smoke/BUILD → e2e/smoke/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ flatbuffer_library_public(
name = "monster_fbs_java",
srcs = ["monster.fbs"],
outs = [
# Bazel expects that we have the full list of generated files, the rule
# will output to stderr the generated list of files to stderr. If you
# build with --test_output_filter=DO_NOT_MATCH_ANYTHING then you will
# get the list of files when it fails
"MyGame/Sample/Color.java",
"MyGame/Sample/Equipment.java",
"MyGame/Sample/EquipmentUnion.java",
Expand Down
1 change: 0 additions & 1 deletion e2e/smoke/WORKSPACE.bzlmod
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_jar")

http_jar(
name = "flatbuffers-java",
integrity = "sha256-9bUANKU969qYCsqAO4sGlJ+TpAFjvB22zWlYHTcY41U=",
sha256 = "f5b50034a53debda980aca803b8b06949f93a40163bc1db6cd69581d3718e355",
url = "https://repo1.maven.org/maven2/com/google/flatbuffers/flatbuffers-java/24.3.25/flatbuffers-java-24.3.25.jar",
)
24 changes: 12 additions & 12 deletions flatbuffers/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -32,25 +32,13 @@ bzl_library(
],
)

bzl_library(
name = "defs",
srcs = ["defs.bzl"],
visibility = ["//visibility:public"],
)

bzl_library(
name = "extensions",
srcs = ["extensions.bzl"],
visibility = ["//visibility:public"],
deps = [":repositories"],
)

bzl_library(
name = "toolchain",
srcs = ["toolchain.bzl"],
visibility = ["//visibility:public"],
)

sh_binary(
name = "flatc",
srcs = ["flatc.sh"],
Expand All @@ -60,3 +48,15 @@ sh_binary(
},
visibility = ["//visibility:public"],
)

bzl_library(
name = "defs",
srcs = ["defs.bzl"],
visibility = ["//visibility:public"],
)

bzl_library(
name = "toolchain",
srcs = ["toolchain.bzl"],
visibility = ["//visibility:public"],
)
166 changes: 163 additions & 3 deletions flatbuffers/defs.bzl
Original file line number Diff line number Diff line change
@@ -1,5 +1,165 @@
"Public API re-exports"
# Description:
# BUILD rules for generating flatbuffer files in various languages.
#
# Based on https://github.com/google/flatbuffers/blob/204473cdb58a354506040826b47ef9329dc5c79c/build_defs.bzl

load("//flatbuffers/private:build_defs.bzl", _flatbuffer_library_public = "flatbuffer_library_public")
"""
Rules for building flatbuffers with Bazel.
"""

flatbuffer_library_public = _flatbuffer_library_public
def default_include_paths():
return [
"./",
"$(GENDIR)",
"$(BINDIR)",
]

DEFAULT_FLATC_ARGS = [
"--gen-object-api",
"--gen-compare",
"--no-includes",
"--gen-mutable",
"--reflect-names",
"--cpp-ptr-type flatbuffers::unique_ptr",
]

def flatbuffer_library_public(
name,
srcs = [],
outs = [],
language_flag = None,
out_prefix = "",
includes = [],
include_paths = None,
flatc_args = DEFAULT_FLATC_ARGS,
reflection_name = "",
reflection_visibility = None,
compatible_with = None,
restricted_to = None,
target_compatible_with = None,
output_to_bindir = False,
extra_env = None,
**kwargs):
"""Generates code files for reading/writing the given flatbuffers in the requested language using the public compiler.
This rule creates a filegroup(name) with all generated source files, and
optionally a Fileset([reflection_name]) with all generated reflection
binaries.
Args:
name: Rule name.
srcs: Source .fbs files. Sent in order to the compiler.
outs: Output files from flatc.
language_flag: Target language flag. One of [-c, -j, -js].
out_prefix: Prepend this path to the front of all generated files except on
single source targets. Usually is a directory name.
includes: Optional, list of filegroups of schemas that the srcs depend on.
include_paths: Optional, list of paths the includes files can be found in.
flatc_args: Optional, list of additional arguments to pass to flatc.
reflection_name: Optional, if set this will generate the flatbuffer
reflection binaries for the schemas.
reflection_visibility: The visibility of the generated reflection Fileset.
output_to_bindir: Passed to genrule for output to bin directory.
compatible_with: Optional, The list of environments this rule can be
built for, in addition to default-supported environments.
restricted_to: Optional, The list of environments this rule can be built
for, instead of default-supported environments.
target_compatible_with: Optional, The list of target platform constraints
to use.
output_to_bindir: Passed to genrule for output to bin directory.
extra_env: Optional, must be a string of "VAR1=VAL1 VAR2=VAL2". These get
set as environment variables that "flatc_path" sees.
**kwargs: Passed to the underlying genrule.
"""

if language_flag == None:
fail("language_flag must be set")

reflection_include_paths = include_paths
if include_paths == None:
include_paths = default_include_paths()
include_paths_cmd = ["-I %s" % (s) for s in include_paths]

extra_env = extra_env or ""

# '$(@D)' when given a single source target will give the appropriate
# directory. Appending 'out_prefix' is only necessary when given a build
# target with multiple sources.
output_directory = (
("-o $(@D)/%s" % (out_prefix)) if len(srcs) > 1 else ("-o $(@D)")
)

genrule_cmd = " ".join([
"set -eou pipefail;",
"SRCS=($(SRCS));",
"for f in $${SRCS[@]:0:%s}; do" % len(srcs),
"OUTPUT_FILE=\"$(OUTS)\" %s $(location @com_bookingcom_rules_flatbuffers//flatbuffers:resolved_toolchain)" % (extra_env),
" ".join(include_paths_cmd),
" ".join(flatc_args),
language_flag,
output_directory,
"$$f;",
"done;",
])

genrule_cmd += "; ".join([
"pushd $(@D)",
"find . -type f | sort | sed 's!\\./!!g' > $$TMPDIR/generated",
"echo $(OUTS) | tr \" \" \"\n\" | sed \"s!$(@D)/!!g\"| sort > $$TMPDIR/expected",
"diff -u $$TMPDIR/expected $$TMPDIR/generated",
])

native.genrule(
name = name,
srcs = srcs + includes,
outs = outs,
output_to_bindir = output_to_bindir,
tools = ["@com_bookingcom_rules_flatbuffers//flatbuffers:resolved_toolchain"],
cmd = genrule_cmd,
compatible_with = compatible_with,
target_compatible_with = target_compatible_with,
restricted_to = restricted_to,
message = "Generating flatbuffer files for %s:" % (name),
**kwargs
)
if reflection_name:
if reflection_include_paths == None:
reflection_include_paths = default_include_paths()
reflection_include_paths_cmd = ["-I %s" % (s) for s in reflection_include_paths]
reflection_genrule_cmd = " ".join([
"set -eou pipefail;",
"SRCS=($(SRCS));",
"for f in $${SRCS[@]:0:%s}; do" % len(srcs),
"$(location @com_bookingcom_rules_flatbuffers//flatbuffers:resolved_toolchain)",
"-b --schema",
" ".join(flatc_args),
" ".join(reflection_include_paths_cmd),
language_flag,
output_directory,
"$$f;",
"done",
])
reflection_outs = [
(out_prefix + "%s.bfbs") % (s.replace(".fbs", "").split("/")[-1])
for s in srcs
]
native.genrule(
name = "%s_srcs" % reflection_name,
srcs = srcs + includes,
outs = reflection_outs,
output_to_bindir = output_to_bindir,
compatible_with = compatible_with,
restricted_to = restricted_to,
target_compatible_with = target_compatible_with,
cmd = reflection_genrule_cmd,
message = "Generating flatbuffer reflection binary for %s:" % (name),
visibility = reflection_visibility,
tools = ["@com_bookingcom_rules_flatbuffers//flatbuffers:resolved_toolchain"],
)
native.filegroup(
name = "%s_out" % reflection_name,
srcs = reflection_outs,
visibility = reflection_visibility,
compatible_with = compatible_with,
restricted_to = restricted_to,
)
12 changes: 6 additions & 6 deletions flatbuffers/private/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")

bzl_library(
name = "toolchains_repo",
srcs = ["toolchains_repo.bzl"],
name = "resolved_toolchain",
srcs = ["resolved_toolchain.bzl"],
visibility = ["//flatbuffers:__subpackages__"],
)

bzl_library(
name = "versions",
srcs = ["versions.bzl"],
name = "toolchains_repo",
srcs = ["toolchains_repo.bzl"],
visibility = ["//flatbuffers:__subpackages__"],
)

bzl_library(
name = "resolved_toolchain",
srcs = ["resolved_toolchain.bzl"],
name = "versions",
srcs = ["versions.bzl"],
visibility = ["//flatbuffers:__subpackages__"],
)
Loading

0 comments on commit 4602b9f

Please sign in to comment.