如何在bazel中设置动态加载的库依赖项?

时间:2018-01-26 12:19:17

标签: c++ bazel

假设我有一个单元测试,使用dlopen从提供的共享库加载和调用代码

int main(int argc, char* argv[]) {
  const char* library = argv[1];
  // calls dlopen with library and does some testing
}

给定声明的库

cc_library(
    name = "a",
    srcs = ["a.cpp"],
    visibility = ["//visibility:public"],
)

有什么方法可以使用cc_test设置单元测试来运行作为参数传入的库a的位置? (最好也是以独立于平台的方式,这样我就不用担心库的后缀是什么了)

1 个答案:

答案 0 :(得分:1)

您可以编写一个访问runfiles的自定义云雀规则(相关讨论here)。

一起黑客攻击:

BUILD:

load("//:foo.bzl", "runfiles")

cc_binary(
    name = "liba.so",
    srcs = [ "a.cc" ],
    linkshared = 1,
)

runfiles(
    name = "runfiles",
    deps = [ ":liba.so" ],
)

foo.bzl:

def _impl(ctx):
  for dep in ctx.attr.deps:
    print(dep.files_to_run.executable.path)

runfiles = rule(
  implementation = _impl,
  attrs = {
    "deps": attr.label_list(allow_files=True),
  }
)