微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从多个存储库构建 Bazel 包

如何解决从多个存储库构建 Bazel 包

我正在尝试使用外部模块构建 OpenCV,但一直无法想出一个干净的解决方案。

我已经使用 CMake (rules_foreign_cc) 成功构建了 OpenCV。但是为了能够使用外部模块进行构建,我需要下载一个单独的 repo (opencv_contrib),然后使用第二个 repo 的路径作为构建参数进行构建。

有没有一种方法可以做到这一点,而不必创建我自己的将这两个 git 存储库结合起来的 git 存储库?

解决方法

# WORKSPACE file

http_archive(
   name = "rules_foreign_cc",strip_prefix = "rules_foreign_cc-4010620160e0df4d894b61496d3d3b6fc8323212",sha256 = "07e3414cc841b1f4d16e5231eb818e5c5e03e2045827f5306a55709e5045c7fd",url = "https://github.com/bazelbuild/rules_foreign_cc/archive/4010620160e0df4d894b61496d3d3b6fc8323212.zip",)

load("@rules_foreign_cc//foreign_cc:repositories.bzl","rules_foreign_cc_dependencies")
rules_foreign_cc_dependencies()


http_archive(
    name = "opencv_contrib",build_file="//:opencv_contrib.BUILD",sha256 = "9f52fd3114ac464cb4c9a2a6a485c729a223afb57b9c24848484e55cef0b5c2a",urls = ["https://github.com/opencv/opencv_contrib/archive/refs/tags/4.5.2.tar.gz"],strip_prefix = "opencv_contrib-4.5.2",)

http_archive(
    name = "opencv",sha256="ae258ed50aa039279c3d36afdea5c6ecf762515836b27871a8957c610d0424f8",build_file="//:opencv.BUILD",urls = ["https://github.com/opencv/opencv/archive/refs/tags/4.5.2.tar.gz"],strip_prefix = "opencv-4.5.2",)

# opencv_contrib.BUILD file

filegroup(
    name = "modules",srcs = glob(["modules/**"]),visibility = ["//visibility:public"],)
# opencv.BUILD file

load("@rules_foreign_cc//foreign_cc:defs.bzl","cmake")

filegroup(
    name = "srcs",srcs = glob(["**"]),)
cmake(
    name = "opencv",generate_args = ["-GNinja"],additional_inputs=["@opencv_contrib//:modules"],cache_entries = {
        "BUILD_SHARED_LIBS": "OFF","BUILD_opencv_world": "ON","OPENCV_EXTRA_MODULES_PATH": "$$EXT_BUILD_ROOT$$/external/opencv_contrib/modules",},lib_source = ":srcs",out_static_libs = ["libopencv_world.a"],)
,

您可以在 WORKSPACE 文件中使用 git_repository 规则让 bazel 在构建之前自动克隆 git 存储库。

将其添加到 WORKSPACE 文件后,您就可以在自己的存储库中引用远程存储库的构建目标。

this repo 为例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。