【问题标题】:Binary shell rule dependency二进制 shell 规则依赖
【发布时间】:2018-03-01 02:51:35
【问题描述】:

我们在工作中使用 Bazel 来包装和组织我们用于项目的一些构建系统。由于每个项目都有自己的构建系统(例如 bitbake),我们不能将 Bazel 用于实际构建(例如创建包含所有源代码的 cc_binary 和 cc_library 规则)。但我们确实将它用于包装和统一的 API。

我想让一个 shell 脚本 (A) 依赖于另一个 shell 脚本 (B),我想这样做,这样 B 将在 A 之前运行。由于我们在 BUILD 文件中有一些配置,我可以' t 简单地从命令行 B 然后 A 运行。我需要 Bazel 这样做,并将配置注入两个脚本。类似的东西:

在一个组件的BUILD文件中:

sh_binary(
name = "bazel_build_multivisor",
srcs = ["bazel-build-multivisor.sh"],
data = ["wrkspceinfo"],
deps = ["//core-build/components/bazel-pull:bazel_pull_multivisor"])

在负责从 git 拉取的第二个组件的 BUILD 文件中:

sh_binary(
name = "bazel_pull_multivisor",
srcs = ["pull_repo_repository.sh"],
data = ["wrkspceinfo", "pull_repo_repository.sh"],
args = [ARGS, "NAME=multivisor_repo;MODULE_NAME=*;GIT_BRANCH=*;MANIFEST=*.xml;PULL_PARAMS=8,8,8"],)

意思是,我希望 sh_binary 规则依赖于不同的 sh_binary 规则。

这可能吗?有更好的方法吗?

谢谢。

【问题讨论】:

    标签: bazel


    【解决方案1】:

    考虑使用genrule

    您可以在genrule.tools 属性中同时指定sh_binary 目标,然后在genrule.cmd 属性中指定按顺序调用它们的shell 命令。

    例如,

    genrule(
        name = "pull_and_build",
        srcs = "some_config_file.txt",
        outs = ["built_project.tar.gz"]
        tools = [":pull_sh", ":build_sh"],
        cmd = """
    $(location :pull_sh) $< | \
      xargs -1 $(location :build_sh) | \
      xargs -1 tar -czvf $@"""
    )
    

    另一种可能的方法是将依赖关系 sh_binary 包装在 sh_library 中,并将它们聚合到顶层 sh_binary

    【讨论】:

      猜你喜欢
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      • 2012-05-01
      • 2012-04-11
      • 1970-01-01
      • 2021-10-20
      相关资源
      最近更新 更多