rules_perl
rules_perl copied to clipboard
C/C++ dependencies are completely ignored in "perl_xs" targets.
I expect those BUILD rules to work:
perl_xs(
name = "CacheMemcachedFastXS",
srcs = ["Fast.xs"],
defines = [
"VERSION=\"0.26\"",
"XS_VERSION=\"0.26\"",
],
output_loc = "arch/auto/Cache/Memcached/Fast/Fast.so",
textual_hdrs = ["ppport.h"],
typemaps = ["typemap"],
deps = [":libclient"],
)
cc_library(
name = "libclient",
srcs = [
"src/array.c",
"src/array.h",
"src/client.c",
"src/compute_crc32.c",
"src/compute_crc32.h",
"src/connect.c",
"src/connect.h",
"src/dispatch_key.c",
"src/dispatch_key.h",
"src/parse_keyword.c",
"src/parse_keyword.h",
"src/socket_posix.c",
"src/socket_posix.h",
],
hdrs = [
"src/client.h",
],
copts = ["-I."],
defines = [
"HAVE_POLL_H",
],
includes = [
".",
"src",
],
)
(The complete example is available here: cache_memcached_fast.BUILD)
However, the :libclient dependency is completely ignored, and produced Fast.so is failing at runtime due to missing symbols. I'm not sure why Bazel doesn't pick up this dependency, since CcInfos are merged in perl.bzl.
I've spent more time looking into this that I'm willing to admit, but I couldn't make it work. Any ideas, @skeletonkey?
I can workaround this issue by pulling :libclient sources into :CacheMemcachedFastXS using #23 (see: diff), but that's literally a workaround and not a proper solution.
Just want to let you know that I'm looking at this. This is a crazy week for me so I hope I can put some real time into this weekend.
@skeletonkey friendly ping.