diff --git a/build_defs.bzl b/build_defs.bzl index f9d8597be98..e60b65054e1 100644 --- a/build_defs.bzl +++ b/build_defs.bzl @@ -152,12 +152,34 @@ def flatbuffer_library_public( "done", ]) reflection_outs = [ - (out_prefix + "%s.bfbs") % (s.replace(".fbs", "").split("/")[-1]) + (out_prefix + "%s.bfbs") % (native.package_relative_label(s).name.removesuffix(".fbs")) for s in srcs ] + + # Flatc generates the output file name based on the input basename + # So in order to generate the .bfbs file in the current package + # we need to copy the .fbs files into the package as well + srcs_reflection = [] + for s in srcs: + label_src = native.package_relative_label(s) + label_in_current_package = native.package_relative_label(":invalid") + if label_src.repo_name != label_in_current_package.repo_name or label_src.package != label_in_current_package.package: + if not label_src.name.endswith(".fbs"): + fail("Filegroups in srcs are only supported for the current package") + copied_src_label = "copy_" + label_src.name + native.genrule( + name = copied_src_label, + srcs = [s], + outs = [label_src.name], + cmd = "cp $< $@", + ) + srcs_reflection.append(copied_src_label) + else: + srcs_reflection.append(s) + native.genrule( name = "%s_srcs" % reflection_name, - srcs = srcs + includes, + srcs = srcs_reflection + includes, outs = reflection_outs, output_to_bindir = output_to_bindir, tools = [TRUE_FLATC_PATH], diff --git a/reflection/BUILD.bazel b/reflection/BUILD.bazel index 4bdada5b8b9..9c8ed111155 100644 --- a/reflection/BUILD.bazel +++ b/reflection/BUILD.bazel @@ -7,6 +7,12 @@ filegroup( visibility = ["//visibility:public"], ) +# Needed by build_defs.bzl to copy the file to the evaluating package +exports_files( + srcs = ["reflection.fbs"], + visibility = ["//visibility:public"], +) + filegroup( name = "reflection_fbs_schema", srcs = ["reflection.fbs"], diff --git a/reflection/ts/BUILD.bazel b/reflection/ts/BUILD.bazel index 0b3dfbe9af3..030b808b79c 100644 --- a/reflection/ts/BUILD.bazel +++ b/reflection/ts/BUILD.bazel @@ -1,15 +1,18 @@ load("//:typescript.bzl", "flatbuffer_ts_library") -genrule( - name = "copy_schema_to_folder", - srcs = ["//reflection:reflection_fbs_schema"], - outs = ["reflection.fbs"], - cmd = "cp $< $@", -) +# Flatc generates the output file name based on the input basename +# So in order to generate reflection/ts/reflection_fbs_schema.bfbs +# we need to copy reflection/reflection.fbs to reflection/ts/reflection.fbs. +# genrule( +# name = "copy_schema_to_folder", +# srcs = ["//reflection:reflection_fbs_schema"], +# outs = ["reflection.fbs"], +# cmd = "cp $< $@", +# ) flatbuffer_ts_library( name = "reflection_ts_fbs", - srcs = [":reflection.fbs"], + srcs = ["//reflection:reflection.fbs"], gen_reflections = True, visibility = ["//visibility:public"], ) diff --git a/tests/ts/BUILD.bazel b/tests/ts/BUILD.bazel index ee97f8fde70..4df03b4217a 100644 --- a/tests/ts/BUILD.bazel +++ b/tests/ts/BUILD.bazel @@ -18,6 +18,7 @@ flatbuffer_ts_library( name = "typescript_ts_fbs", srcs = ["typescript_keywords.fbs"], deps = [ + "//reflection/ts:reflection_ts_fbs", "//tests/ts/test_dir:include_ts_fbs", "//tests/ts/test_dir:typescript_transitive_ts_fbs", ], diff --git a/typescript.bzl b/typescript.bzl index 994488bb96a..c26211b3293 100644 --- a/typescript.bzl +++ b/typescript.bzl @@ -47,7 +47,7 @@ def flatbuffer_ts_library( reflection binaries for the schemas. """ srcs_lib = "%s_srcs" % (name) - out_base = [s.replace(".fbs", "").split("/")[-1].split(":")[-1] for s in srcs] + out_base = [native.package_relative_label(s).name.removesuffix(".fbs") for s in srcs] if len(srcs) != 1: fail("flatbuffer_ts_library only supports one .fbs file per target currently.")