问题标签 [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.
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 的文档非常有限,除了用例之外几乎没有任何信息。
bazel-rules - 如何进行运行 genquery 和 genrule 的操作?
我正在建立一个 bazel 规则。我希望我的一个动作执行 genquery,另一个执行 genrule 将输出 genquery 的结果。
我有困难,因为动作类型列表中没有可用的 genquery 和 genrule:https ://docs.bazel.build/versions/3.3.0/skylark/lib/actions.html
会欣赏提示。
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/bin
(Qt6HelloWorld
二进制文件所在的位置),我仍然会收到此错误。
有关如何解决此错误的任何想法?关于如何扩展规则以复制那些必需的库以使 Bazel 满意的任何想法?
opencv - 从多个 repos 构建 Bazel 包
我正在尝试使用外部模块构建 OpenCV,但无法提出一个干净的解决方案。
我已经使用 CMake (rules_foreign_cc) 成功构建了 OpenCV。但是为了能够使用外部模块进行构建,我需要下载一个单独的 repo (opencv_contrib),然后使用第二个 repo 的路径作为构建参数进行构建。
有没有一种方法可以做到这一点,而不必创建我自己的结合这两个 git 存储库的 git 存储库?
bazel - 如何将规则限制为 cpp 工具链的子集?
我有这样的规则
我为自定义 cpu 定义了自定义 cc_toolchain:
我--crostool_top
会在需要时选择此工具链。
我只想在 --crostool_top 与我的自定义工具链之一匹配时才允许调用我的自定义规则。这个怎么做?
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不会删除无效的输出文件。对于构建工具来说有点不常见,不是吗?
go - Bazel docker_image 复制额外的文件夹
我目前正在为我的 GoLang 应用程序使用 bazel。
除了 my-golang-app 文件夹之外,我需要在构建此映像时复制另一个名为 my-new-folder 的文件夹及其中的所有内容。
如何用 bazel 做到这一点?我似乎无法在 bazel 文档中找到解决方案。
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_common
Starlark 库来构建自定义 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
.gcno
bazel-out
我的问题:
- 有没有人有为自定义 C 规则实现代码覆盖的经验?
- 如何让我的测试可执行文件接收
.gcno
文件、生成.gcda
文件并使用我的工具链将两者结合起来生成.dat
符合原生 C 规则的文件?(这个问题不需要.gcno
- 涉及 profraw/profdata 的解决方案同样有效。)
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 构建的遗留代码中找到此类内容。这是巴泽尔的限制吗?还是有解决方法?
unit-testing - 我们可以对 Bazel 使用 ceedling 吗?
我正在使用 Bazel 对 ac 嵌入式项目进行单元测试,首先我使用 Ceedling(Unity 和 cmock)测试了代码并且它有效。现在,我正在尝试合并到 Bazel,但我没有找到任何关于使用 ceedling 和 Bazel 的文档。