Context: I'm trying to come up with a fix for https://github.com/tensorflow/tensorflow/issues/37861 where header files of an external dependency are manually listed but that list is version specific and hence impossible to keep up to date.
What is happening:
tf_http_archive(name = "com_google_protobuf", system_build_file = clean_dep("//third_party/systemlibs:protobuf.BUILD") ...)
is invokedtf_http_archive
is arepository_rule
with effectively nothing butctx.template("BUILD.bazel", ctx.attr.system_build_file, {...}, False)
- In the
protobuf.BUILD
there is a listHEADERS = ["google/protobuf/any.pb.h", ...]
which is passed to thehdrs
argument ofcc_library
calls - a
genrule
apperantly symlinks those headers from$(INCLUDEDIR)
into$(@D)
(I'm not really familiar with Bazel but IIUC the latter is some internal build directory used later)
As I'm unfamiliar with Bazel in general I'll just assume the list of headers is required and there exists a $(INCLUDEDIR)/google/protobuf
folder and is somewhere (else) on the system, e.g. /usr/local/include
.
Is there any way to get all *.h
and *.inc
files in the format (i.e. relative to $(INCLUDEDIR)
) via a glob or similar? The Bazel glob
function doesn't work for absolute paths, so that can't be used.
I found https://github.com/bazelbuild/bazel/issues/8846 suggesting to use new_local_repository
with a build_file
and a path
set to (in this case) $(INCLUDEDIR)
but I don't see how that could be applied to the tf_http_archive
(which has some conditions to either download the dependency or just use the system_build_file). This seems to also allow to avoid the symlinking (which I'm highly suspicious of anyway because that folder is added via -iquote
but include style is #include <...>
, see my comments in https://github.com/tensorflow/tensorflow/issues/37861)
Bonus points for people contributing to the issue or ideas why action_env environment variables seem to be ignored in a native.cc_library
call.