问题标签 [bazel-rules]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
328 浏览

sh - 独立 Shell 脚本工作正常,但使用时 sh_binary 的 srcs 无法正常工作

我的项目结构如下 - PROJECT_STRUCTURE

现在 my_shbin.sh 如下 -

该脚本在单独调用时完全正常并提供所需的结果。但是当我在我的 BUILD 文件中添加以下 sh_binary 时,我在 temp-scan-files.txt 文件中看不到任何内容,因此在 its-scan-report.txt 文件中什么也看不到

我使用播放图标从 intellij 运行 sh_binary,并尝试使用 bazel run :findFiles 从终端运行它。没有显示错误,但我看不到 temp-scan-files.txt 中的数据。关于这个问题的任何帮助。bazel 的文档非常有限,除了用例之外几乎没有任何信息。

0 投票
0 回答
52 浏览

bazel-rules - 如何进行运行 genquery 和 genrule 的操作?

我正在建立一个 bazel 规则。我希望我的一个动作执行 genquery,另一个执行 genrule 将输出 genquery 的结果。

我有困难,因为动作类型列表中没有可用的 genquery 和 genrule:https ://docs.bazel.build/versions/3.3.0/skylark/lib/actions.html

会欣赏提示。

0 投票
0 回答
84 浏览

linux - Linux 上 Qt6 的 Bazel 规则:如何复制所需的库?

目前,我正在进行一项通过Bazel支持Qt6的实验。我的代码可以在这里找到。

在安装了 Bazel 和 GCC9 的 Linux 上,您可以通过以下方式测试我的 Qt6 Bazel 规则:

尝试运行Qt6HelloWorld时报告此错误:

在 Qt6.1.0 中似乎有一个libQt6Network.so,libQt6Network.so.6和。libQt6Network.so.6.1.0如果我将这些文件复制到bazel-out/k8-fastbuild/binQt6HelloWorld二进制文件所在的位置),我仍然会收到此错误。

有关如何解决此错误的任何想法?关于如何扩展规则以复制那些必需的库以使 Bazel 满意的任何想法?

0 投票
2 回答
398 浏览

opencv - 从多个 repos 构建 Bazel 包

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

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

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

0 投票
1 回答
88 浏览

bazel - 如何将规则限制为 cpp 工具链的子集?

我有这样的规则

我为自定义 cpu 定义了自定义 cc_toolchain:

--crostool_top会在需要时选择此工具链。

我只想在 --crostool_top 与我的自定义工具链之一匹配时才允许调用我的自定义规则。这个怎么做?

0 投票
0 回答
24 浏览

bazel-rules - Bazel/sandboxfs/ld.gold:中断链接步骤时损坏的二进制文件

我正在将一个巨大的 C++ 代码库迁移到 Bazel。

由于我们无法一次完成所有操作,因此每次编译都依赖于 30k 多个头文件。因此,无论我们使用 processwrapper 还是 linux-sandbox,创建沙箱都需要很长时间。(也许这与我们必须使用的旧 Linux 3.10 内核有关?)Sandboxfs 已被证明是一个好处。使用它可以减少大约 30% 的构建时间。这就是为什么我们要继续使用它。

但是,有时我使用 Ctrl-C 中止构建,有时 Bazel 在遇到错误时中止构建。似乎无论何时cc_binary中止构建步骤,我都会得到一个大小合适的二进制文件(就像我没有中止构建一样)但只包含 nul 字节。

仅当我使用 ld.gold (默认值)时才会发生这种情况。测试版本 2.35 和HEAD.

回顾一下:

  • 仅在使用 sandboxfs 时才会发生。
  • 仅在使用(和打断)金币时才会发生。

你对如何研究这个问题有任何想法吗?甚至:如何解决?

更新

gold打开输出文件,然后它是输出文件fallocate的最终大小(不使用临时文件)。然后它写入数据。

如果打开文件后出现错误,gold不会删除无效的输出文件对于构建工具来说有点不常见,不是吗?

0 投票
1 回答
292 浏览

go - Bazel docker_image 复制额外的文件夹

我目前正在为我的 GoLang 应用程序使用 bazel。

除了 my-golang-app 文件夹之外,我需要在构建此映像时复制另一个名为 my-new-folder 的文件夹及其中的所有内容。

如何用 bazel 做到这一点?我似乎无法在 bazel 文档中找到解决方案。

0 投票
0 回答
154 浏览

code-coverage - 在自定义 Bazel C 规则中实现基于 clang 的代码覆盖率

我正在尝试bazel coverage //my:test输出覆盖数据文件,使用自定义 C 规则构建并使用自定义 clang 工具链。

对于 Bazel 的原生 C 规则,这是一个已解决的问题。cc_library我可以使用和原生规则构建覆盖输出,方法cc_test是运行以下命令并设置 env:

测试目标有一个coverage.dat文件输出,也有一个组合的 dat 报告文件。我注意到cc_library目标返回一个InstrumentedFilesInfo提供程序,该提供程序具有在编译期间填充了文件输出的“元数据文件”属性。.gcno


我正在使用cc_commonStarlark 库来构建自定义 C 规则,并且我的编译操作是通过cc_common.compile(). 虽然*.gcno文件是 Bazel 期望从此操作 [0] 输出的输出,但 compile 函数不会*.gcno File在编译上下文或编译输出中返回任何对象,因此将它们用作另一个操作的输入/在提供程序中返回/添加到目标的运行文件是不可能。

我知道这些.dat文件是使用*.gcno编译输出和*.gcda沙盒测试执行输出生成的,并结合在collect_cc_coverage.sh脚本中。在我的规则实现的管道中缺少某些东西,无法通过返回由构造的提供程序来修复,coverage_common.instrumented_files_info()并声明额外的输出cc_common.compile()目前是不可能的。

[0]:在添加文件的地方运行coverage而不是test具有工具链功能,输出文件并出现在.--compile.gcnobazel-out

我的问题:

  • 有没有人有为自定义 C 规则实现代码覆盖的经验?
  • 如何让我的测试可执行文件接收.gcno文件、生成.gcda文件并使用我的工具链将两者结合起来生成.dat符合原生 C 规则的文件?(这个问题不需要.gcno- 涉及 profraw/profdata 的解决方案同样有效。)
0 投票
0 回答
103 浏览

c++ - 使用相对路径包含生成的头文件

目前,我尝试使用最初使用 CMake 作为构建系统的Bazel (4.1.0) 构建一个库。

我在尝试使用相对路径(在它使用的 CMake 构建中configure_file)包含生成的头文件时遇到问题:

(下面的例子也可以在这里找到)

工作空间.bazel

主.cpp

内核/some_header.h

配置.h.in

构建.bazel

bazel/BUILD.bazel : <空>

bazel/template_rule.bzl

当我跑bazel build //...

我得到错误:

当我将其包含在内config.h并从所有内容中main.cpp删除时,kernel/some_header.h一切都会按预期进行。

任何想法如何相对路径.../config.h工作?

创建文件config.h并手动编译代码按预期工作:

根据最佳实践..,应避免使用相对路径,但您可以在使用 CMake 构建的遗留代码中找到此类内容。这是巴泽尔的限制吗?还是有解决方法?

0 投票
1 回答
62 浏览

unit-testing - 我们可以对 Bazel 使用 ceedling 吗?

我正在使用 Bazel 对 ac 嵌入式项目进行单元测试,首先我使用 Ceedling(Unity 和 cmock)测试了代码并且它有效。现在,我正在尝试合并到 Bazel,但我没有找到任何关于使用 ceedling 和 Bazel 的文档。