This allows flatbuffers to be built via Bazel on Windows without MSYS/bash. This should, at some point, be upstreamed to the flatbuffers project, but there's more to be done here to 'fully' fix everything: - Fix the reflection genrule - Investigate cmd_ps werrdness (see //.bazelrc, without this none of this works anyway) - Investigate why only test //tests/... works. diff --git a/build_defs.bzl b/build_defs.bzl index 88792be4..b1ea4b79 100644 --- a/build_defs.bzl +++ b/build_defs.bzl @@ -73,7 +73,7 @@ def flatbuffer_library_public( output_directory = ( ("-o $(@D)/%s" % (out_prefix)) if len(srcs) > 1 else ("-o $(@D)") ) - genrule_cmd = " ".join([ + genrule_cmd_bash = " ".join([ "SRCS=($(SRCS));", "for f in $${SRCS[@]:0:%s}; do" % len(srcs), "$(location %s)" % (flatc_path), @@ -84,13 +84,24 @@ def flatbuffer_library_public( "$$f;", "done", ]) + genrule_cmd_ps = " ".join([ + '"$(SRCS)".Split(" ") | ForEach {', + "$(location %s)" % (flatc_path), + " ".join(include_paths_cmd), + " ".join(flatc_args), + language_flag, + output_directory, + "$$_", + "}", + ]) native.genrule( name = name, srcs = srcs + includes, outs = outs, output_to_bindir = output_to_bindir, tools = [flatc_path], - cmd = genrule_cmd, + cmd_bash = genrule_cmd_bash, + cmd_ps = genrule_cmd_ps, compatible_with = compatible_with, restricted_to = restricted_to, message = "Generating flatbuffer files for %s:" % (name),